李艦飛,孫合力,呂澤龍
(北京信息科技大學(xué) 信息與通信工程學(xué)院,北京 100101)
隨著機(jī)器人技術(shù)的發(fā)展,機(jī)器人操作系統(tǒng)(Robot Operating System2,ROS2)為機(jī)器人研究和開發(fā)提供了重要支持。
安全無人車的研究,對國防建設(shè)產(chǎn)生了積極影響?,F(xiàn)代戰(zhàn)爭趨向信息化、無人化,機(jī)器代替人類執(zhí)行任務(wù)不僅成本較低,而且沒有生命安全風(fēng)險。本研究利用ROS2為基礎(chǔ),結(jié)合樹莓派4B、深度相機(jī)、OpenCV技術(shù)以及各種傳感器,構(gòu)建了一款能夠自主導(dǎo)航的小車,實現(xiàn)在大型無人倉庫自主巡邏,在發(fā)現(xiàn)可疑人員時發(fā)出警報,降低攝像頭和人工成本。
ROS的主要目標(biāo)是為機(jī)器人研究和開發(fā)提供代碼復(fù)用的支持[1]。該系統(tǒng)可以實現(xiàn)工程的協(xié)同作業(yè),使一個工程的開發(fā)和實現(xiàn)從文件系統(tǒng)到用戶接口完全獨立決策(不受ROS限制)。
與ROS1相比,ROS2使用更先進(jìn)的分布式架構(gòu),擁有更高的可靠性,對實時性與嵌入式設(shè)備也提供支持。
2.1.1 激光雷達(dá)
激光雷達(dá)在環(huán)境感知中起著關(guān)鍵作用。其工作原理基于測距原理,通過測量激光束從雷達(dá)發(fā)射到障礙物上并返回的時間,計算出障礙物的距離。通常激光雷達(dá)會在水平方向上進(jìn)行掃描,產(chǎn)生一系列距離測量點。這些點表示為:
Pi=(ri,θi)
(1)
式(1)中,ri是障礙物到激光雷達(dá)的距離,θi是激光束相對于雷達(dá)的方位角。采集多個激光束的測量點后,可以構(gòu)建出環(huán)境的二維地圖。
2.1.2 Cartographer算法
Cartographer采用基于Google自家開發(fā)的Ceres非線性優(yōu)化的方法[2],其亮點在于代碼規(guī)范與工程化,非常適合于商業(yè)應(yīng)用和再開發(fā)。
路徑規(guī)劃算法通過分析地圖信息,為無人車提供到達(dá)目標(biāo)點的最優(yōu)路徑。A*算法是常用的路徑規(guī)劃算法之一,其核心思想是通過估計從起點到目標(biāo)點的代價來選擇最優(yōu)路徑。A*算法使用以下公式計算代價:
f(n)=g(n)+h(n)
(2)
式(2)中,f(n)是從起點到目標(biāo)點的估計代價,g(n)是從起點到當(dāng)前節(jié)點的實際代價,h(n)是當(dāng)前節(jié)點到目標(biāo)點的估計代價。通過不斷擴(kuò)展節(jié)點并選擇代價最小的路徑,A*算法可以找到最優(yōu)路徑[3]。
在控制方面,PID控制器常用于調(diào)節(jié)無人車的速度和方向。其控制輸出根據(jù)當(dāng)前誤差、積分項和導(dǎo)數(shù)項計算:
(3)
式(3)中,e(t)為誤差,Kp、Ki和Kd分別為比例、積分和導(dǎo)數(shù)增益。
為了實現(xiàn)自主導(dǎo)航能力,本作品設(shè)計了一個基于ROS2的導(dǎo)航系統(tǒng)框架,并在其中集成了關(guān)鍵的導(dǎo)航系統(tǒng)功能模塊。
2.3.1 導(dǎo)航系統(tǒng)框架
傳感器模塊給其他模塊提供信息支持;導(dǎo)航規(guī)劃模塊根據(jù)建圖模塊提供的地圖進(jìn)行導(dǎo)航,配合視覺模塊提供信息給路徑跟蹤與控制模塊控制小車運動[4]。
2.3.2 導(dǎo)航系統(tǒng)功能模塊的設(shè)計
(1)傳感器模塊:包括激光雷達(dá)和深度相機(jī),用于獲取環(huán)境信息并進(jìn)行感知。
(2)建圖模塊:通過激光雷達(dá)數(shù)據(jù)進(jìn)行SLAM算法,生成環(huán)境的地圖。筆者利用激光雷達(dá)數(shù)據(jù)進(jìn)行建圖。在建圖過程中,采用了Cartographer算法,將激光雷達(dá)數(shù)據(jù)融合,實時生成環(huán)境地圖[5]。
(3)導(dǎo)航規(guī)劃模塊:在已知地圖基礎(chǔ)上,導(dǎo)航規(guī)劃模塊根據(jù)小車當(dāng)前位置和目標(biāo)位置計算出合適路徑。從建圖模塊獲取已知環(huán)境地圖,基于小車當(dāng)前位置和目標(biāo)位置,在地圖上計算出一條安全、高效的路徑,確保小車在遇到障礙物時能夠靈活調(diào)整路徑。
(4)路徑跟蹤與控制模塊:將小車當(dāng)前位置與路徑進(jìn)行對比,計算出前進(jìn)方向和速度,根據(jù)路徑跟蹤結(jié)果,生成用于控制小車的速度和轉(zhuǎn)向角度的控制指令,將其傳遞給小車底層控制系統(tǒng),實現(xiàn)精確的路徑跟蹤和運動控制。
(5)視覺識別模塊:該模塊集成了視覺識別功能,使用相機(jī)獲取實時圖像數(shù)據(jù),進(jìn)行行人檢測和環(huán)境感知。從深度相機(jī)獲取實時圖像數(shù)據(jù),使用Haar級聯(lián)分類器對圖像中的行人進(jìn)行檢測,確定其位置,再以坐標(biāo)形式傳遞給導(dǎo)航系統(tǒng),為小車的路徑規(guī)劃和避障提供數(shù)據(jù)支持。
ROS2與OpenCV的結(jié)合為機(jī)器人視覺識別提供了強(qiáng)大的工具。通過將OpenCV與ROS2集成,可以在ROS2的通信框架中傳遞和處理圖像數(shù)據(jù),從而實現(xiàn)更復(fù)雜的視覺功能。
自主導(dǎo)航的第一步是加載已建立的地圖并規(guī)劃路徑。從建圖模塊獲取已知的環(huán)境地圖,此地圖包含了環(huán)境的障礙物和空間信息。通過圖形用戶界面或ROS2命令,利用Navigation2的路徑規(guī)劃功能,在地圖上規(guī)劃出一條基于起點和目標(biāo)點的避開障礙物路徑。
路徑規(guī)劃完成后,導(dǎo)航系統(tǒng)將執(zhí)行計劃好的路徑并控制小車到達(dá)目標(biāo)。在終端啟動Navigation2的導(dǎo)航節(jié)點,導(dǎo)航系統(tǒng)會根據(jù)傳感器數(shù)據(jù)進(jìn)行位置調(diào)整,以保證導(dǎo)航的準(zhǔn)確性,并實時計算小車當(dāng)前位置與規(guī)劃路徑之間的誤差,調(diào)整車輛的轉(zhuǎn)向和速度;通過實時路徑跟蹤和控制,小車最終到達(dá)預(yù)設(shè)的目標(biāo)點。
小車設(shè)計采用了基于Haar級聯(lián)分類器的行人檢測算法。筆者使用了OpenCV提供的CascadeClassifier類加載了預(yù)先訓(xùn)練好的haarcascade_fullbody.xml分類器。主要的算法流程如圖1所示。
圖1 算法流程
為了實現(xiàn)行人檢測,筆者創(chuàng)建了一個ROS2節(jié)點,可通過訂閱圖像消息,并將ROS2圖像消息轉(zhuǎn)換為OpenCV圖像。通過圖像處理函數(shù),可實現(xiàn)行人檢測和結(jié)果可視化。
3.3.1 圖像消息訂閱
此功能支持使用ROS2提供的節(jié)點類創(chuàng)建一個訂閱者節(jié)點,用于接收來自相機(jī)的圖像消息。
3.3.2 圖像處理
可通過CvBridge類,將ROS2圖像消息轉(zhuǎn)換為OpenCV圖像,以便于后續(xù)的圖像處理。
3.3.3 行人檢測
在passerby_detect函數(shù)中,可對圖像進(jìn)行預(yù)處理,如圖像縮放和灰度化。操作人員可使用Haar級聯(lián)分類器進(jìn)行行人檢測,發(fā)布檢測結(jié)果消息。
3.3.4 可視化結(jié)果
操作人員通過繪制矩形框和顯示處理后的圖像,將檢測到的行人顯示在RViz2,為運行狀態(tài)和決策提供消息。
3.3.5 發(fā)布警告話題
創(chuàng)建發(fā)布話題節(jié)點,發(fā)布話題給蜂鳴器,進(jìn)行警告提示。
雷達(dá)啟動之后,啟動提前配置的Cartographer算法。同時,利用鍵盤控制小車移動(穩(wěn)定性相較于手柄等高),打開RViz2軟件,添加map話題接收以及tf坐標(biāo)變換。
操作人員利用鍵盤控制小車移動,建立完整的地圖并保存,以便導(dǎo)航時加載。
首先,開啟RViz2軟件。在小車終端開啟Navigation2導(dǎo)航節(jié)點之后,在RViz2中觀察到柵格地圖,根據(jù)小車在地圖中的實際位置設(shè)置起點。這一步需要不斷調(diào)整小車,使激光雷達(dá)的光點與地圖邊緣重合。最后,在RViz2中調(diào)整導(dǎo)航目標(biāo),使小車完成從A點到B點的運動。
圖2為移動檢測試驗。該功能能高精度識別行人運動??梢詰?yīng)用于識別空曠空間內(nèi)沒有人和出現(xiàn)人時的情況。
圖2 行人檢測效果
由于小車行駛速度較快,相機(jī)捕捉到的圖像存在模糊現(xiàn)象,筆者對小車速度調(diào)整,使相機(jī)可以穩(wěn)定捕捉到清晰的圖像。
通過多次測試,行人識別代碼精準(zhǔn)度達(dá)到70%以上,基本做到了識別行人。應(yīng)用于倉庫等警衛(wèi)點巡邏時可以提升安全系數(shù),降低人工成本。
本研究基于ROS2操作系統(tǒng),搭載多種傳感器,實現(xiàn)了基于激光雷達(dá)的2D地圖構(gòu)建、Navigation導(dǎo)航、視覺識別等功能。無人導(dǎo)航小車在安全領(lǐng)域展現(xiàn)出巨大的潛力,不僅可以應(yīng)用在生產(chǎn)生活中,也可以應(yīng)用于軍事等領(lǐng)域。