第一阶段:环境清理与通信重置
在正式开始前,确保没有残留进程干扰 DDS 通信。

Bash
# 清理可能残余的节点
pkill -9 planner_server; pkill -9 map_server; pkill -9 lifecycle_manager
# 重置 ROS 2 后台守护进程
ros2 daemon stop && ros2 daemon start
第二阶段:启动核心组件(分窗口执行)
窗口 1:建立坐标系 (TF)
由于演示通常不带物理底盘,我们需要手动发布静态坐标变换,让系统知道“地图”在哪里。

Bash
source /opt/ros/humble/setup.bash
# 发布 map -> odom -> base_link 的 0 偏移变换
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 map odom &
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 odom base_link
窗口 2:启动地图与规划器
加载 TurtleBot3 的标准地图,并指定使用 A*(SmacPlanner2D)插件。

Bash
source /opt/ros/humble/setup.bash
# 1. 启动地图服务器 (确保路径正确)
ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=/opt/ros/humble/share/nav2_bringup/maps/turtlebot3_world.yaml -p use_sim_time:=false &

# 2. 启动规划器服务器 (指定 GridBased 插件为 SmacPlanner2D)
ros2 run nav2_planner planner_server --ros-args \
    -p expected_planner_frequency:=20.0 \
    -p planner_plugins:=['GridBased'] \
    -p GridBased.plugin:='nav2_smac_planner/SmacPlanner2D' \
    -p use_sim_time:=false
窗口 3:节点状态激活 (Lifecycle)
Nav2 节点启动后默认是“待机”状态,需要 Lifecycle Manager 统一“点火”。

Bash
source /opt/ros/humble/setup.bash
ros2 run nav2_lifecycle_manager lifecycle_manager --ros-args \
    -p node_names:="['map_server','planner_server']" \
    -p autostart:=true
演示重点:当该窗口输出 Managed nodes are active 时,说明 A* 引擎已就绪。

第三阶段:可视化与任务下发
窗口 4:可视化 (RViz 2)
Bash
rviz2
配置项:

Fixed Frame: 改为 map。

Add Map: Topic 选 /map,Durability Policy 选 Transient Local。

Add Path: Topic 选 /plan,Style 选 Billboards。

窗口 5:下发 A 规划指令*
这是最核心的一步。我们避开中心障碍物,让它算一条绕行路径。

Bash
source /opt/ros/humble/setup.bash

ros2 action send_goal /compute_path_to_pose nav2_msgs/action/ComputePathToPose "{
  goal: {header: {frame_id: 'map'}, pose: {position: {x: 1.5, y: -1.5, z: 0.0}, orientation: {w: 1.0}}},
  start: {header: {frame_id: 'map'}, pose: {position: {x: -1.5, y: 1.5, z: 0.0}, orientation: {w: 1.0}}},
  planner_id: 'GridBased',
  use_start: true
}"

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐