第 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。