第 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,然後拿這個功能包進行改動.

  1. 將功能包名保持為 mycar_navigation2_jazzy,並在相關位置補充修改邊界註釋。
    • package.xml
    • CMakeLists.txt
  2. _jazzy 包內 launch 文件的包路徑查詢保持為 mycar_navigation2_jazzy,並補充修改邊界註釋。
    • launch/nav2.launch.py
    • launch/bringup.launch.py
    • launch/auto_slam.launch.py
  3. 對照 Jazzy 官方 bt_navigator 示例更新 params/bt.yaml
    • 刪除 Humble 時代列出的 Nav2 內置 BT 插件列表。
    • Jazzy 會自動加載 Nav2 內置 BT 插件,plugin_lib_names 只保留自定義 BT 插件。
    • 沒有自定義 BT 插件時不傳 plugin_lib_names,避免空列表被解析成無類型參數。
    • 新增 navigatorsnavigate_to_posenavigate_through_poses
    • 新增 error_code_names,用於配合 Jazzy 官方行為樹裏的 error code blackboard 變量。
  4. 對照 Jazzy 官方 pluginlib 類名更新 planner 和 behavior 插件。
    • nav2_navfn_planner/NavfnPlanner 改為 nav2_navfn_planner::NavfnPlanner
    • nav2_behaviors/Spin 等改為 nav2_behaviors::Spin
  5. 對照 Jazzy 官方行為樹更新自定義 BT XML。
    • 添加 BTCPP_format="4"
    • 添加 PlannerSelectorControllerSelector
    • ComputePathToPoseComputePathThroughPosesFollowPath 添加 error_code_id
    • 添加 WouldAPlannerRecoveryHelpWouldAControllerRecoveryHelp
  6. 對照 Jazzy 官方 controller 參數名更新進度檢查器參數。
    • progress_checker_plugin 改為 progress_checker_plugins: ["progress_checker"]
  7. 整理 planner/controller 參數文件的 YAML 結構。
    • 將重複的 /** 頂層鍵合併成一個。
    • global_costmaplocal_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_posenavigate_through_poses
  • planner_server 成功加載 nav2_navfn_planner::NavfnPlanner
  • controller_server 成功加載 DWB 和所有 critics。
  • behavior_server 成功加載 nav2_behaviors::... 插件。
  • 在沒有 Gazebo/robot_state_publisher/TF 的短啓動環境裏,最後停在等待 base_link -> map TF,這是預期的運行環境缺失,不是配置 fatal。
音乐页