吳志鵬,廖志青,冼嘉媚,曾奕雄,何 威
(華南理工大學(xué)廣州學(xué)院,廣東 廣州 515000)
中國南方地區(qū)夏季多雨,特別是長江流域容易發(fā)生洪災(zāi);東南沿海地區(qū)還會受到臺風(fēng)的影響,容易引發(fā)洪水、泥石流等次生災(zāi)害;夏季城市容易發(fā)生內(nèi)澇。由于洪澇災(zāi)害的危害性很大,它不僅對經(jīng)濟造成嚴(yán)重的損失,而且還奪取了人類的生命。為了解決這個問題,設(shè)計了救援船體機器人,由第一代清潔船體機器人(圖1)迭代升級,將垃圾清潔裝置改為機械臂、拋射器和收繩器,由拋射器加機械臂的結(jié)構(gòu)精準(zhǔn)拋射出救生圈,對溺水人員實施救援。
本救援船體機器人中的控制系統(tǒng)有效地解決了救援船體的控制問題,致力于更好的后期算法開發(fā)。系統(tǒng)使用基于Linux操作系統(tǒng)上的ROS機器人操作系統(tǒng),下位機使用基于Cortex-M3內(nèi)核的32位高性能微控制器STM32F103ZET6為主控制芯片,為底層電機等運動原件提供控制[1]。救援船體機器人所要求的功能為救援動作的實施,如救生圈拋置、機器手拋擲、船體運動、圖像傳輸、路徑處理等功能,通過對各項功能進行分析得出將ROS機器人操作系統(tǒng)移植到救援船體機器人上的方案是可以實施的,并且將大大降低對執(zhí)行機構(gòu)信息處理的要求,轉(zhuǎn)為對微型電腦的要求。
對于救援船體機器人使用ROS機器人操作系統(tǒng),一是便于搭建框架整體,二是便于日后升級迭代產(chǎn)品[2],使救援船體機器人可以與時俱進,增添不同模塊,適用于不同水域不同情況。下面對設(shè)計過程進行闡述。
圖1 初代清潔船
為了救援船實現(xiàn)圖片傳輸、路徑規(guī)劃、船體控制和機械臂控制等功能,下位機芯片使用STM32F103ZET6控制芯片??刂品绞绞峭ㄟ^上位機PC端發(fā)出協(xié)議擬定的命令到下位機STM32串口,下位機STM32已經(jīng)寫好指定動作,如收到0x7F010X120103BCC的串口數(shù)據(jù)則螺旋槳正轉(zhuǎn)等,同過上位機發(fā)送不同的指令,實現(xiàn)對清潔船體控制。
圖2所示為STM32F103ZET6開發(fā)系統(tǒng)圖,該芯片具有64KB SRAM、512KB FLASH、2個基本定時器、4個通用定時器、2個高級定時器、2個DMA控制器(共 12個通道)、3個 SPI、2個 IIC、5個串口、1個USB、1個 CAN、3個 12位 ADC、1個 12位 DAC、1個SDIO接口、1個FSMC接口以及112個通用IO口[3]。
STM32特點:外設(shè)豐富,STM32擁有包括FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等眾多外設(shè)及功能,具有極高的集成度;優(yōu)異的實時性能,84個中斷,16級可編程優(yōu)先級,并且所有的引腳都可以作為中斷輸入;杰出的功耗控制。STM32各個外設(shè)都有自己的獨立時鐘開關(guān),可以通過關(guān)閉相應(yīng)外設(shè)的時鐘來降低功耗;支持SWD和JTAG兩種調(diào)試口。SWD調(diào)試可以為你的設(shè)計帶來跟多的方便,只需要2個IO口,即可實現(xiàn)仿真調(diào)試。該開發(fā)板的部分參數(shù)如下:
(1)板子外形 10 mm×8 mm;
(2)主芯片 STM32F103RCT6(64腳);
(3)電源RTC后備電池座;
(4)2個USB取電口;
(5)5 V電源接口;
(6)3.3 V電源接口;
外擴8MB SPI FLASH(W25Q65)和外擴EEPROM 24CO2 SPI;
主芯片 STM32F103RCT6(64腳);
芯片 FLASH:256K和芯片SRAM:48K.
圖2 STM32 F103開發(fā)系統(tǒng)圖
為了更好地闡述救援船硬件部分內(nèi)容,將救援船系統(tǒng)劃分為幾大系統(tǒng)。救援船體系統(tǒng)由上位機系統(tǒng)、下位機主控系統(tǒng)、機械臂控制器、船體運動控制器組成的控制系統(tǒng),系統(tǒng)總體框圖如圖3所示。在下位機各個系統(tǒng)配置了多種編碼器、傳感器,用于船體、機械臂等。并且設(shè)置遠(yuǎn)程遙控器和圖傳模塊,以便進行人機交互的功能。
圖3 硬件總框架
在對機器人的設(shè)計研究的過程中,主要是根據(jù)機器人所要實現(xiàn)的三個功能進行設(shè)計,分別是:拋射救生圈功能、回收救生圈、遠(yuǎn)程遙控功能。
在初代清潔船的基礎(chǔ)上將傳送帶等清潔功能移除,改為一個三軸機械臂,再在機械臂上安裝一個拋射器,拋射器安裝有一個氣壓發(fā)射裝置,通過觸動開關(guān),拋射一個帶有繩子的救生圈,通過機械臂關(guān)節(jié)的移動來改變拋射器的拋射角度,從而達到精準(zhǔn)救援,再在救援船底部安裝一個由直流無刷電機組成的收繩器,通過電機正轉(zhuǎn),達到收繩的功能。
船體左右對稱分布,船架則為支撐整個船體,船架通過六個定點連接兩側(cè)浮筒,限制多個自由度,防止上下左右出現(xiàn)松動情況,更加穩(wěn)固。對于受力負(fù)荷過強的部分船架(如:傳動機構(gòu)板塊、調(diào)節(jié)機構(gòu)板塊)采用三角形定理,增加支架,使得承受負(fù)載增大不易變形。船架材料采用硬鋁為主,合金鋼為輔(部分高強度部位),用以減輕整體船重,同時長時間在水中作業(yè)要避免被腐蝕。螺旋槳動力部分負(fù)責(zé)驅(qū)動機器人前進(如圖4),螺旋槳的轉(zhuǎn)向由另一個直流無刷電機負(fù)責(zé),動力部分安裝有伺服驅(qū)動、16位絕對式編碼器、霍爾傳感器來確保轉(zhuǎn)向準(zhǔn)確。
圖4 動力系統(tǒng)
在操作者控制下,操作者通過遠(yuǎn)程攝像頭了解方位與救援需求,通過遠(yuǎn)程遙控器發(fā)射指定信號到PC端,經(jīng)過ROS信號觸發(fā),發(fā)布消息到串口節(jié)點,再由串口節(jié)點發(fā)送指令到STM32控制板中,實現(xiàn)控制精準(zhǔn)拋投器拋射救生圈。通過攝像頭判斷出溺水人員已經(jīng)成功抓牢救生圈時,通過遠(yuǎn)程遙控器發(fā)送指令到PC端,再由PC端發(fā)布消息到串口節(jié)點,由串口節(jié)點發(fā)送電機回收指令,使收繩器啟動,回收救生圈。
當(dāng)PC機啟動時,預(yù)先寫好在Service文件中的launch文件會啟動,即ROS各個節(jié)點程序啟動,開始于下位機通訊,發(fā)送指令初始化下位機stm32,包括:時鐘、GPIO、串口、LCD、中斷及其分組、延時函數(shù)、定時器、字庫等的初始化。后等待遙控器的指令,啟動救援船體機器人。
通信部分主要由USART利用STM32內(nèi)部串口的資源來實現(xiàn)PC端ROS操作系統(tǒng)和下位機的數(shù)據(jù)傳遞指令的下達,搖桿遙控帶接收器采用433通訊傳輸方式發(fā)送數(shù)據(jù)到PC端ROS操作系統(tǒng)。在linux系統(tǒng)上使用ROS平臺進行上層與下層通訊,使用編程語言C++為基礎(chǔ),調(diào)用serial庫與下位機STM32進行串口通訊。定義發(fā)送至下位機的信息,即x、y軸的速度以及方向角,從ROS中的cmd_vel主題獲取發(fā)布速度以及方向角,并將方向角轉(zhuǎn)化為四元數(shù),將以上所有信息加上兩個停止位存儲至列表。初始化串口信息,設(shè)置端口號、波特率、通信字節(jié)位數(shù)等。首先測試是否能成功連接串口,若成功則將存儲速度以、方向四元數(shù)以及停止位的列表發(fā)送至下位機,如不成功則拋出響應(yīng)問題。接收下位機傳輸至上位機的信息,對其信息進行解析,可以初略得出救援船體機器人當(dāng)前所在位置,使用其他傳感器更加精確定位。
圖傳模塊功能,通過5.8 G,200 mW圖傳發(fā)射器,發(fā)送攝像頭接收到的圖片數(shù)據(jù),該發(fā)射器有40個頻點,頻率范圍在5.645 GHz~5.945 GHz,電壓輸入范圍7~24 V.圖傳接收器4.3寸接收顯示一體機,內(nèi)置靈敏度5.8 G接收器,接收頻率范圍為5.645 GHz~5.945 GHz,32頻點與5.8 G圖傳發(fā)射器匹配,要求攝像頭的圖像制式為NTSC內(nèi)置天線電池。
船體控制功能,下位機已經(jīng)封裝好各個不同執(zhí)行機構(gòu)的動作,如螺旋槳正轉(zhuǎn)反轉(zhuǎn)、機械臂旋轉(zhuǎn)、拋射器發(fā)射等,通過遙控器和圖傳模塊進行遠(yuǎn)程人機交互操控,操控手柄選擇螺旋槳旋轉(zhuǎn)等不同動作,操控手柄發(fā)送信號到PC端ROS機器人操控系統(tǒng)通過USART通訊將人機交互結(jié)果發(fā)送至下位機STM32實現(xiàn)船體的位移。
STM32接收程序部分如下:
void USART1_IRQHandler(void)//′串口1中斷程序
{
u8 Res;
if(USART_GetITStatus(USART1 , USART_IT_RXNE)!=RESET) //接收中斷
{
Res=USART_ReceiveData(USART1); //讀取
if(Res==1)
{
ZX0=0;
ZX1=1;
}
else if(Res==2)
{
ZX0=1;
ZX1=0;
}
else if(Res==3)
{
}
else if(Res==4)
{
POWER=0;
OUT0=1;
YEL=0;
BLU=0;
OUT1=0;
YEL_K=1;
BLU_K=1;
OUT1_K=1;
POWER=1;
}
路徑規(guī)劃功能,因為救援船體上安裝要激光雷達等多個傳感器,可以檢測出湖面礁石、障礙物等,通過傳感器下位機stm32串口返回的數(shù)據(jù),救援船體機器人傳感器模塊ROS節(jié)點,使用GPS、imu以及下位機傳輸上來的里程計能進行更加精確的位置定位,使用激光雷達可以進行躲避障礙物的功能。安裝GPS,imu相對應(yīng)的驅(qū)動,使用C++編寫ROS節(jié)點,發(fā)布節(jié)點消息,使用ekf算法對GPS、imu以及里程計發(fā)布的消息進行融合得到更加精確的位置定位。激光雷達進行避障,在確定目標(biāo)位置時使用global_costmap對總路徑進行規(guī)劃,并不斷更行,local_costmap本地路徑規(guī)劃,在救援船體機器人運行時出現(xiàn)障礙物的時候能及時規(guī)劃躲避路徑,完成躲避障礙物的功能。使用攝像頭進行圖像傳輸,安裝響應(yīng)節(jié)點,打開攝像頭,并且使用SSH遠(yuǎn)程連接,則可以進行遠(yuǎn)程圖像傳輸??梢詫崟r的對水面以及救援船體機器人進行實況轉(zhuǎn)播,能及時了解船體以及水面當(dāng)前情況。通過ROS節(jié)點處理,可以輕松避開障礙物等阻礙船體運行的物體,實現(xiàn)路徑規(guī)劃的功能。主要通過激光雷達實現(xiàn)即時的規(guī)劃躲避障礙物,防止救援船體與障礙物相撞,損壞船體。ROS有自帶navigation導(dǎo)航包,通過調(diào)用導(dǎo)航包,可以檢測出船體附件環(huán)境等,通過節(jié)點反饋,避開路障實現(xiàn)路徑規(guī)劃的功能如圖5所示。
圖5 避障測試
救援船體機器人平臺將運行ROS的PC作服務(wù)器端,主要負(fù)責(zé)復(fù)雜的計算和路徑規(guī)劃等復(fù)雜程度不一的任務(wù)。救援船體機器人由二級功能節(jié)點和任務(wù)控制等模塊組成,這樣系統(tǒng)可以在智能化和可靠性上都能滿足救援船體機器人的需求。ROS機器人操作系統(tǒng)平臺可用于開發(fā)一系列機器人系統(tǒng),也可用于開發(fā)多機器人系統(tǒng)和非工業(yè)機器人系統(tǒng),如足球機器人系統(tǒng)、服務(wù)類機器人系統(tǒng)、無人機系統(tǒng)等。
救援船體機器人用STM32下位機和機器人開源操作系統(tǒng)ROS設(shè)計了一個救援船體機器人系統(tǒng)。該系統(tǒng)首先由機器人平臺主控制器對多種傳感器進行信息采集和整合,通過STM32各傳感器采集數(shù)據(jù)向上位機發(fā)送當(dāng)前數(shù)據(jù)然后利用串口通信傳輸,并能遠(yuǎn)程控制救援船體機器人進行精確移動,最后對救援船體機器人進行了系統(tǒng)調(diào)試和測試,通過對救援船體機器人進行參數(shù)校核和完善程序等過程,使機器人系統(tǒng)達到了預(yù)期的設(shè)計要求。