7. Gazebo 与 ROS 集成

本文描述通过外部包 autonomy_rosautonomy_gazebo 进行物理仿真与传感器仿真的集成方式。

这些包不在autonomy 仓库内,但为官方推荐的完整仿真路径。


7.1 架构

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   Gazebo    │────→│ autonomy_ros │────→│  Autonomy   │
│  (physics)  │←────│   (bridge)   │←────│  (C++ 栈)   │
└─────────────┘     └──────────────┘     └─────────────┘
     │                      │
  /scan, /odom          cmd_vel, TF
  /camera, /clock

7.2 环境准备

export GLOG_logtostderr=1
export AUTOLINK_PATH=/workspace/autonomy/src/autonomy/autolink/autolink
export AUTONOMY_MODEL=waffle

source /opt/ros/humble/setup.bash
source /workspace/autonomy/install/setup.bash

Docker 安装 Gazebo ROS 包见 docker/install/install_ros2.shgazebo-ros, turtlebot3-gazebo 等)。


7.3 启动命令

7.3.1 一体化启动

ros2 launch autonomy_ros autonomy.launch.py \
  use_gazebo:=true \
  world_type:=house \
  use_sim_time:=true

7.3.2 独立 Gazebo

ros2 launch autonomy_gazebo empty_world.launch.py gui:=true spawn_robot:=true
ros2 launch autonomy_gazebo autonomy_house.launch.py gui:=true spawn_robot:=true

7.4 Launch 参数

参数

默认

说明

use_sim_time

true

订阅 /clock,与 Gazebo 同步

use_gazebo

false

是否 spawn Gazebo 世界

world_type

house

house / world

x_pose, y_pose

-2.0, -0.5

机器人初始位姿

gui

true

Gazebo GUI

spawn_robot

true

是否生成机器人模型


7.5 Topic 与数据流

Topic

方向

说明

/cmd_vel

Autonomy → Gazebo

速度控制

/odom

Gazebo → Autonomy

里程计

/scan

Gazebo → Autonomy

激光,注入 costmap

/clock

Gazebo → ROS

仿真时间

TF map→odom→base_link

双向

位姿变换

config/planner/planner.lua 注释:激光经 autonomy_ros /scan bridge 注入 obstacle_layer。


7.6 costmap 与仿真对齐

  • base_footprint / base_link 与 Gazebo 机器人 URDF 一致

  • global_frame 通常为 map

  • use_sim_time:=true 时,所有节点使用仿真时钟


7.7 与 nav_test 的对比

维度

nav_test

Gazebo + ROS

依赖

无 ROS

ROS2 + Gazebo

物理

运动学积分

物理引擎

传感器

激光、相机、IMU

动态障碍

可扩展

CI 友好

较重

调试可视化

日志

RViz + Gazebo GUI


7.8 故障排查

现象

处理

机器人不动

检查 /cmd_vel 是否发布;Gazebo 插件是否加载

无激光

确认 /scan topic;bridge 配置

TF 断裂

ros2 run tf2_tools view_frames 检查树

时间不同步

确保 use_sim_time:=true/clock 发布


7.9 延伸阅读