Wiki
Humble與Jazzy導航的差異
約 4 分鐘閱讀
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.參考的官方 Jazzy 示例
/opt/ros/jazzy/share/nav2_bringup/params/nav2_params.yaml/opt/ros/jazzy/share/nav2_bt_navigator/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml/opt/ros/jazzy/share/nav2_bt_navigator/behavior_trees/navigate_through_poses_w_replanning_and_recovery.xml
2.修改內容
可以複製一個humble的功能包並命名為 mycar_navigation2_jazzy,然後拿這個功能包進行改動.
-
將功能包名保持為
mycar_navigation2_jazzy,並在相關位置補充修改邊界註釋。package.xmlCMakeLists.txt
-
將
_jazzy包內 launch 檔案的包路徑查詢保持為mycar_navigation2_jazzy,並補充修改邊界註釋。launch/nav2.launch.pylaunch/bringup.launch.pylaunch/auto_slam.launch.py
-
對照 Jazzy 官方
bt_navigator示例更新params/bt.yaml。- 刪除 Humble 時代列出的 Nav2 內建 BT 外掛列表。
- Jazzy 會自動載入 Nav2 內建 BT 外掛,
plugin_lib_names只保留自定義 BT 外掛。 - 沒有自定義 BT 外掛時不傳
plugin_lib_names,避免空列表被解析成無型別引數。 - 新增
navigators、navigate_to_pose、navigate_through_poses。 - 新增
error_code_names,用於配合 Jazzy 官方行為樹裡的 error code blackboard 變數。
-
對照 Jazzy 官方 pluginlib 類名更新 planner 和 behavior 外掛。
nav2_navfn_planner/NavfnPlanner改為nav2_navfn_planner::NavfnPlannernav2_behaviors/Spin等改為nav2_behaviors::Spin等
-
對照 Jazzy 官方行為樹更新自定義 BT XML。
- 新增
BTCPP_format="4"。 - 新增
PlannerSelector和ControllerSelector。 ComputePathToPose、ComputePathThroughPoses、FollowPath新增error_code_id。- 新增
WouldAPlannerRecoveryHelp和WouldAControllerRecoveryHelp。
- 新增
-
對照 Jazzy 官方 controller 引數名更新進度檢查器引數。
progress_checker_plugin改為progress_checker_plugins: ["progress_checker"]
-
整理 planner/controller 引數檔案的 YAML 結構。
- 將重複的
/**頂層鍵合併成一個。 global_costmap和local_costmap掛在同一個/**根鍵下,避免參數解析時覆蓋 server 引數。
- 將重複的
3.主要修復的問題
啟動時報錯:
Failed to create navigator id navigate_to_pose. Exception: ID [ComputePathToPose] already registered
原因是 Humble 配置在 plugin_lib_names 中手動列出了 Nav2 內建 BT 外掛,而 Jazzy 已經自動載入這些內建外掛,導致 ComputePathToPose 被重複註冊。
4.使用方式
重新構建並 source:
colcon build --symlink-install --packages-select mycar_navigation2_jazzy
source install/setup.bash
啟動 Jazzy 版本:
ros2 launch mycar_navigation2_jazzy bringup.launch.py use_sim_time:=True
5.已驗證
已執行:
colcon build --symlink-install --packages-select mycar_navigation2_jazzy
ros2 launch mycar_navigation2_jazzy nav2.launch.py --show-args
ros2 launch mycar_navigation2_jazzy bringup.launch.py --show-args
另外用 timeout 做過短啟動檢查:
ros2 launch mycar_navigation2_jazzy bringup.launch.py use_sim_time:=True
結果:
bt_navigator成功建立navigate_to_pose和navigate_through_poses。planner_server成功載入nav2_navfn_planner::NavfnPlanner。controller_server成功載入 DWB 和所有 critics。behavior_server成功載入nav2_behaviors::...外掛。- 在沒有 Gazebo/robot_state_publisher/TF 的短啟動環境裡,最後停在等待
base_link -> mapTF,這是預期的執行環境缺失,不是配置 fatal。