ROS導航包源碼學習6 --- recovery

recoveryBehevior是nav_core里除了全局規劃 局部規劃的第三個介面。這個介面規定了一個runBehavior,從move_base的wiki上可以看到,這個類是當小車卡住的時候調用的,調用的邏輯如下:

clearCostmap的邏輯很簡單:遍歷所有層,然後如果某層在可清理列表裡就清理掉它的costmap。這裡可清理列表裡只有obstacleLayer,也就是實時掃描建立的costmap。

MoveSlowAndClear就像wiki里介紹的一樣,清理costmap然後什麼都不管,按照前進速度和轉角速度走。從代碼里可以看到,根據指定的距離,這是通過先清除全局costmap跟局部costmap一圈的obstacle layer的障礙,然後直接髮指令實現的。由於只清除了obstacle layer,其實static layer的障礙還在,而且這裡清不清除跟髮指令關係不大,該撞上去的還是會撞的,相當於閉著眼睛往前走。

rotateRecovery的行為也很簡單:轉一圈看看有沒有路。在runBehavior里只需要髮指令讓小車轉一圈,有沒有路是local costmap在轉一圈過程中建立發現的。

值得注意的是,這些都是遵循插件化的思路設計的,所以可以隨時增減,改寫起來非常方便。

推薦閱讀:

TiDB 源碼閱讀系列文章(四)Insert 語句概覽
LevelDB源碼解析4. 架構設計
源碼閱讀經驗談-slim,darknet,labelimg,caffe
LevelDB源碼解析7. 日誌格式
LevelDB源碼解析8. 讀取日誌

TAG:機器人操作平台ROS | 源碼閱讀 | 機器人控制 |