Navigation 2(Nav 2)是ROS 2中自帶的導航框架,其目的是能夠通過一種安全的方式使移動機器人從A點移動到B點。所以,Nav 2可以完成動態路徑規划、計算電機速度、避開障礙物和恢復結構等行為。
Nav 2使用行為樹(BT,Behavior Trees)調用模塊化服務器來完成一個動作。動作可以是計算路徑、控制工作(control efforts)、恢復或其他與導航相關的動作。這些動作都是通過動作服務器與行為樹(BT)進行通信的獨立節點,如下圖所示:

注意:每個動作服務器可以有多個插件,並且有與之匹配的BT插件,可以用來創建具體環境的導航行為。
1.ROS 1與ROS 2中導航框架的對比
在Nav 2中,move_base
被拆分為多個組件。與單個狀態機不同(ROS1),Nav 2利用動作服務器和ROS 2的低延遲、可靠通信來分離思想。行為樹用於編排組織這些任務,這使得Nav 2無需通過編程來安排任務,通過行為樹xml文件就可以擁有高度可配置的導航行為。
nav2_bt_navigator
在頂層替換了move_base
,它使用一個Action
接口來完成一個基於樹的動作模型(tree-based action model)的導航任務。通過BT來實現更加復雜的狀態機,並添加恢復行為作為額外的Action Servers
。這些行為樹是可配置的xml。
路徑規划(planning)、恢復(recovery)和控制器(controller)服務器也是動作服務器,BT導航器可以調用這些服務器進行計算。所有的3個服務器都可以承載許多算法的許多插件,每個插件都可以單獨從導航行為樹中調用特定的行為。提供的默認插件是從ROS 1移植的,即:DWB, NavFn以及類似的恢復行為,如旋轉和清除costmaps,另外還添加了一個等待固定時間的新恢復機制。這些服務器通過它們的動作服務器從BT導航器調用,以計算結果或完成任務。狀態由BT導航器行為樹維護,參考下圖。
所有這些更改使得在啟動/運行時通過實現相同接口的任何算法來替換這些節點,可以參閱每個包的README.md來獲取更多信息。

注意:nav2_simple_navigator
不再使用,已經被nav2_bt_navigator
所取代。
小結:
移植包:
- amcl:移植到nav2_amcl
- map_server:移植到nav2_map_server
- nav2_planner:替換global_planner,管理
N
個規划器插件 - nav2_controlle:替換local_planner,管理
N
控制器插件 - Navfn:移植到nav2_navfn_planner
- DWB:替換DWA,並移植到ROS 2中的nav2_dwb_controller元包下
- nav_core:移植為nav2_core,並對接口進行更新
- costmap_2d:移植為nav2_costmap_2d
新包:
- Nav2_bt_navigator:替換
move_base
狀態機 - nav2_lifecycle_manager:處理服務器程序的生命周期
- nav2_waypoint_follower:可以通過許多路徑點來執行復雜的任務
- nav2_system_tests:一組用於CI的集成測試和模擬中的基本教程
- nav2_rviz_plugins:一個rviz插件,用來控制Navigation2服務器、命令、取消和導航
- nav2_experimental:深度強化學習控制器的實驗(和不完整)工作
- navigation2_behavior_trees:用於調用ROS動作服務器的行為樹庫的包裝器
2.Nav 2概述
Nav2的預期輸入是符合REP-105的TF轉換、使用靜態Costmap層的地圖源、BT XML文件以及任何相關的傳感器數據源。然后,它將為完整性或非完整性約束的機器人電機提供有效的速度命令。目前支持所有主要的機器人類型:完整性約束機器人、差分驅動型機器人、腿型機器人和阿克曼(類汽車)機器人等基礎類型。同時,Nav2同時使用用於SE2碰撞檢測的圓形和任意形狀機器人為這些基本類型的機器人提供獨特的支持。
Nav具有以下工具:
- 加載、服務和存儲地圖(Map Server)
- 在地圖上定位機器人(AMCL)
- 在障礙物周圍規划一條從A到B的路徑(Nav2 Planner)
- 控制機器人沿着路徑行走(Nav2 Controller)
- 將傳感器數據轉換為世界的costmap表示(Nav2 Costmap 2D)
- 使用行為樹構建復雜的機器人行為(Nav2 Behavior和BT Navigator)
- 計算故障時的恢復行為(Nav2 Recoveries)
- 跟隨一系列的路徑點(Nav2 Waypoint Follwer)
- 管理服務器的生命周期(Nav2生命周期管理器)
- 通過插件自定義算法和行為(Nav2 Core)
Nav 2還提供了一組啟動插件來進行機器人導航。NavFn使用A *或Dijkstra算法計算從一個姿態到目標姿態的最短路徑。DWB將使用DWA算法來計算沿着一條路徑的控制工作,並帶有自己的一些用於軌跡批評的插件。恢復行為包括:等待、旋轉、清理cost map和備份。有一組BT插件可以調用這些服務器和計算條件。最后,還有一組Rviz插件用於與堆棧交互和控制生命周期。所有插件列表可以在導航插件中找到。
如果給您帶來幫助,希望能給點個關注,以后還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。