胡思旺,李春杰
(中國科學技術大學 軟件學院,蘇州 215000)
移動機器人在陌生環境中自主避障與導航一直是機器人相關領域研究熱點。機器人自主導航技術的實現關鍵在于如何解決機器人在陌生環境中的定位與路徑規劃問題。一方面,基于里程計慣性導航[1]的實現,往往因為慣性傳感器長時間的累積誤差,極易造成機器人航跡計算偏差,無法滿足移動機器人定位與路徑規劃的精度要求。另一方面,采用GPS信號的衛星導航[2]技術,存在室內信號弱,定位誤差大,且極易受到天氣與環境影響等問題。
顯然,傳統上的自主導航技術難以勝任移動機器人自主導航的需求。同時定位與地圖構建SLAM(simultaneous localization and mapping)技術的提出是解決傳統上導航技術缺陷的有效方法。SLAM是指機器人在陌生環境中通過獲取自身傳感器數據,實現在陌生環境中的自主定位與環境地圖構建,機器人依據SLAM構建的室內環境地圖進行路徑規劃,同時利用自身傳感器數據自主避障到達目標點。
機器人操作系統ROS是基于Linux構建的開源機器人操作系統,其本質上是運行在Linux上的機器人軟件開發工具集,提供非常多的開源硬件驅動與算法功能包,極大方便機器人的設計與開發。在此基于ROS設計并實現了移動機器人的自主導航系統,并在stdr_simulator仿真系統上測試與驗證。
ROS是2010年由Willow Garage公司發布開源的次級操作系統,最早基于Ubuntu操作系統設計。ROS的設計初衷是幫助實現機器人研發過程中的代碼復用,提高機器人開發人員的效率,因此ROS被設計成為一種分布式、松耦合的架構,不同的執行程序被分散地獨立設計,可以按需求將不同的執行程序組合起來,實現機器人的功能。系統在運行時,所有的可執行程序及其所交互的數據都會通過ROS實現的點對點網絡組織與實現。
ROS中把可執行程序稱為節點,節點與節點之間通過基于ROS主題的形式傳遞消息。ROS提供節點基于主題訂閱與發布的消息通訊模式,節點將消息發布到指定主題中,其它節點通過訂閱主題來獲取消息,通訊模式如圖1所示。

圖1 ROS消息模型Fig.1 ROS messaging model
ROS允許節點運行在同一網絡下的不同計算機上,由ROS節點管理器ROS Master負責節點通訊的管理。ROS Master提供節點、主題等信息的注冊與查找,實現節點分布式、松耦合的通訊。ROS Master工作原理如圖2所示。
ROS Master負責維護ROS中所有節點進程之間的通訊,發布者節點在ROS Master中注冊主題與自身地址。訂閱者節點通過在ROS Master中依據訂閱的主題查找發布者節點通訊地址,依據ROS通訊協議,與發布者建立Socket通訊鏈路,最終實現發布者與訂閱者的消息通訊。

圖2 ROS Master通訊模型Fig.2 ROS Master communication model
ROS為機器人自主導航開發提供了大量的功能級軟件包。在此,利用了ROS提供的用于機器人SLAM的gmapping軟件包,以及用于自主避障與路徑規劃的navigation軟件包集,在stdr_simulator仿真器下仿真實現移動機器人的自主導航。ROS將提供的軟件功能包以封裝成節點的形式提供給開發者使用,通過組織不同節點,極大方便自主導航系統的設計。
gmapping軟件包基于RBPF粒子濾波算法[3],利用激光雷達傳感器與機器人里程計信息構建室內柵格地圖,其核心運行的節點為slam_gmapping。在此通過配置navigation軟件包實現機器人的自主避障與路徑規劃,amcl軟件包實現機器人的移動定位。ROS提供navigation軟件包集配置如圖3所示。功能如下:
1)amcl 是ROS提供實現在SLAM構建的柵格地圖上定位軟件包,基于粒子濾波的蒙特卡洛定位算法實現。
2)sensor transforms 負責實現機器人中不同傳感器與機器人本體之間復雜坐標系統變換。
3)Odometry 負責發布move_base運行的里程計信息。
4)base_controller 訂閱move_base路徑規劃的速度geometry_msgs/Twist消息,并轉換為機器人電機驅動指令,驅動機器人運行。
5)Laser sensor 為激光雷達節點,提供激光掃描數據。
6)map_server 是ROS提供的讀取柵格地圖的工具,為move_base提供自主導航需要的先驗環境地圖。

圖3 navigation導航功能包集配置Fig.3 Navigation package configuration
7)move_base 是整個導航功能包集的核心運行節點,根據機器人外部傳感器數據,負責實現移動機器人的自主避障和路徑規劃。
8)global_planner 是全局路徑規劃插件,在此采用A*路徑規劃算法[4]。
9)local_planner 是move_base中局部路徑規劃插件,基于DWA動態窗口法實現機器人的自主避障與局部路徑規劃。
10)recovery_behaviors 是當機器人導航失敗時執行動作的配置。
ROS基于代價地圖實現機器人的路徑規劃,global_costmap為全局代價地圖,local_costmap為局部代價地圖。
ROS導航功能包集中核心配置為move_base軟件包配置。move_base軟件包實現移動機器人自主避障與路徑規劃。move_base在global_costmap全局代價地圖上實現全局路徑規劃,在local_costmap上實現局部路徑規劃。在配置文件中配置機器人運行時的相關參數。move_base軟件包運行時,通過加載編寫的配置文件,實現移動機器人的自主導航。相關的配置有:通用配置文件;全局代價地圖配置文件;局部代價地圖配置文件。
通用參數配置文件,主要用于配置全局路徑規劃插件global_planner與局部路徑規劃插件local_planner的共同必要基本參數。在此配置如下:

其中,robot_radius參數配置圓形機器人的半徑;obstacle_range代表傳感器最大的探測距離;raytrace_range:表示障礙物最小引入代價地圖的距離;observation_sources參數定義構建代價地圖傳感器的來源。
全局代價地圖用于配置全局路徑規劃插件global_planner的工作行為。其配置如下:

其中,global_frame與robot_base_frame定義全局地圖與機器人本體坐標系統;update_frequency定義全局路徑規劃插件global_planner的工作頻率。對于機器人在偏離原先的全局路徑時,全局路徑規劃插件將重新規劃全局路徑。
局部代價地圖用于配置局部規劃器在自主避障過程的DWA動態窗口算法的工作行為。在此配置如下:

在局部路徑規劃配置中,主要配置global_frame,robot_base_frame機器人地圖坐標系及機器人本體坐標系。public_frequency配置局部路徑規劃器發布信息的頻率。controller_patience表示在代價地圖清理操作執行前,控制器花多長時間等有效控制下發速度控制指令。接下來的width,height,resolution定義代價地圖的大小與分辨率。transform_tolerance參數定義轉換的允許延遲時間。之后的參數定義了機器人本體的最大速度、最小速度、最大加速度等速度屬性。
在此所仿真的是兩輪差速運動機器人,max_vel_y的方向速度定義0,速度屬性參數應該根據機器人本體的特性進行合理的配置。
move_base軟件包參數完成配置后,需要編寫launch啟動文件,啟動move_base節點,launch文件的編寫規則可以參考文獻[6]。在此,仿真環境為ROS-indigo版本,操作系統為ubuntu14.04,仿真器選用stdr_simulator。
首先需要啟動stdr_simulator仿真器。通過編寫launch文件啟動gmapping節點,控制機器人在環境中移動以實現周圍環境地圖的構建,使用ROS提供的map_server工具保存gmapping創建的地圖。
模擬環境如圖4所示。使用gmapping所構建的地圖如圖5所示。

圖4 仿真環境Fig.4 Simulation environment

圖5 室內地圖Fig.5 Indoor map
在自主導航仿真環境中,仿真的過程如下:先啟動stdr_simulator仿真器;通過編寫的launch文件啟動move_base節點與amcl節點;打開ROS提供的可視化調試工具rviz,在rviz中點擊2D Nav Goal。此時,機器人便會在創建的地圖上進行全局路徑規劃,并開啟自主導航。當遇到障礙物時,機器人通過局部路徑規劃進行局部避障。其仿真結果如圖6所示。

圖6 仿真實現效果Fig.6 Simulation effect
充分利用ROS提供的導航功能包集,設計并實現了移動機器人自主導航系統,在stdr_simulator仿真環境下對自主導航系統進行了仿真驗證。試驗結果表明,基于ROS的自主導航系統,可以有效地滿足移動機器人在室內自主導航的需求。針對ROS的特點,后續工作通過設計機器人驅動節點與激光雷達驅動節點,便可以實現將自主導航系統部署在真實的移動機器人。