許志強(qiáng) 翟漪璇 韓金鑫 顏義鵬 成怡
【摘 要】本文基于Kinect深度攝像頭,結(jié)合2D SLAM算法設(shè)計(jì)出了一套精確的輪式移動機(jī)器人導(dǎo)航系統(tǒng)。該系統(tǒng)主要包括底盤驅(qū)動、數(shù)據(jù)采集、PC三大部分。通過機(jī)器人自身攜帶的Kinect深度攝像頭對室內(nèi)環(huán)境掃描,利用Gmapping算法構(gòu)建出環(huán)境地圖,在已構(gòu)建出的柵格地圖基礎(chǔ)上,結(jié)合A*算法和動態(tài)窗口法,實(shí)現(xiàn)機(jī)器人的自主定位與導(dǎo)航。
【關(guān)鍵詞】移動機(jī)器人;嵌入式控制;A*算法;自主導(dǎo)航
中圖分類號: TP242 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2018)16-0200-002
DOI:10.19694/j.cnki.issn2095-2457.2018.16.092
【Abstract】Based on Kinect depth camera and 2D SLAM algorithm,an accurate wheeled mobile robot navigation system is designed.The system mainly includes three parts:chassis drive,data acquisition and PC.Through the Kinect depth camera carried by the robot to scan the indoor environment,the environment map is constructed by Gmapping algorithm.On the basis of the constructed grid map,the autonomous positioning and navigation of the robot are realized with the combination of A* algorithm and dynamic window method.
【Key words】Mobile robot;Embedded control;A*algorithm;Autonomous navigation
0 引言
目前,國內(nèi)外多集中在利用激光傳感器和里程計(jì)等載體實(shí)現(xiàn)在未知環(huán)境中移動機(jī)器人的自主導(dǎo)航,而隨著機(jī)器視覺技術(shù)的快速發(fā)展,利用機(jī)器視覺傳感器實(shí)現(xiàn)載體重建環(huán)境地圖成為可能。由于智能載體的導(dǎo)航技術(shù)受到特殊任務(wù)的限制,GPS等有源導(dǎo)航方式已經(jīng)不能滿足當(dāng)前的自主導(dǎo)航任務(wù)。而基于SLAM算法的導(dǎo)航是根據(jù)載體及環(huán)境特征的相對位置實(shí)現(xiàn)推位的一種導(dǎo)航方式,是無源導(dǎo)航,對外不接收和發(fā)送信號,能夠保證完成任務(wù)的隱避性。因此,本文就室內(nèi)環(huán)境下移動機(jī)器人的自主導(dǎo)航問題進(jìn)行研究,從而設(shè)計(jì)出了一套完善的移動機(jī)器人自主導(dǎo)航系統(tǒng)。
1 系統(tǒng)組成
本文設(shè)計(jì)的自主導(dǎo)航系統(tǒng)主要由底盤驅(qū)動,Kinect深度攝像頭,PC三大部分組成。機(jī)器人底盤安裝兩個DC12V并且?guī)в谢魻柧幋a器的直流電機(jī),底盤上的Arduino控制板利用采集到的直流電機(jī)上的霍爾編碼器信號,計(jì)算出機(jī)器人底盤里程計(jì)信息。Kinect深度攝像頭采集障礙物到攝像頭的距離數(shù)據(jù)。PC利用得到的距離數(shù)據(jù),通過Gmapping算法,計(jì)算得到室內(nèi)環(huán)境的柵格地圖。系統(tǒng)組成框圖如圖1所示,搭建機(jī)器人平臺如圖2所示。
下位機(jī)硬件主要由兩部分組成:機(jī)器人底盤和Kinect深度攝像頭。機(jī)器人底盤基于差速驅(qū)動控制,由兩個12v DC電機(jī)、控制板Arduino UNO、電機(jī)驅(qū)動板L298P。上位機(jī)是個人電腦。上下位機(jī)通過串口進(jìn)行通訊,將上位機(jī)計(jì)算所得脈沖數(shù)據(jù)傳遞給下位機(jī),將下位機(jī)編碼器測的里程計(jì)數(shù)據(jù)發(fā)送給上位機(jī),實(shí)現(xiàn)數(shù)據(jù)間的交互,從而達(dá)到控制機(jī)器人導(dǎo)航避障的目的。
控制板Arduino UNO搭載高性能的8位AVR ATmega 328p處理器,該處理器外設(shè)特點(diǎn):6個通道的PWM、可編程串行USART、8個10位ADC、兩個具有獨(dú)立預(yù)分頻器和比較器的8位定時器/計(jì)數(shù)器,I2C通信、具有獨(dú)立片內(nèi)振蕩器的可編程看門狗定時器等。完全能夠滿足小型機(jī)器人特點(diǎn)的要求。Arduino UNO控制板采集底盤兩路電機(jī)的里程數(shù)據(jù),控制電路通過PWM信號輸出來控制直流電機(jī)轉(zhuǎn)速。L298P用于直流電機(jī)的驅(qū)動。
Kinect深度攝像頭是微軟研制開發(fā),應(yīng)用于體感游戲的一個配件。它具有動作捕捉、語音識別、影像識別、采集場景紋理和深度圖像等功能,是一種可以獲取場景深度的設(shè)備。本設(shè)計(jì)中主要利用Kinect采集深度信息的功能,實(shí)時獲取環(huán)境信息并加以利用。Kinect采集的深度信息精度是毫米級別,能夠滿足柵格地圖的精度要求。
2 軟件部分設(shè)計(jì)
本文設(shè)計(jì)的移動機(jī)器人導(dǎo)航系統(tǒng)是基于ROS 平臺,在利用Kinect提取出點(diǎn)云數(shù)據(jù),依據(jù)Gmapping算法構(gòu)建出環(huán)境地圖,然后在已構(gòu)建環(huán)境地圖的基礎(chǔ)上,通過A*算法實(shí)現(xiàn)機(jī)器人的自主定位和導(dǎo)航。
Gmapping是一種高效的Rao-Blackwellized粒子濾波器,用于根據(jù)激光距離數(shù)據(jù)得出柵格地圖,是一個比較完善的地圖構(gòu)建開源包,使用激光和里程計(jì)的數(shù)據(jù)來生成二維地圖。在采樣的過程中將機(jī)器人最新的觀測信息作為參考,使用更加接近目標(biāo)后驗(yàn)概率分布的提議,降低了機(jī)器人位姿估計(jì)的誤差,在粒子更新過程中,以當(dāng)前有效粒子數(shù)量和粒子的多樣性為條件進(jìn)行重采樣操作,提高了地圖創(chuàng)建的精確性和穩(wěn)定性。
A*算法是一種具有啟發(fā)式特征的全局路徑規(guī)劃算法,該算法具有較強(qiáng)的靈活性,能夠適應(yīng)于不同的規(guī)劃場景。A*算法主要特點(diǎn)是同時考慮當(dāng)前節(jié)點(diǎn)與初始節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)的接近程度,采用啟發(fā)式評價函數(shù)(1)計(jì)算該節(jié)點(diǎn)的距離代價。
f(n)=g(n)+h(n)(1)
其中,f(n)表示當(dāng)前節(jié)點(diǎn)與初始節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)之間的代價評估函數(shù);g(n)表示在環(huán)境狀態(tài)空間中,當(dāng)前節(jié)點(diǎn)與初始點(diǎn)之間的真實(shí)代價;h(n)表示從當(dāng)前節(jié)點(diǎn)n移動到目標(biāo)點(diǎn)路徑的代價估計(jì)值。移動機(jī)器人的A*算法實(shí)現(xiàn)流程如下:
1)根據(jù)地圖信息新建OPEN表和CLOSE表,將初始節(jié)點(diǎn)S添加至OPEN表,地圖中障礙節(jié)點(diǎn)添加入CLOSE表中;
2)判斷OPEN表是否為空表,若否,將OPEN表中第一個節(jié)點(diǎn)n移至CLOSE表;若是空表,則返回(1);
3)判斷節(jié)點(diǎn)n是否為目標(biāo)節(jié)點(diǎn),若n是目標(biāo)節(jié)點(diǎn),則生成最優(yōu)路徑;若n不是目標(biāo)節(jié)點(diǎn),則計(jì)算n的所有后繼節(jié)點(diǎn)的f值,并進(jìn)行節(jié)點(diǎn)擴(kuò)展;具體過程為若該后繼節(jié)點(diǎn)不在OPEN和CLOSE表中,則加入OPEN表并標(biāo)記該節(jié)點(diǎn)到節(jié)點(diǎn)n的指針;若該后繼節(jié)點(diǎn)在OPEN表中,且新f值小于原f值,則更新其f值并修改該節(jié)點(diǎn)的指針指向節(jié)點(diǎn)n;若該后繼節(jié)點(diǎn)在CLOSE表中,且新f值小于原f值,則將其從CLOSE表移回OPEN表,更新其f值并修改該節(jié)點(diǎn)的指針指向節(jié)點(diǎn)n。
4)按f值升序重排OPEN表,并返回(2)。
4 實(shí)驗(yàn)結(jié)果及分析
將搭建好的移動機(jī)器人平臺放置室內(nèi)環(huán)境任意一點(diǎn),并把該點(diǎn)作為構(gòu)建室內(nèi)地圖的起始點(diǎn),在移動機(jī)器人運(yùn)動停止后運(yùn)行保存地圖節(jié)點(diǎn),把構(gòu)建好的室內(nèi)環(huán)境柵格地圖保存為圖3所示的圖片。從圖3可以看出,構(gòu)建好的柵格地圖完整的顯示了室內(nèi)環(huán)境輪廓。該地圖是一張位圖,主要是用來表示柵格被占據(jù)的狀況,其中白色像素點(diǎn)代表未被占據(jù)的網(wǎng)格即可行區(qū)域。黑色像素點(diǎn)代表障礙物,灰色像素點(diǎn)代表的是“未知”區(qū)域。
將移動機(jī)器人放置在圖4所示的起點(diǎn)位置,其中黃色箭頭表示移動機(jī)器人的位姿狀態(tài),在RVIZ可視化界面上設(shè)置好終點(diǎn)位置,移動機(jī)器人就會按照A*算法和動態(tài)窗口法在避開障礙物的同時規(guī)劃出可行路徑即圖中黃線所示,實(shí)現(xiàn)從起點(diǎn)到終點(diǎn)的自主定位與導(dǎo)航。
5 結(jié)束語
對設(shè)計(jì)的基于Kinect移動機(jī)器人導(dǎo)航系統(tǒng)架構(gòu)進(jìn)行現(xiàn)實(shí)場景的實(shí)驗(yàn),結(jié)果表明本文設(shè)計(jì)的導(dǎo)航系統(tǒng)能夠精確地實(shí)現(xiàn)移動機(jī)器人的自主定位與導(dǎo)航,在規(guī)劃可行路徑時采用動態(tài)窗口法實(shí)時監(jiān)控,解決了導(dǎo)航的精度和穩(wěn)定性問題,能夠滿足移動機(jī)器人在復(fù)雜環(huán)境下的自主導(dǎo)航。
【參考文獻(xiàn)】
[1]卞云松.基于Arduino 單片機(jī)的避障小車機(jī)器人[J].自動化技術(shù)與應(yīng)用,2014,33(1).
[2]紀(jì)欣然.基于Arduino開發(fā)環(huán)境的智能尋光小車設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012,35(15).
[3]鄭瀟峰.基于ROS的移動機(jī)器人室內(nèi)激光導(dǎo)航研究[D].重慶郵電大學(xué),2017.
[4]鄒謙.基于圖優(yōu)化SLAM的移動機(jī)器人導(dǎo)航方法研究[D].哈爾濱工業(yè)大學(xué),2017.
[5]劉曉帆,趙彬.基于ROS的移動機(jī)器人平臺系統(tǒng)設(shè)計(jì)[J].《微型機(jī)與應(yīng)用》,2017,36(11).
[6]Madjid Hank,Moussa Haddad.A hybrid approach for autonomous navigation of mobile robots in partially-known environments[J]. Robotics and Autonomous Systems,2016,86.
[7]Shaowu Yang,Sebastian A.Scherer,Xiaodong Yi,Andreas Zell. Multi-camera visual SLAM for autonomous navigation of micro aerial vehicles[J].Robotics and Autonomous Systems,2017,93.