李艦飛,孫合力,呂澤龍
(北京信息科技大學 信息與通信工程學院,北京 100101)
隨著機器人技術的發展,機器人操作系統(Robot Operating System2,ROS2)為機器人研究和開發提供了重要支持。
安全無人車的研究,對國防建設產生了積極影響。現代戰爭趨向信息化、無人化,機器代替人類執行任務不僅成本較低,而且沒有生命安全風險。本研究利用ROS2為基礎,結合樹莓派4B、深度相機、OpenCV技術以及各種傳感器,構建了一款能夠自主導航的小車,實現在大型無人倉庫自主巡邏,在發現可疑人員時發出警報,降低攝像頭和人工成本。
ROS的主要目標是為機器人研究和開發提供代碼復用的支持[1]。該系統可以實現工程的協同作業,使一個工程的開發和實現從文件系統到用戶接口完全獨立決策(不受ROS限制)。
與ROS1相比,ROS2使用更先進的分布式架構,擁有更高的可靠性,對實時性與嵌入式設備也提供支持。
2.1.1 激光雷達
激光雷達在環境感知中起著關鍵作用。其工作原理基于測距原理,通過測量激光束從雷達發射到障礙物上并返回的時間,計算出障礙物的距離。通常激光雷達會在水平方向上進行掃描,產生一系列距離測量點。這些點表示為:
Pi=(ri,θi)
(1)
式(1)中,ri是障礙物到激光雷達的距離,θi是激光束相對于雷達的方位角。采集多個激光束的測量點后,可以構建出環境的二維地圖。
2.1.2 Cartographer算法
Cartographer采用基于Google自家開發的Ceres非線性優化的方法[2],其亮點在于代碼規范與工程化,非常適合于商業應用和再開發。
路徑規劃算法通過分析地圖信息,為無人車提供到達目標點的最優路徑。A*算法是常用的路徑規劃算法之一,其核心思想是通過估計從起點到目標點的代價來選擇最優路徑。A*算法使用以下公式計算代價:
f(n)=g(n)+h(n)
(2)
式(2)中,f(n)是從起點到目標點的估計代價,g(n)是從起點到當前節點的實際代價,h(n)是當前節點到目標點的估計代價。通過不斷擴展節點并選擇代價最小的路徑,A*算法可以找到最優路徑[3]。
在控制方面,PID控制器常用于調節無人車的速度和方向。其控制輸出根據當前誤差、積分項和導數項計算:
(3)
式(3)中,e(t)為誤差,Kp、Ki和Kd分別為比例、積分和導數增益。
為了實現自主導航能力,本作品設計了一個基于ROS2的導航系統框架,并在其中集成了關鍵的導航系統功能模塊。
2.3.1 導航系統框架
傳感器模塊給其他模塊提供信息支持;導航規劃模塊根據建圖模塊提供的地圖進行導航,配合視覺模塊提供信息給路徑跟蹤與控制模塊控制小車運動[4]。
2.3.2 導航系統功能模塊的設計
(1)傳感器模塊:包括激光雷達和深度相機,用于獲取環境信息并進行感知。
(2)建圖模塊:通過激光雷達數據進行SLAM算法,生成環境的地圖。筆者利用激光雷達數據進行建圖。在建圖過程中,采用了Cartographer算法,將激光雷達數據融合,實時生成環境地圖[5]。
(3)導航規劃模塊:在已知地圖基礎上,導航規劃模塊根據小車當前位置和目標位置計算出合適路徑。從建圖模塊獲取已知環境地圖,基于小車當前位置和目標位置,在地圖上計算出一條安全、高效的路徑,確保小車在遇到障礙物時能夠靈活調整路徑。
(4)路徑跟蹤與控制模塊:將小車當前位置與路徑進行對比,計算出前進方向和速度,根據路徑跟蹤結果,生成用于控制小車的速度和轉向角度的控制指令,將其傳遞給小車底層控制系統,實現精確的路徑跟蹤和運動控制。
(5)視覺識別模塊:該模塊集成了視覺識別功能,使用相機獲取實時圖像數據,進行行人檢測和環境感知。從深度相機獲取實時圖像數據,使用Haar級聯分類器對圖像中的行人進行檢測,確定其位置,再以坐標形式傳遞給導航系統,為小車的路徑規劃和避障提供數據支持。
ROS2與OpenCV的結合為機器人視覺識別提供了強大的工具。通過將OpenCV與ROS2集成,可以在ROS2的通信框架中傳遞和處理圖像數據,從而實現更復雜的視覺功能。
自主導航的第一步是加載已建立的地圖并規劃路徑。從建圖模塊獲取已知的環境地圖,此地圖包含了環境的障礙物和空間信息。通過圖形用戶界面或ROS2命令,利用Navigation2的路徑規劃功能,在地圖上規劃出一條基于起點和目標點的避開障礙物路徑。
路徑規劃完成后,導航系統將執行計劃好的路徑并控制小車到達目標。在終端啟動Navigation2的導航節點,導航系統會根據傳感器數據進行位置調整,以保證導航的準確性,并實時計算小車當前位置與規劃路徑之間的誤差,調整車輛的轉向和速度;通過實時路徑跟蹤和控制,小車最終到達預設的目標點。
小車設計采用了基于Haar級聯分類器的行人檢測算法。筆者使用了OpenCV提供的CascadeClassifier類加載了預先訓練好的haarcascade_fullbody.xml分類器。主要的算法流程如圖1所示。

圖1 算法流程
為了實現行人檢測,筆者創建了一個ROS2節點,可通過訂閱圖像消息,并將ROS2圖像消息轉換為OpenCV圖像。通過圖像處理函數,可實現行人檢測和結果可視化。
3.3.1 圖像消息訂閱
此功能支持使用ROS2提供的節點類創建一個訂閱者節點,用于接收來自相機的圖像消息。
3.3.2 圖像處理
可通過CvBridge類,將ROS2圖像消息轉換為OpenCV圖像,以便于后續的圖像處理。
3.3.3 行人檢測
在passerby_detect函數中,可對圖像進行預處理,如圖像縮放和灰度化。操作人員可使用Haar級聯分類器進行行人檢測,發布檢測結果消息。
3.3.4 可視化結果
操作人員通過繪制矩形框和顯示處理后的圖像,將檢測到的行人顯示在RViz2,為運行狀態和決策提供消息。
3.3.5 發布警告話題
創建發布話題節點,發布話題給蜂鳴器,進行警告提示。
雷達啟動之后,啟動提前配置的Cartographer算法。同時,利用鍵盤控制小車移動(穩定性相較于手柄等高),打開RViz2軟件,添加map話題接收以及tf坐標變換。
操作人員利用鍵盤控制小車移動,建立完整的地圖并保存,以便導航時加載。
首先,開啟RViz2軟件。在小車終端開啟Navigation2導航節點之后,在RViz2中觀察到柵格地圖,根據小車在地圖中的實際位置設置起點。這一步需要不斷調整小車,使激光雷達的光點與地圖邊緣重合。最后,在RViz2中調整導航目標,使小車完成從A點到B點的運動。
圖2為移動檢測試驗。該功能能高精度識別行人運動。可以應用于識別空曠空間內沒有人和出現人時的情況。

圖2 行人檢測效果
由于小車行駛速度較快,相機捕捉到的圖像存在模糊現象,筆者對小車速度調整,使相機可以穩定捕捉到清晰的圖像。
通過多次測試,行人識別代碼精準度達到70%以上,基本做到了識別行人。應用于倉庫等警衛點巡邏時可以提升安全系數,降低人工成本。
本研究基于ROS2操作系統,搭載多種傳感器,實現了基于激光雷達的2D地圖構建、Navigation導航、視覺識別等功能。無人導航小車在安全領域展現出巨大的潛力,不僅可以應用在生產生活中,也可以應用于軍事等領域。