◆文/江蘇 房守江 張睿
本文主要研究設(shè)計了一款基于樹莓派ROS平臺的SLAM智能車。該智能車?yán)眉す饫走_(dá)以獲取周圍環(huán)境的深度信息,采用ROS環(huán)境下具備SLAM算法的gmapping功能包,并通過STM32對智能車的底層驅(qū)動控制可實現(xiàn)即時定位、地圖構(gòu)建、自主導(dǎo)航和避障功能。
室外定位與導(dǎo)航可以使用GPS,但在室內(nèi)進(jìn)行定位與導(dǎo)航會比較復(fù)雜。SLAM為即時定位與地圖構(gòu)建技術(shù),很好地解決了室內(nèi)智能車的地圖構(gòu)建和即時定位問題,具備重要的理論與應(yīng)用價值。而對于智能移動這個問題,除了要有SLAM技術(shù)之外,還需要加入路徑規(guī)劃和運動控制技術(shù)。
本設(shè)計中,SLAM智能小車由小車底盤、傳感器系統(tǒng)和樹莓派計算機系統(tǒng)組成,其中,底盤是智能小車的運動載體,用來實現(xiàn)整個智能小車的運動,傳感器系統(tǒng)由光電編碼器、激光雷達(dá)和IMU組成,用來采集實現(xiàn)可靠SLAM所需的各種傳感器信息,計算機系統(tǒng)包括下位機和便攜式計算機系統(tǒng),便攜式計算機系統(tǒng)用來運行ROS操作系統(tǒng)和SLAM程序,本系統(tǒng)整體設(shè)計方案如圖1所示。
圖1 智能車設(shè)計方案
(1)激光雷達(dá)
要完成智能車的SLAM和自主導(dǎo)航,首先要有感知周圍環(huán)境的能力,尤其要有感知周圍環(huán)境深度信息的能力,這是探測障礙物的關(guān)鍵數(shù)據(jù)。激光雷達(dá)可以提供智能車本體與環(huán)境障礙物之間的距離信息,其優(yōu)點是精度高,響應(yīng)快,數(shù)據(jù)量小,可以完成實時SLAM任務(wù)。本設(shè)計中采用SLAMTEC公司低成本激光雷達(dá)RPlidar-A1,可實現(xiàn)12米測距,一秒8 000次測量頻率,掃描頻率5Hz。
針對RPlidar-A1激光雷達(dá),通過安裝完成ROS相應(yīng)的驅(qū)動功能包,在sensor_msgs包中定義了專用數(shù)據(jù)結(jié)構(gòu)——LaserScan,用于存儲激光雷達(dá)獲取的深度信息。
(2)里程計與IMU
里程計采用底盤電機光電編碼器方案,由STM32下位機經(jīng)過運動學(xué)計算獲得線速度后發(fā)送給ROS進(jìn)行里程的轉(zhuǎn)換,進(jìn)而獲得小車在地圖上的坐標(biāo)。IMU提供的姿態(tài)數(shù)據(jù)融合到角速度上,小車原地旋轉(zhuǎn)是否準(zhǔn)確需要靠準(zhǔn)確的IMU和里程計。IMU數(shù)據(jù)的讀取和線速度的計算均由STM32下位機主控負(fù)責(zé),并通過USB傳輸給上位機。
運動控制板采用STM32F103RC作為主控,主要負(fù)責(zé)小車運動模型解算、IMU數(shù)據(jù)讀取、線速度的計算、遙控部分控制,最終通過USB傳輸給上位機。其中,IMU數(shù)據(jù)由MPU6050模塊進(jìn)行讀取,接口電路如圖2。線速度計算由光電編碼器完成,光電編碼器接口電路如圖3。主控板可裝載峰值6A的電機驅(qū)動模塊,引出四路編碼電機驅(qū)動接口,其中一路電機驅(qū)動接口電路如圖4所示。
圖2 MPU6050接口電路
圖3 電機驅(qū)動模塊接口電路
圖4 光電編碼器接口電路
ROS主控系統(tǒng)控制器采用Raspberrypi 4B,Linux版本安裝了 Ubuntu 18系統(tǒng)。同時裝有ROS機器人操作系統(tǒng),ROS版本為Melodic,作為機器人ROS主控制節(jié)點。
(1)ROS系統(tǒng)
機器人操作系統(tǒng)(ROS)是一個開放源代碼的機器人中間件套件,安裝到Linux系統(tǒng)上。ROS系統(tǒng)由許多獨立的節(jié)點組成,每個節(jié)點都使用發(fā)布/訂閱消息傳遞模型與其他節(jié)點進(jìn)行通信。小車節(jié)點我們稱為主節(jié)點(ROS Master),因本地運行數(shù)據(jù)收發(fā)延遲最低,本設(shè)計中雷達(dá)、建圖、導(dǎo)航、操作和監(jiān)控都在本地節(jié)點運行,采用USB供電、HDMI接口的7英寸液晶作為ROS主控顯示器。
(2)gmapping功能包
gmapping功能包為開源的功能包,集成了粒子波算法,開發(fā)者無需掌握內(nèi)部復(fù)雜的算法,利用其對用戶開放的接口即可實現(xiàn)相關(guān)功能,如圖5所示。
圖5 gmapping功能包總體框架
gmapping功能包需要獲取環(huán)境深度信息、IMU信息和里程計信息,通過相關(guān)參數(shù)配置及算法實現(xiàn),以進(jìn)行定位與地圖構(gòu)建,gmapping功能包向用戶開放的關(guān)鍵接口如表1所示。
表1 gmapping功能包向用戶開放的關(guān)鍵接口
使用gmapping建圖的一般步驟是:①在主控節(jié)點啟動雷達(dá)與Gmapping節(jié)點,同時程序會將IMU姿態(tài)與位置融合發(fā)布o(jì)dom位置信息;②啟動本地雷達(dá)與Gmapping節(jié)點;③啟動rviz在窗口內(nèi)即可看到機器人tf位姿數(shù)據(jù)、激光節(jié)點、地圖數(shù)據(jù);④保存地圖,如圖6所示,保存后地圖文件為map.pgm和map.yaml。
圖6 利用gmapping建圖
(3)自主導(dǎo)航
導(dǎo)航是在給定環(huán)境中將機器人從一個位置移動到指定目的地,導(dǎo)航需要使用保存好的地圖,通過amcl尋找位置,move_base路徑規(guī)劃從而實現(xiàn)機器人自主導(dǎo)航。本設(shè)計采用navigation導(dǎo)航包實現(xiàn)智能車的自主導(dǎo)航:①啟動底盤通訊與雷達(dá)節(jié)點;②本地啟動nav導(dǎo)航包,導(dǎo)入地圖文件;③啟動本地可視化rviz,設(shè)置初始姿勢位置;④確定目標(biāo)位置,開始導(dǎo)航,如圖7所示。
圖7 自主導(dǎo)航
本文研究設(shè)計的SLAM智能車,采用樹莓派便攜式計算機系統(tǒng),配備低成本單線國產(chǎn)激光雷達(dá)、帶四個驅(qū)動電機的底盤、STM32控制器等,成本低,功能完善,建圖與自主導(dǎo)航效果好,可很大程度上滿足室內(nèi)建圖和自主導(dǎo)航的功能需求。