祝敏航,李曉明,范澤冰,馬 超,王金龍,蔡 迪
(浙江理工大學(xué),a.啟新學(xué)院;b.機(jī)械電子工程研究所,浙江 杭州 310018)
雙足機(jī)器人是一個(gè)多自由度、運(yùn)動(dòng)鏈復(fù)雜的動(dòng)力學(xué)系統(tǒng),是機(jī)器人研究領(lǐng)域的主要方向之一,其核心技術(shù)包括了計(jì)算機(jī)技術(shù)、機(jī)器人學(xué)、傳感技術(shù)、人工智能等高新技術(shù)。
與工業(yè)機(jī)器人相比,類人型機(jī)器人的研究水平,遠(yuǎn)沒有達(dá)到實(shí)際應(yīng)用的程度。另一方面,嵌入式技術(shù)的迅猛發(fā)展,使得其得以應(yīng)用于機(jī)器人領(lǐng)域。嵌入式微處理器性能的提升,滿足了機(jī)器人系統(tǒng)較高的使用要求,使得智能機(jī)器人的實(shí)現(xiàn)更具可行性。
本文采用SAMSUNG公司的S3C2400A微處理器,開發(fā)了雙足機(jī)器人的控制硬件電路及軟件系統(tǒng),實(shí)現(xiàn)了機(jī)器人對(duì)特定物體(本文中為黃色圓球,黑色背景)的目標(biāo)識(shí)別,以及根據(jù)識(shí)別結(jié)果進(jìn)行趨于目標(biāo)的雙足行走。
本文研究的是具有6個(gè)自由度的雙足機(jī)器人,如圖1、圖2所示。其中包括2個(gè)髖關(guān)節(jié)、2個(gè)膝關(guān)節(jié)和2個(gè)踝關(guān)節(jié):髖關(guān)節(jié)與膝關(guān)節(jié)各有1個(gè)自由度,負(fù)責(zé)前向運(yùn)動(dòng);踝關(guān)節(jié)有1個(gè)自由度,負(fù)責(zé)側(cè)向運(yùn)動(dòng);6個(gè)關(guān)節(jié)均為轉(zhuǎn)動(dòng)副。
圖1 雙足機(jī)器人模型
圖2 雙足機(jī)器人實(shí)物
本文采用SAMSUNG公司的S3C2440A微處理器和芯片為OV9650的CMOS攝像頭,完成了對(duì)特定目標(biāo)的識(shí)別;采用32路舵機(jī)控制器和Tower Pro公司型號(hào)為MG945和MG995兩款舵機(jī),完成了雙足機(jī)器人的轉(zhuǎn)彎和直線行走。其硬件結(jié)構(gòu)如圖3所示。
圖3 機(jī)器人硬件框圖
S3C2440A微處理器內(nèi)部集成了ARM公司ARM920T處理器核,主頻達(dá)到400 MHz,最高可達(dá)533 MHz,滿足了系統(tǒng)在圖像處理方面的要求。同時(shí),本系統(tǒng)配置了256M Nand Flash和在板64M 32位SDRAM,以滿足圖像數(shù)據(jù)的存儲(chǔ)要求。
32路舵機(jī)控制器,是雙足機(jī)器人6路舵機(jī)協(xié)調(diào)動(dòng)作的軟硬件結(jié)合系統(tǒng),主要由上位機(jī)軟件和伺服舵機(jī)驅(qū)動(dòng)控制器組成,不但能實(shí)現(xiàn)位置控制和速度控制,還具有時(shí)間延時(shí)斷點(diǎn)發(fā)送指令的功能。
通過(guò)S3C2440A和32路舵機(jī)控制器的串口通信,即可實(shí)現(xiàn)6路伺服舵機(jī)的單獨(dú)控制或同時(shí)控制,完成雙足機(jī)器人各關(guān)節(jié)的協(xié)調(diào)配合。
嵌入式linux系統(tǒng),為開放源碼的操作系統(tǒng),具有較高的可移植性和方便的內(nèi)核配置等特性。本文使用的linux系統(tǒng)內(nèi)核版本為L(zhǎng)inux2.6.32.2,交叉編譯器版本為arm-linux-gcc-4.4.3。通過(guò)交叉編譯器編譯,即可將宿主機(jī)中的源代碼編譯成可在目標(biāo)板中運(yùn)行的可執(zhí)行文件。內(nèi)核移植時(shí)已燒寫進(jìn)了CMOS攝像頭驅(qū)動(dòng)程序,故內(nèi)核配置只需選擇相應(yīng)選項(xiàng)即可:
(1)在Device Drivers菜單中,選擇Multimedia support進(jìn)入;
(2)選擇 ov9650 on the S3C2440 driver。
雙足機(jī)器人系統(tǒng)的軟件實(shí)現(xiàn)如圖4所示。
圖4 軟件工作流程
其中主要步驟說(shuō)明如下:
(1)圖像采集。CMOS攝像頭的設(shè)備文件名位于Linux系統(tǒng)下的/dev/camera目錄,利用CMOS攝像頭動(dòng)驅(qū)程序提供的I/O操作接口函數(shù),來(lái)打開攝像頭設(shè)備:
(2)圖像數(shù)據(jù)的轉(zhuǎn)換及灰度化。本文使用的攝像頭采集的圖片格式為16位的RGB格式,即單個(gè)像素的位數(shù)為16,其中B為5位,G為6位,R為5位(按內(nèi)存中排列順序)。由于灰度化時(shí)要用到24位的RGB格式,所以需要進(jìn)行相應(yīng)轉(zhuǎn)換。按照灰度化公式
將圖像轉(zhuǎn)換為灰度圖像。
具體可通過(guò)以下代碼實(shí)現(xiàn):
其中,Addr為圖像數(shù)據(jù)的首地址,LineLen是圖像數(shù)據(jù)每行的字節(jié)長(zhǎng)度。
(3)邊緣檢測(cè)與二值化。邊緣檢測(cè)的算子有Roberts算子、Sobel算子、Prewitt算子、Krisch 算子等,本文采用Sobel算子進(jìn)行邊緣檢測(cè),具體算法如下:
Sobel算子是一種利用局部差分尋找邊緣的算子,它考慮圖像3×3領(lǐng)域的處理。該算子由2個(gè)卷積核組成,如圖5所示。
圖5 卷積核
將圖像中的每個(gè)像素點(diǎn)分別與這兩個(gè)核做卷積,取值較大的作為該像素點(diǎn)的灰度值。
在做卷積過(guò)程中可以參考以下方法:
設(shè)某一像素點(diǎn)(P5)與其相鄰的8個(gè)像素點(diǎn)的關(guān)系如圖6所示。
圖6 相鄰9點(diǎn)的位置關(guān)系
兩卷積可以表示為
Gx、Gy為卷積值,取其中的大值作為P5點(diǎn)的灰度值。
通過(guò)sobel算子處理后的圖像在目標(biāo)邊緣的灰度值呈現(xiàn)出一定的特征。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),在本系統(tǒng)中目標(biāo)邊緣特征灰度值?。?10,180)較為合適。令灰度值在(110,180)中的像素點(diǎn)的灰度值為1,其他像素點(diǎn)的值為0,實(shí)現(xiàn)圖像的二值化。
(4)梯度Hough變換(GHT)檢測(cè)圓心。Hough轉(zhuǎn)換常用于檢測(cè)幾何圖形,在傳統(tǒng)Hough轉(zhuǎn)換的基礎(chǔ)上發(fā)展出來(lái)的新型算法,大大提高了檢測(cè)速度。本文選取了GHT來(lái)實(shí)現(xiàn)對(duì)目標(biāo)中心的檢測(cè)。
GHT算法的核心思想是用極坐標(biāo)方程表示圓:
式中,a,b分別表示圓心橫縱坐標(biāo);
x,y為圓周點(diǎn)的橫縱坐標(biāo);
r為半徑;
θ為點(diǎn)(x,y)的梯度角。
有sobel算子可知
實(shí)際上,上式就表示了圓周點(diǎn)(x,y)處的梯度信息。
結(jié)合梯度信息,利用常規(guī)Hough變換,即可較為快速地得到所識(shí)別圓的圓心(a,b)。DHT的實(shí)現(xiàn)步驟為:
步驟一,針對(duì)二值化后的圖像,對(duì)每個(gè)灰度值為1的像素點(diǎn),按式(2)中求的梯度角θ,在對(duì)半徑r的循環(huán)中求得a、b;
步驟二,建立一個(gè)累加數(shù)組center[height][width],在上述循環(huán)中,center[b][a]加1;
步驟三,找出累加數(shù)組中的最大值,對(duì)應(yīng)的a、b就是圓心坐標(biāo)。
針對(duì)本機(jī)器人系統(tǒng)只要求出a,即可判斷機(jī)器人的行走方向,所以我們只求取了圓心坐標(biāo)中的橫坐標(biāo)a。具體可通過(guò)以下代碼實(shí)現(xiàn):
若像素點(diǎn)的灰度值在上述閾值(110,180)范圍內(nèi),則求出以下的 SinTheta,x1,x2
……
x1=i-radius*SinTheta;//對(duì)其中(i,j)為像素點(diǎn)坐標(biāo),radius為窮舉的半徑值
x2=j+radius*SinTheta;
for(x=x1;x<=x2;x++){
center[x]+=1;//a為center[x]數(shù)組中最大值對(duì)應(yīng)的x
}
根據(jù)a的值,我們可以調(diào)整機(jī)器人的朝向。
(5)串口通信與舵機(jī)控制。S3C2440本身帶有3個(gè)TTL串口UART0、1、2,利用其中之一就能實(shí)現(xiàn)串口通信。本文選用了UART0與32路舵機(jī)控制器進(jìn)行通信。將UART0中的TXD0管腳,GND管腳分別與舵機(jī)控制器的RX管腳,GND管腳相連。S3C2440作為上位機(jī),給32路伺服舵機(jī)控制器發(fā)送指令,設(shè)置波特率為115200,即可完成通信,指令說(shuō)明如下:
#
串口通信可通過(guò)以下程序?qū)崿F(xiàn):
根據(jù)(4)中判斷結(jié)果調(diào)用相關(guān)指令,完成雙足機(jī)器人的行走。
(6)生成可執(zhí)行文件。利用linux下的交叉編譯器arm-linux-gcc中的編譯指令arm–linux–g++,生成在目標(biāo)板中的可執(zhí)行文件,即可運(yùn)行程序,完成雙足機(jī)器人的目標(biāo)識(shí)別及朝向目標(biāo)地雙足行走。
在機(jī)器人目標(biāo)識(shí)別及跟蹤行走中,通過(guò)CMOS攝像頭抓拍下如圖7所示的畫面及圖8所示的判斷結(jié)果。此時(shí),雙足機(jī)器人左轉(zhuǎn)彎,朝著目標(biāo)直線前進(jìn),直到程序設(shè)定時(shí)間,然后再進(jìn)行下次判斷。
圖7 抓拍圖
圖8 判斷結(jié)果
本雙足機(jī)器人研究,結(jié)合了圖像處理技術(shù)和機(jī)器人機(jī)構(gòu)分析,基于嵌入式linux系統(tǒng),使得雙足機(jī)器人具備了自動(dòng)識(shí)別具有一定特征的目標(biāo)的能力,利用32路舵機(jī)控制器,實(shí)現(xiàn)了機(jī)器人雙足行走的要求,其研究成果具有廣泛的教學(xué)應(yīng)用前景。該研究的不足之處,在于為了得到更為準(zhǔn)確的位置定位,采用了綜合多次判斷結(jié)果得出最后判斷結(jié)果的算法,使得判斷時(shí)間增加。該算法過(guò)于簡(jiǎn)單,在以后的研究中,可以考慮換用不同的算法,或進(jìn)一步改進(jìn)hough變換的算法,以提高效率。
[1]張 勇,許東來(lái).小型雙足步行機(jī)器人的步態(tài)規(guī)劃[J].計(jì)算機(jī)仿真,2010,27(11):148-151.
[2]劉海波,沈 晶,郭 聳.Visual C++數(shù)字圖像處理技術(shù)詳解[M].北京:機(jī)械工業(yè)出版社,2010.
[3]瞿 鈞,甘嵐.梯度Hough變換在圓檢測(cè)中的應(yīng)用[J].華東交通大學(xué)學(xué)報(bào),2007,24(1):101-104.
[4]周 奮,王 婷.嵌入式系統(tǒng)中串口通信幀的同步方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2006,(10):73-75.
[5]馬文輝,李蘭友.Linux環(huán)境下的串口通信[J].儀器儀表用戶,2005,(1):39-42.