基于 ROS 2 Jazzy + Nav2 + Gazebo Harmonic + AMCL 的移动机器人自主导航仿真项目。
该项目在官方 nav2_bringup / nav2_minimal_tb3_sim 最小示例基础上完成了独立封装,支持:
- 一键启动导航仿真
- 地图加载与 AMCL 定位
- 目标点导航与 RViz 可视化
- 多目标点自动发送
- 导航评估与 CSV 结果导出
mobile_nav_sim/
├── config/
│ ├── goals.yaml
│ └── nav2_params.yaml
├── launch/
│ ├── localization.launch.py
│ ├── navigation.launch.py
│ └── sim.launch.py
├── maps/
├── results/
├── rviz/
│ └── nav2_default_view.rviz
├── scripts/
│ ├── eval_nav.py
│ └── send_goals.py
├── worlds/
├── package.xml
├── README.md
└── setup.py
- Ubuntu 24.04
- ROS 2 Jazzy
- nav2_bringup
- nav2_minimal_tb3_sim
- Gazebo Harmonic
cd ~/nav2_sim_ws
source /opt/ros/jazzy/setup.bash
colcon build
source install/setup.bash推荐使用官方 TB3 地图、世界和机器人模型显式启动:
source ~/nav2_sim_ws/install/setup.bash
MAP_FILE=/opt/ros/jazzy/share/nav2_bringup/maps/tb3_sandbox.yaml
WORLD_FILE=/opt/ros/jazzy/share/nav2_minimal_tb3_sim/worlds/tb3_sandbox.sdf.xacro
ROBOT_SDF=/opt/ros/jazzy/share/nav2_minimal_tb3_sim/urdf/gz_waffle.sdf.xacro
ros2 launch mobile_nav_sim sim.launch.py \
headless:=False \
map:=$MAP_FILE \
world:=$WORLD_FILE \
robot_sdf:=$ROBOT_SDF \
robot_name:=turtlebot3_waffle启动后,RViz 中可进行:
2D Pose EstimateNav2 Goal- 观察规划路径、转向和到达效果
source ~/nav2_sim_ws/install/setup.bash
ros2 launch mobile_nav_sim localization.launch.pysource ~/nav2_sim_ws/install/setup.bash
ros2 launch mobile_nav_sim navigation.launch.py目标点配置文件:config/goals.yaml
示例:
goals:
- {x: -1.90, y: -0.50, yaw: 0.00}
- {x: -1.70, y: -0.35, yaw: 0.00}
- {x: -1.45, y: -0.15, yaw: 0.50}执行自动目标点发送:
source ~/nav2_sim_ws/install/setup.bash
python3 ~/nav2_sim_ws/src/mobile_nav_sim/scripts/send_goals.py指定目标文件:
source ~/nav2_sim_ws/install/setup.bash
python3 ~/nav2_sim_ws/src/mobile_nav_sim/scripts/send_goals.py \
--goal-file ~/nav2_sim_ws/src/mobile_nav_sim/config/goals.yamleval_nav.py 支持:
- 自动发布初始位姿
- 顺序执行多个目标点
- 记录成功/失败、状态码、耗时、路径长度
- 输出到
results/*.csv
运行:
source ~/nav2_sim_ws/install/setup.bash
python3 ~/nav2_sim_ws/src/mobile_nav_sim/scripts/eval_nav.py \
--set-initial-pose \
--init-x -2.0 \
--init-y -0.5 \
--init-yaw 0.0指定输出文件:
source ~/nav2_sim_ws/install/setup.bash
python3 ~/nav2_sim_ws/src/mobile_nav_sim/scripts/eval_nav.py \
--set-initial-pose \
--init-x -2.0 \
--init-y -0.5 \
--init-yaw 0.0 \
--output ~/nav2_sim_ws/src/mobile_nav_sim/results/run1.csv查看结果:
cd ~/nav2_sim_ws/src/mobile_nav_sim
ls results
cat results/*.csvCSV 字段示例:
goal_idx, y, yawsuccessstatusstatus_texttime_secpath_length
source ~/nav2_sim_ws/install/setup.bash
ros2 topic list | egrep '/scan|/odom|/tf|/robot_description|/map|/cmd_vel'source ~/nav2_sim_ws/install/setup.bash
ros2 topic echo /amcl_pose --oncesource ~/nav2_sim_ws/install/setup.bash
ros2 action info /navigate_to_pose- 基于 ROS 2 Jazzy、Nav2、Gazebo 与 AMCL 完成导航仿真闭环
- 独立封装
mobile_nav_sim工程包,支持 launch 一键启动 - 支持目标点批量测试,而非仅手动点击 RViz
- 支持导航结果评估与 CSV 导出,便于复现与分析
- 已完成从官方最小示例到自有工程结构的迁移
- 自定义地图与世界文件
- 多组参数对照实验
- 恢复行为统计
- 动态障碍物场景验证
- 更复杂场景下的自动评估