ros中move_base的使用
move_base概述
move_base 包提供了一個動作的實現(參見actionlib包),給定世界上的目標,它將嘗試使用移動基地來實現它。move_base 節點將全局和本地規劃器鏈接在一起以完成其全局導航任務。它支持任何遵循在nav_core包中指定的 nav_core::BaseGlobalPlanner 接口的全局規劃器和任何遵循在nav_core包中指定的 nav_core::BaseLocalPlanner 接口的本地規劃器。move_base 節點還維護兩個成本地圖,一個用于全局規劃器,另一個用于本地規劃器(參見costmap_2d包),用于完成導航任務。
關于actionlib
在任何基于 ROS 的大型系統中,都會有這樣的情況:有人想向節點發送請求以執行某些任務,同時也會收到對請求的回復。這目前可以通過 ROS服務來實現。如果服務需要很長時間來執行,用戶可能希望能夠在執行期間取消請求或獲得有關請求進展情況的定期反饋。該actionlib包提供的工具來創建執行長期運行的目標是可以被搶占的服務器。它還提供了一個客戶端接口,以便向服務器發送請求。
關于目標的的設定
除了使用在rviz界面中設定的方法外。Move_base源碼中有為rviz等提供調用借口,將geometry_msgs::PoseStamped形式的goal轉換成move_base_msgs::MoveBaseActionGoal,再發布到對應類型的goal話題中所以可以通過命令行發送對應的導航目標點。
如果起始點為空,設置global_pose為起始點
利用局部路徑規劃器直接輸出輪子速度,控制機器人按照路徑走到目標點
地圖數據超時,即觀測傳感器數據不夠新,停止機器人,返回false
move_base 狀態機
move_base 狀態機是處理導航的控制邏輯;movebase狀態機分為planning,controlling,clearing 和default。planning是指接受新目標與進行全局規劃的整個過程,cotrolling是指調用局部規劃器計算機器人速度的過程,clearing是指利用用戶定義的行為進行recovery的過程。一般默認狀態或者接收到一個有效goal時是PLANNING,在規劃出全局路徑后state_會由PLANNING->CONTROLLING如果規劃失敗則由PLANNING->CLEARING。
//recovery是指恢復的規劃器,其跟全局規劃器和局部規劃器是同一個等級的。
//不同的是,它是在機器人在局部代價地圖或者全局代價地圖中找不到路時才會被調用,比如rotate_recovery讓機器人原地360°旋轉,clear_costmap_recovery將代價地圖恢復到靜態地圖的樣子。
Move_base的使用
啟動move_base用的是launch文件,主要內容包括解析map文件,move_base和amcl定位三個部分,構成一個完整的框架,
global_planner這個包,它默認使用的是dijkstra,也可以使用A*全局路徑規劃,局部路徑規劃包括dwa和teb
dwa參數簡單,阿克曼底盤使用teb算法,teb算法更先進些;但是dwa對于除了阿克曼以外的其他底盤,都完全滿足要求了;
GitHub 機器人
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。