# Ubuntu 22.04(会与Garden冲突)
$ sudo apt install ros-humble-gazebo-ros-pkgs
# Test
# 加载模型
$ gazebo --verbose /opt/ros/humble/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
# 触发行进
$ ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 1.0}}' -1
# 导入模型~/.gazebo/model
$ wget -c https://github.com/osrf/gazebo_models/archive/refs/heads/master.zip
- 对应的版本:
ROS version | Gazebo version |
---|---|
Ubuntu18.04 Melodic | Gazebo 9.x |
Ubuntu20.04 Noetic | Gazebo 11.11.0 |
Foxy | Gazebo 11.x |
Ubuntu22.04 Rolling | Gazebo 11.10.2 |
# >>> Install >>>
# 仅适用于Ubuntu20.04 和 Ubuntu22.04
$ sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install gz-garden
# >>> Uninstall >>>
$ sudo apt remove gz-garden && sudo apt autoremove
🔧 用例 1: 相关的环境变量配置
# 插件的环境变量
$ export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:<插件位置>
# 可作为sdf中<uri>model://<...></uri>的相对路径
$ export GAZEBO_MODEL_PATH=<模型位置>
文件格式 | 编辑或可视化工具 | 备注 |
---|---|---|
URDF | rviz, vscode, foxyglove | 用于表示单个模型 |
xacro | rviz, foxyglove | 用于表示模型,使用时需要转换为URDF格式 |
.stl | Open3D | STL 文件(只含单一颜色) |
.dae | Blender | Collada 文件(含纹理,颜色) |
.sdf / .world | gazebo | 用于描述多个模型(插件、传感器文件)+ 表示世界;不适用于 ROS |
🔧 用例 1: 用 Gazebo 打开 .world 文件(即 sdf 格式的文件)(CLI)
SDF(Simulation Description Format),专属于 Gazebo 的格式,相关标签信息可参考 [Here](http://sdformat.org/spec?ver=1.11&elem=link)# 方案 1:
(ROS) $ gazebo <.world>
# 方案 2:
(ROS) $ rosrun gazebo_ros gazebo TD3.world
# 方案 3:
(ROS) $ gzserver # 无图形化界面
(ROS) $ gzclient # 追加图形化界面
# -u: 以暂停模式打开
# 方案 4:
(ROS1) $ roslaunch gazebo_ros empty_world.launch
🔧 用例 2: 验证当前的 URDF 文件是否合法,合法时输出对应的 sdf 文件
方案 1:
$ gz sdf -p <URDF 文件>
方案 2:(纯粹检查 URDF 的合法性)
# sudo apt install liburdfdom-tools
$ check_urdf calibration.urdf
🔧 用例 3: 将 Xacro 文件转换为 URDF 文件,含语法检查
# for Melodic
$ xacro --inorder model.xacro > model.urdf
# for Noetic+
$ xacro model.xacro > model.urdf
🔧 用例 1: 修改 world 的物理量:界面背景色和自然光
🔧 用例 2: 在 Gazebo 中实现模型建模
🔧 用例 3: 设置模块不受重力影响
方案 1:设置所有模块不受影响
<gazebo>
<static>true</static>
</gazebo>
方案 2:绑定到 world 坐标系
<link name="world"/>
<joint name="world_joint" type="fixed">
<origin xyz="2 0 1.5" rpy="0 0 0"/>
<parent link="world"/>
<child link="子link"/>
</joint>
🔧 用例 4: 指定 Gazebo 模型的颜色
<gazebo reference="link1">
<material>Gazebo/Orange</material>
</gazebo>
🔧 用例 5: Gazebo 中的模型偏暗
去除 Shadow 属性
🔧 用例 6: 使用 Gazebo 搭建虚拟场景
Edit | Building Editor(或 CTRL+B)
🔧 用例 7: 搭建差速模型插件
TODO
🔧 用例 9: 使用 Orge Material Script 进行贴图
🔧 用例 1: 可视化 Xacro 和 URDF 文件(Launch)
<!-- for Xacro-->
<param name="robot_description" command="xacro 'xacro文件名'"/>
<!-- for URDF-->
<param name="robot_description" textfile="urdf文件名"/>
🔧 用例 2: 在 WEB 端查看 URDF 文件(Mymodelrobot)
🔧 用例 3: 使用 Foxyglove 查看 URDF 文件
https://foxglove.dev/docs/studio/panels/3d#add-unified-robot-description-format-urdf
# >>> Install >>>
$ wget -c https://github.com/foxglove/studio/releases/download/v1.39.0/foxglove-studio-1.39.0-linux-amd64.deb
$ sudo dpkg -i foxglove-studio-1.39.0-linux-amd64.deb
🔧 用例 5: 使用 RViz 可视化 URDF 文件
[!note]
若是 XACRO 生成的文件,需要删除顶部的注释,否则会影响发布的主题 /robot_description 具体原因未知
(ROS1) $ rosrun robot_state_publisher robot_state_publisher <URDF 文件>
(ROS2) $ ros2 run robot_state_publisher robot_state_publisher <URDF 文件名>
对于 ROS1 RVIZ launch(需 TF + Link + 时钟源正确才能显示)
<launch>
<param name="/use_sim_time" value="false"/>
<!-- Load the URDF into the ROS Parameter Server -->
<param name="robot_description" command="$(find xacro)/xacro 'calibration.urdf'"/>
<!-- 启动Gazebo -->
<node name="gazebo" pkg="gazebo_ros" type="gazebo" respawn="false" output="screen"/>
<!-- 导入相机模型 -->
<node name="d435i_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model realsense_d435i -param robot_description"/>
<!-- 发布TF -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"/>
</launch>
具体参考 Here
插件 | 备注 |
---|---|
model plugin | 需要 robot 根标签和 gazebo 子标签 |
sensor plugin | 需要提供 robot 标签,link,gazebo 子标签 |
🔧 用例 1: 使用 libgazebo_ros_camera 插件如何获取相机的内参?
(ROS1) $ rostopic echo camera_info
🔧 用例 2: 如何检查插件是否成功导入
启动 gazebo 时,追加 --verbose 选项
🔧 用例 2: 在 Docker 中启动 Gazebo
实测 VNC 下无效,使用 host 的 XServer 则有效
$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia gazebo
🔧 用例 1: 常用命令行
# 追加模型,启动后含格式检测
# 启动含服务的gazebo
(ROS1) $ rosrun gazebo_ros gazebo
(ROS1) $ rosrun gazebo_ros spawn_model -file <文件名> -sdf -model <模型名> -y 1
# 启动含服务的gazebo
(ROS2) $ gazebo --verbose -s libgazebo_ros_factory.so
(ROS2) $ ros2 run gazebo_ros spawn_entity.py -file <文件名> -entity <模型名> -topic /robot_description
🔧 用例 2: ROS 主题和服务
服务名 | 服务类型 | 作用 |
---|---|---|
/gazebo/pause_physics | std_srvs/Empty | 暂停物理引擎的更新(物理运动如物体移动)会暂停,仿真时间也会停止。特别适合需要在静止环境中进行观察。 |
/gazebo/unpause_physics | std_srvs/Empty | 恢复物理引擎的更新 |
/gazebo/reset_simulation | std_srvs/Empty | 重置模型的位置、状态、仿真时间) |
/gazebo/reset_world | std_srvs/Empty | 重置模型的位置和状态,但不会重置仿真时间 |
/gazebo/set_model_state | gazebo/SetModelState | 重置模型的位置 |
主题名 | 主题类型 | 作用 |
---|---|---|
/gazebo/set_model_state | gazebo_msgs/ModelState | 重置模型的位置 |
rospy.ServiceProxy("/gazebo/unpause_physics", Empty)
rospy.wait_for_service("/gazebo/unpause_physics")
try:
rospy.ServiceProxy("/gazebo/unpause_physics", Empty)
except (rospy.ServiceException) as e:
print("/gazebo/unpause_physics service call failed")
🔧 用例 4: world to grid_map
通过基于栅格的判断该区域是否可行,来取代之前的 if else 判断,用于强化学习中判断某个区域是否可行
# 实测,可直接使用
# 安装相关依赖
$ apt install ros-${ROS_DISTRO}-move-base ros-${ROS_DISTRO}-map-server
$ git clone https://github.com/marinaKollmitz/gazebo_ros_2Dmap_plugin
$ catkin build
$ rosservice call /gazebo_2Dmap_plugin/generate_map
$ rosrun map_server map_saver -f <map_name> /map:=/map2d
相似的还有 Eric_Pxz 提供的插件,具体参考 Here
🔧 用例 5: grid_map to world
🔧 用例 6: gazebo to height map (for ROS2)
🔧 用例 7: pointcloud to world
❓ 问题 1: 为什么有的物体在 Gazebo 中无法被激光雷达扫描?
该物体没有 collision 标签
❓ 问题 2: Gazebo 启动后黑屏,加载时间过长
检查 .world
文件是否有不存在的资源。其中,基础模型可以在 GitHub 下载如:
$ git clone https://github.com/osrf/gazebo_models.git --depth=1 ~/.gazebo/models
❓ 问题 3: origin 所表示的含义
摘要 | Gazebo Sim | Gazebo-classic |
---|---|---|
官方文档 | https://gazebosim.org/home | https://classic.gazebosim.org/ |