第 12.3 節
Humble與Jazzy導航的差異
0瀏覽次數0訪問次數--跳出率--平均停留
參考的官方 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
修改內容
可以複製一個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 參數。
- 將重複的
主要修復的問題
啟動時報錯:
Failed to create navigator id navigate_to_pose. Exception: ID [ComputePathToPose] already registered
原因是 Humble 配置在 plugin_lib_names 中手動列出了 Nav2 內置 BT 插件,而 Jazzy 已經自動加載這些內置插件,導致 ComputePathToPose 被重複註冊。
使用方式
重新構建並 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
已驗證
已執行:
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。