參考視頻:【奧特學園】ROS機器人入門課程《ROS理論與實踐》零基礎教程_嗶哩嗶哩_bilibili
參考文檔:http://www.autolabor.com.cn/book/ROSTutorials/
導航實現03_路徑規划
毋庸置疑的,路徑規划是導航中的核心功能之一,在ROS的導航功能包集navigation中提供了 move_base 功能包,用於實現此功能。
1.move_base簡介
move_base 功能包提供了基於動作(action)的路徑規划實現,move_base 可以根據給定的目標點,控制機器人底盤運動至目標位置,並且在運動過程中會連續反饋機器人自身的姿態與目標點的狀態信息。如前所述(7.1)move_base主要由全局路徑規划與本地路徑規划組成。
move_base已經被集成到了navigation包,navigation安裝前面也有介紹,命令如下:
sudo apt install ros-<ROS版本>-navigation
2.move_base節點說明
move_base功能包中的核心節點是:move_base。為了方便調用,需要先了解該節點action、訂閱的話題、發布的話題、服務以及相關參數。
3.move_base與代價地圖
3.1概念
機器人導航(尤其是路徑規划模塊)是依賴於地圖的,地圖在SLAM時已經有所介紹了,ROS中的地圖其實就是一張圖片,這張圖片有寬度、高度、分辨率等元數據,在圖片中使用灰度值來表示障礙物存在的概率。不過SLAM構建的地圖在導航中是不可以直接使用的,因為:
- SLAM構建的地圖是靜態地圖,而導航過程中,障礙物信息是可變的,可能障礙物被移走了,也可能添加了新的障礙物,導航中需要時時的獲取障礙物信息;
- 在靠近障礙物邊緣時,雖然此處是空閑區域,但是機器人在進入該區域后可能由於其他一些因素,比如:慣性、或者不規則形體的機器人轉彎時可能會與障礙物產生碰撞,安全起見,最好在地圖的障礙物邊緣設置警戒區,盡量禁止機器人進入...
所以,靜態地圖無法直接應用於導航,其基礎之上需要添加一些輔助信息的地圖,比如時時獲取的障礙物數據,基於靜態地圖添加的膨脹區等數據。
3.2組成
代價地圖有兩張:global_costmap(全局代價地圖) 和 local_costmap(本地代價地圖),前者用於全局路徑規划,后者用於本地路徑規划。
兩張代價地圖都可以多層疊加,一般有以下層級:
-
Static Map Layer:靜態地圖層,SLAM構建的靜態地圖。
-
Obstacle Map Layer:障礙地圖層,傳感器感知的障礙物信息。
-
Inflation Layer:膨脹層,在以上兩層地圖上進行膨脹(向外擴張),以避免機器人的外殼會撞上障礙物。
-
Other Layers:自定義costmap。
多個layer可以按需自由搭配。
