黃通交, 侯英岢, 倪益華, 呂艷, 張光耀
(浙江農林大學 工程學院,杭州311300)
SLAM(Simultaneous localization and mapping)同時定位與地圖構建是指攜帶傳感器的機器人在移動的過程中,實時估計自身在環境中的位置的同時構建描述周圍環境的地圖模型[1-2]。SLAM需要同時解決自身定位和構建環境地圖兩個問題,是實現移動機器人自主導航的關鍵,這對機器人的運動控制、路徑規劃、任務實施具有重要的意義[3]。
本文在研究SLAM算法的基礎上,使用小型工控機作為上位機,STM32單片機作為下位機,基于RPLIADR A2激光雷達,在Linux系統下使用ROS機器人系統進行開發,設計并實現了室內移動機器人的同步定位與建圖功能。
室內移動機器人的主體材料采用亞克力材質,主要由上位機和下位機兩部分組成,系統總體結構如圖1所示。使用小型工控機作為機器人系統的上位機,在其上運行Linux系統及ROS次級機器人操作系統;下位機用STM32作為主控芯片,輸出PWM波形對直流電動機進行運動控制,通過IIC與imu通信獲取加速度信息。移動機器人在頂層安裝上海思嵐(SLAMTEC)公司生產的RPLIADR A2激光雷達,通過串口將數據發送到上位機,由工控機處理數據并通過SLAM算法構建地圖,通過WIFI將地圖和機器人位置信息發送給遠端的個人PC以實現實時顯示及遠程控制功能[4-5]。

圖1 系統總體結構
由于普通筆記本和工業計算機的體積和質量都比較大,不適合在小型移動機器人上使用,因此本文選用Soarsea公司生產的v200小型主機作為上位機。Soarseav200是低功耗且具有高計算性能的小型主機,其尺寸為113 mm×108 mm×30 mm,具有2個64位的物理核心、2 GB的低功耗運行內存,以及豐富的外設,有一個HDMI接口和多個USB接口,具有體積小、功耗低、運算速度快等優點。因此Soarsea-v200既能滿足在移動平臺上體積小的要求,又能滿足SLAM算法的實時運算的要求。
STM32系列單片機是意法半導體(ST)公司生產的高性能嵌入式處理器,內核架構為Cortex-M3,工作頻率最高為72 MHz,有IIC、USART、PWM、CAN等外設,具有主頻高、外設資源豐富、功耗低等優點,廣泛應用在工業、醫療等領域[4]。
STM32f103控制芯片、直流電動機、IMU、電源等接線圖如圖2所示,應用機器人操作系統提供的ROSserial通信協議,將底層控制集成到ROS中,則下位機主控芯片相當于ROS中的一個節點,可以方便地對移動機器人進行控制和數據傳輸。

圖2 工控機和主控板的接線圖
本文選用的激光雷達是上 海 思 嵐(SLAMTEC)公司 生 產 的RPLIADR A2國產單線激光雷達,基于激光三角測距原理,每秒最高8000 次采樣和最高15 Hz的旋轉頻率,可實現半徑8 m范圍內的全方位360°二維平面掃描測距,在室內中短距離測量使用場景下效果較好,性價比高。激光雷達安裝在系統頂層,如圖3所示。

圖3 激光雷達安裝圖
本文軟件平臺為ROS機器人操作系統,相當于運行在Linux 系統上的次級操作系統。ROS系統免費且開源,支持C++、Python 等多種語言的程序設計,方便開發者進行開發。ROS集成很多開源軟件包供開發者修改并使用,可用于建圖、導航、路徑規劃等功能的實現。且提供了RViz、Gazebo等仿真軟件,通過仿真可以驗證算法的有效性等,有助于快速完成機器人系統的開發[6-7]。ROS系統最大的優點是其采用松耦合的設計方式,系統中的每個功能都是一個節點程序,在后續機器人開發功能需求變化時,增添或刪除對應的程序節點即可,設計方式靈活。
SLAM及導航算法運算需要采集大量實時的傳感器數據,而無線數據傳輸受到網絡延遲影響,因此需要在移動機器人底盤上搭載小型工控機,而實時生成的地圖數據需要在屏幕中顯示,因此可通過無線網絡將工控機與遠程筆記本進行連接,通過這種方式可以方便地滿足工控機與移動底盤、工控機與遠程筆記本之間的相互通信。ROS分布式系統通信的特性很好地滿足了上述功能需求,具體的分布式系統實現步驟及要求如下:
1)設定主從機,在同一個ROS系統中只能運行一個節點管理器(ROS Master),Master需運行在主機上,本文設定工控機為主機,遠程筆記本為從機。
2)將主從機連接到同一路由器下,為方便主從機在網絡中找到對方,以及方便其他配置,分別在自己系統中/etc/hosts文件中設置對方的IP地址及名字。
同時需要將ROS系統的環境變量ROS_HOSTERNAME和ROS_MASTER_URI配置設置在.bashr文件中,使主從機中所有的節點都能找到運行Master節點的主機IP地址,分別配置如下:

其中,第一行配置系統的IP地址,第二行配置主機的IP地址。
在ROS系統運行過程中,工控機訂閱傳感器數據實時運行算法軟件包及速度信息控制移動機器人底盤運動,遠程筆記本上的RViz圖形顯示節點、teleop鍵盤控制節點等進行數據可視化和發布命令。ROS分布式系統設計保證了消息的同步,減輕了計算機系統的內存壓力,有助于系統實時性的實現。
本文所采用的SLAM 算法是Cartographer 算法,Cartographer算法是谷歌在2016年開源的SLAM算法,該算法可通過激光雷達等傳感器信息實時生成柵格地圖,可用于二維和三維SLAM建圖。Cartographer算法基于圖優化理論框架,分為前端和后端兩部分:前端主要負責掃描匹配,將激光雷達信息處理后由submab子圖進行匹配,當新生成的子圖沒有新的數據插入時會進行局部回環檢測。如果找到與當前位置估計最佳的匹配結果,則將子圖加入到回環約束中。對估計位姿的優化主要由后端完成,Cartographer算法采用分支定界法對地圖搜索進行加速[8-10]。其理論過程如圖4所示。相比于Gmapping算法,不論是地圖精度還是算法魯棒性,Cartographer算法都比Gmapping更好。該算法在移動機器人領域應用非常廣泛。
為對本文構建的室內移動機器人進行測試與驗證,根據算法建圖需要及室內機器人工作環境的特點,選取較為空曠、地面較為平整且能構成閉環作為測試環境,如圖5所示,其二維尺寸圖如圖6所示。

圖4 Cartographer SLAM算法理論過程

圖5 機器人建圖實驗場地

圖6 實驗場地尺寸圖
為提高開發效率和節約開發成本,同時也為后續的實際實驗積累經驗,本文首先利用ROS機器人系統提供的仿真平臺進行仿真實驗。首先利用Gazebo軟件中的build editor工具生成環境模型,圖7是根據真實實驗環境二維圖創建的環境模型。將包含機器人關節信息、運動學等參數信息的xacro文件導入到Gazebo仿真平臺中,同時加入激光雷達傳感器模型。

圖7 在gazebo中構建的仿真環境
仿真實驗步驟,運行編寫好的launch 啟動文件,分別啟動以下節點 文 件:1)啟動Gazebo并加載自己構建的仿真環境,如圖8所示;2)啟動RViz,并載入配置環境,如圖9 所示;3) 啟動Cartographer.launch,加載一些默認參數;4)最后啟動鍵盤控制節點,控制小車繞行環境一周,Cartographer SLAM算法包生成地圖。
在Gazebo和RViz 中運行的仿真結果中,最后通過運行rosrun map_server map_saver -f office_sim 保存仿真結果地圖。
實際環境地圖構建實驗步驟如下:1)運行底盤程序啟動機器人,以及激光雷達啟動程序;2)啟動用于建圖的Cartographer算法節點,實時生成地圖;3)啟動RViz工具,觀察實時生成的地圖和機器人當前的位姿;4)啟動鍵盤控制節點,并設置速度和角速度值,通過鍵盤控制機器人在試驗場地中運行一圈;5)通過map_server工具將生成地圖保存下來。Cartographer算法生成的地圖如圖11所示。
為分析Cartographer算法的建圖精度,對實驗場地中的9 個特征尺寸進行測量,并測量其在RViz軟件中顯示的圖測值,將實際值與圖測值進行對比,并計算其絕對誤差和相對誤差,測量數據和誤差值如表1所示。
工控機的CPU為雙核處理器,使用sudo htop命令查看算法運行時系統的CPU占用率及內存占用,為便于統計,將兩個核的CPU占用進行求和,在Cartographer SLAM算法運行期間,內存占用平均為706 MB,CPU占用率如圖12所示。

圖8 Gazebo仿真界面

圖9 RViz仿真界面

圖10 仿真輸出地圖

圖11 Cartographer算法生成的地圖

表1 Cartographer 算法尺寸測量數據表

圖12 算法運行期間CPU占用率
從實驗結果圖和測量數據表可以看出,移動機器人系統運行Cartographer算法構建的柵格地圖與真實環境較為相符,平均相對誤差較小,且運行期間的CPU占用率不高。
本文以小型工控機作為上位機,stm32f103單片機作為下位機,通過RPLIADR A2激光雷達獲取環境信息,利用ROS分布式系統及Cartographer算法構建了移動機器人SLAM系統。仿真實驗及實際環境測試結果表明,該移動機器人具有良好的建圖精度和系統性能,而且具有模塊化、拓展方便等優點,可用于ROS框架和移動機器人的基礎實驗。