祝敏航,李曉明,范澤冰,馬 超,王金龍,蔡 迪
(浙江理工大學,a.啟新學院;b.機械電子工程研究所,浙江 杭州 310018)
雙足機器人是一個多自由度、運動鏈復雜的動力學系統,是機器人研究領域的主要方向之一,其核心技術包括了計算機技術、機器人學、傳感技術、人工智能等高新技術。
與工業機器人相比,類人型機器人的研究水平,遠沒有達到實際應用的程度。另一方面,嵌入式技術的迅猛發展,使得其得以應用于機器人領域。嵌入式微處理器性能的提升,滿足了機器人系統較高的使用要求,使得智能機器人的實現更具可行性。
本文采用SAMSUNG公司的S3C2400A微處理器,開發了雙足機器人的控制硬件電路及軟件系統,實現了機器人對特定物體(本文中為黃色圓球,黑色背景)的目標識別,以及根據識別結果進行趨于目標的雙足行走。
本文研究的是具有6個自由度的雙足機器人,如圖1、圖2所示。其中包括2個髖關節、2個膝關節和2個踝關節:髖關節與膝關節各有1個自由度,負責前向運動;踝關節有1個自由度,負責側向運動;6個關節均為轉動副。

圖1 雙足機器人模型

圖2 雙足機器人實物
本文采用SAMSUNG公司的S3C2440A微處理器和芯片為OV9650的CMOS攝像頭,完成了對特定目標的識別;采用32路舵機控制器和Tower Pro公司型號為MG945和MG995兩款舵機,完成了雙足機器人的轉彎和直線行走。其硬件結構如圖3所示。

圖3 機器人硬件框圖
S3C2440A微處理器內部集成了ARM公司ARM920T處理器核,主頻達到400 MHz,最高可達533 MHz,滿足了系統在圖像處理方面的要求。同時,本系統配置了256M Nand Flash和在板64M 32位SDRAM,以滿足圖像數據的存儲要求。
32路舵機控制器,是雙足機器人6路舵機協調動作的軟硬件結合系統,主要由上位機軟件和伺服舵機驅動控制器組成,不但能實現位置控制和速度控制,還具有時間延時斷點發送指令的功能。
通過S3C2440A和32路舵機控制器的串口通信,即可實現6路伺服舵機的單獨控制或同時控制,完成雙足機器人各關節的協調配合。
嵌入式linux系統,為開放源碼的操作系統,具有較高的可移植性和方便的內核配置等特性。本文使用的linux系統內核版本為Linux2.6.32.2,交叉編譯器版本為arm-linux-gcc-4.4.3。通過交叉編譯器編譯,即可將宿主機中的源代碼編譯成可在目標板中運行的可執行文件。內核移植時已燒寫進了CMOS攝像頭驅動程序,故內核配置只需選擇相應選項即可:
(1)在Device Drivers菜單中,選擇Multimedia support進入;
(2)選擇 ov9650 on the S3C2440 driver。
雙足機器人系統的軟件實現如圖4所示。

圖4 軟件工作流程
其中主要步驟說明如下:
(1)圖像采集。CMOS攝像頭的設備文件名位于Linux系統下的/dev/camera目錄,利用CMOS攝像頭動驅程序提供的I/O操作接口函數,來打開攝像頭設備:

(2)圖像數據的轉換及灰度化。本文使用的攝像頭采集的圖片格式為16位的RGB格式,即單個像素的位數為16,其中B為5位,G為6位,R為5位(按內存中排列順序)。由于灰度化時要用到24位的RGB格式,所以需要進行相應轉換。按照灰度化公式

將圖像轉換為灰度圖像。
具體可通過以下代碼實現:


其中,Addr為圖像數據的首地址,LineLen是圖像數據每行的字節長度。
(3)邊緣檢測與二值化。邊緣檢測的算子有Roberts算子、Sobel算子、Prewitt算子、Krisch 算子等,本文采用Sobel算子進行邊緣檢測,具體算法如下:
Sobel算子是一種利用局部差分尋找邊緣的算子,它考慮圖像3×3領域的處理。該算子由2個卷積核組成,如圖5所示。

圖5 卷積核
將圖像中的每個像素點分別與這兩個核做卷積,取值較大的作為該像素點的灰度值。
在做卷積過程中可以參考以下方法:
設某一像素點(P5)與其相鄰的8個像素點的關系如圖6所示。

圖6 相鄰9點的位置關系
兩卷積可以表示為

Gx、Gy為卷積值,取其中的大值作為P5點的灰度值。
通過sobel算子處理后的圖像在目標邊緣的灰度值呈現出一定的特征。通過實驗發現,在本系統中目標邊緣特征灰度值取(110,180)較為合適。令灰度值在(110,180)中的像素點的灰度值為1,其他像素點的值為0,實現圖像的二值化。
(4)梯度Hough變換(GHT)檢測圓心。Hough轉換常用于檢測幾何圖形,在傳統Hough轉換的基礎上發展出來的新型算法,大大提高了檢測速度。本文選取了GHT來實現對目標中心的檢測。
GHT算法的核心思想是用極坐標方程表示圓:

式中,a,b分別表示圓心橫縱坐標;
x,y為圓周點的橫縱坐標;
r為半徑;
θ為點(x,y)的梯度角。
有sobel算子可知

實際上,上式就表示了圓周點(x,y)處的梯度信息。
結合梯度信息,利用常規Hough變換,即可較為快速地得到所識別圓的圓心(a,b)。DHT的實現步驟為:
步驟一,針對二值化后的圖像,對每個灰度值為1的像素點,按式(2)中求的梯度角θ,在對半徑r的循環中求得a、b;
步驟二,建立一個累加數組center[height][width],在上述循環中,center[b][a]加1;
步驟三,找出累加數組中的最大值,對應的a、b就是圓心坐標。
針對本機器人系統只要求出a,即可判斷機器人的行走方向,所以我們只求取了圓心坐標中的橫坐標a。具體可通過以下代碼實現:

若像素點的灰度值在上述閾值(110,180)范圍內,則求出以下的 SinTheta,x1,x2
……
x1=i-radius*SinTheta;//對其中(i,j)為像素點坐標,radius為窮舉的半徑值
x2=j+radius*SinTheta;
for(x=x1;x<=x2;x++){
center[x]+=1;//a為center[x]數組中最大值對應的x
}
根據a的值,我們可以調整機器人的朝向。
(5)串口通信與舵機控制。S3C2440本身帶有3個TTL串口UART0、1、2,利用其中之一就能實現串口通信。本文選用了UART0與32路舵機控制器進行通信。將UART0中的TXD0管腳,GND管腳分別與舵機控制器的RX管腳,GND管腳相連。S3C2440作為上位機,給32路伺服舵機控制器發送指令,設置波特率為115200,即可完成通信,指令說明如下:
#
串口通信可通過以下程序實現:

根據(4)中判斷結果調用相關指令,完成雙足機器人的行走。
(6)生成可執行文件。利用linux下的交叉編譯器arm-linux-gcc中的編譯指令arm–linux–g++,生成在目標板中的可執行文件,即可運行程序,完成雙足機器人的目標識別及朝向目標地雙足行走。
在機器人目標識別及跟蹤行走中,通過CMOS攝像頭抓拍下如圖7所示的畫面及圖8所示的判斷結果。此時,雙足機器人左轉彎,朝著目標直線前進,直到程序設定時間,然后再進行下次判斷。

圖7 抓拍圖

圖8 判斷結果
本雙足機器人研究,結合了圖像處理技術和機器人機構分析,基于嵌入式linux系統,使得雙足機器人具備了自動識別具有一定特征的目標的能力,利用32路舵機控制器,實現了機器人雙足行走的要求,其研究成果具有廣泛的教學應用前景。該研究的不足之處,在于為了得到更為準確的位置定位,采用了綜合多次判斷結果得出最后判斷結果的算法,使得判斷時間增加。該算法過于簡單,在以后的研究中,可以考慮換用不同的算法,或進一步改進hough變換的算法,以提高效率。
[1]張 勇,許東來.小型雙足步行機器人的步態規劃[J].計算機仿真,2010,27(11):148-151.
[2]劉海波,沈 晶,郭 聳.Visual C++數字圖像處理技術詳解[M].北京:機械工業出版社,2010.
[3]瞿 鈞,甘嵐.梯度Hough變換在圓檢測中的應用[J].華東交通大學學報,2007,24(1):101-104.
[4]周 奮,王 婷.嵌入式系統中串口通信幀的同步方法[J].單片機與嵌入式系統應用,2006,(10):73-75.
[5]馬文輝,李蘭友.Linux環境下的串口通信[J].儀器儀表用戶,2005,(1):39-42.