Gazebo 仿真

使用 Gazebo Harmonic 物理仿真运行机器人演示。

前提条件

  • 工作空间已编译

  • 已安装 Gazebo Harmonic 相关软件包

安装 Gazebo

sudo apt install ros-jazzy-gz-*

步骤

1. Source Workspace

在 ./init_repo.sh 和 colcon build 之后,从工作区根目录:

source install/setup.bash

2. Launch with Gazebo

hardware:=gz 将 xacro ros2_control_hardware_type 设为 gz,并将 gazebo 设为 true(build_xacro_mappings())。ocs2_arm README:安装 ros-jazzy-ros-gz 和 ros-jazzy-gz-ros2-control。

ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz

Acone xacro 在此键下的插件:gz_ros2_control/GazeboSimSystem。gz 是 launch 键,不是厂商驱动层包 — 驱动层。

3. Interact

FSM:/fsm_command(std_msgs/Int32)。不要发布 /target_pose。见 FSM 与话题。

启动选项

# Acone (dual-arm, not Lift 2S)
ros2 launch ocs2_arm_controller demo.launch.py robot:=arx_acone hardware:=gz

demo.launch.py 声明了 world(默认 dart)。它没有声明 rviz:=false 或 headless:=true。

Gazebo 功能

物理调参

默认物理参数适用于大多数机器人。如需自定义调参,请修改描述软件包中的 SDF 文件。

世界文件

demo.launch.py 声明了 world(默认 dart)。只用当前描述 / launch 里存在的 world 键。

录制

录制仿真以便回放:

gz service -s /world/default/control \
  --reqtype gz.msgs.WorldControl \
  --reptype gz.msgs.Boolean \
  --timeout 3000 \
  --req 'pause: false'

Mock 与 Gazebo 对比

方面

Mock

Gazebo

物理

无

完整仿真

速度

实时

可配置

碰撞

否

是

传感器

占位

仿真

资源占用

低

中高

控制器开发使用 mock,行为测试使用 Gazebo。

验证

  • Gazebo 窗口中显示环境里的机器人

  • 机器人响应 ROS 2 指令

  • 物理交互(碰撞、重力)正常工作

故障排除

Gazebo 启动时崩溃

# Check GPU drivers
nvidia-smi

# Try software rendering
export LIBGL_ALWAYS_SOFTWARE=1
ros2 launch ocs2_arm_controller demo.launch.py hardware:=gz

机器人掉穿地面

确认世界文件包含地面平面。

控制器未启动

等待 Gazebo 完全初始化后再发送指令。检查是否有控制器生成失败的错误信息。

CPU 占用过高

降低物理更新频率,或使用无界面模式运行:

渲染设置见 Gazebo / ros-jazzy-ros-gz 文档。此 launch 文件没有记录 headless:= 参数。