使用Gazebo已经快20年了,最近5年,也就是2020-2024特别困惑,为何呢?
接口变化太快,而且相互不兼容……
- libgazebo→
- gazebo-ros-pkgs→
- ros-ign→
- ros-gz→
当然,现在2024年8月之后已经趋于稳定,丝滑过渡到新版。
ros-jazzy-ros-gz is already the newest version (1.0.3-1noble.20240731.183524).
(Gazebo Harmonic)
Gazebo Harmonic 和 ROS2 jazzy 安装和测试
Gazebo之P/S/G阶段
早期2010年左右的gazebo效果是这样的。
接口使用:libgazebo
Gazebo 3D多机器人动力学模拟器详细总结
一、概述
Gazebo是一款针对户外环境的3D多机器人模拟器,它能够在三维世界中模拟机器人、传感器和物体的动态交互。与Stage类似,Gazebo也能模拟大量的机器人,但不同之处在于它提供了更为逼真的传感器反馈和物体间的物理交互模拟(包括精确的刚体物理模拟)。
二、主要特点
- 传感器模拟:
- 支持多种标准机器人传感器模拟,如声纳、扫描激光雷达、GPS、IMU(惯性测量单元)、单目和立体相机等。
- 机器人模型:
- 提供多种常用机器人类型的模型,如Pioneer2DX、Pioneer2AT和SegwayRMP等。
- 刚体物理模拟:
- 实现了逼真的刚体物理模拟,机器人可以推动物体、拿起物品,并以合理的方式与世界交互。
- Player兼容性:
- 机器人和传感器可以通过标准的Player接口进行控制,使得基于Player编写的客户端程序可以轻松地在Gazebo上运行。
- 独立操作:
- 提供了libgazebo库,允许程序直接与模拟器交互,而无需通过Player。
- 新特性:
- 立体相机模型:生成立体图像对、视差图和深度图。
- 重新编写的GUI:使用wxPython,大多数设备现在可以直接通过模拟器的GUI进行控制/检查。
- 插件模型:用户可以开发自己的机器人/传感器模型,并在运行时动态加载这些模型。
- 皮肤:简单的几何模型可以通过3D建模程序添加逼真的“皮肤”。
三、软件许可
Gazebo是免费软件,遵循GNU Public License发布。用户可以自由使用、扩展和修改Gazebo以满足自己的需求,但开发者鼓励用户提交修改后的代码(补丁)。
四、下载与安装
Gazebo可以从SourceForge的下载页面获取。
五、与Stage的比较
- Player/Stage项目提供了两个多机器人模拟器:Stage和Gazebo。两者都兼容Player,因此基于一个模拟器编写的客户端程序通常可以在另一个上运行,而无需或仅需少量修改。
- 主要区别:Stage设计用于模拟大量机器人但保真度较低,而Gazebo则专注于模拟少量机器人但保真度较高。这两个模拟器互补,用户可以根据需要切换使用。
六、总结
Gazebo是一款功能强大的3D多机器人模拟器,它通过逼真的物理模拟和传感器反馈,为机器人研究和开发提供了强大的支持。其灵活的插件系统和用户友好的GUI进一步增强了其易用性和可扩展性。无论是进行机器人算法研究还是开发新的机器人应用,Gazebo都是一个值得推荐的工具。
Gazebo经典版之ROS1/ROS2接口
接口:gazebo-ros-pkgs
2016:Gazebo與ROS版本說明
2019:Gazebo和ROS2的使用说明(部分翻译)
2020:系列(一)
使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)
Gazebo9之后技术稳定,但……↓
但是,这个版本只是支持到Gazebo11,后续版本不兼容。
ROS1-Noetic,ROS2-humble
于是,此教程必须停更,未来Gazebo不会继续沿用相关技术。
gazebo_ros_pkgs 简要中文总结
gazebo_ros_pkgs
是一组ROS包,它们为在Gazebo 3D刚体机器人模拟器中模拟机器人提供了必要的接口。这些包通过ROS消息、服务和动态重配置与ROS系统集成,使得在ROS环境中使用Gazebo进行机器人仿真变得更加方便和高效。
主要功能特点:
- 利用现有的ROS标准插件:
gazebo_ros_pkgs
能够利用ROS社区中已有的标准插件,这些插件为Gazebo提供了丰富的功能扩展。 - 增强ros_control控制器的开箱即用支持:改进了对
ros_control
的支持,使得在Gazebo中模拟机器人时能够更方便地配置和使用控制器。 - 多种模拟传感器可用:提供了多种模拟传感器,如激光雷达、摄像头等,这些传感器可以直接在Gazebo环境中使用,无需额外配置。
Gazebo支持版本:
- ROS的每个主要版本(如ROS Kinetic/Lunar中的Gazebo 7.x系列)在ROS发布周期开始时选定,并在整个ROS分发版的生命周期内保持不变(出于二进制兼容性的原因)。
- ROS Melodic使用的是Gazebo 9.x系列,这个版本带来了许多新特性和改进。
Gazebo 9.x的新特性包括:
- 改进的图形模型编辑器
- 车辆和城市仿真
- 绘图工具
- 视觉标记
- 角色动画的泛化
- 并行物理引擎(ODE中的线程岛)
从之前版本的ROS迁移:
- 迁移到新的ROS版本可能需要调整代码,因为每个ROS版本都伴随着新的Gazebo主版本。这主要涉及对Gazebo第三方代码(尤其是插件)的更新和适配。请参考Gazebo的迁移文档进行相应调整。
总之,gazebo_ros_pkgs
为在ROS环境下使用Gazebo进行机器人仿真提供了强大的支持和丰富的功能,而Gazebo 9.x的引入则进一步提升了仿真的真实性和效率。
Gazebo过渡版之ROS1/ROS2接口
接口:ros-ign
2020:Ignition Robotics和ROS2 Foxy简明使用说明(ros_ign)
2021:Ignition Gazebo Fortress LTS试用
此部分没有更新,考虑时间成本高,并且后续肯定不会采用。
ROS与Ignition的集成
ROS(Robot Operating System)和Ignition是机器人领域两个重要的开源平台,它们之间的集成通过一系列软件包实现,以便在仿真环境中更高效地开发、测试和部署机器人应用。下面结合资料对ROS与Ignition的集成进行扩展说明:
一、集成软件包概述
- ros_ign: 这是一个元软件包(Metapackage),它提供了所有其他用于ROS和Ignition集成的软件包的集合。元软件包本身不包含代码,但它列出了所有相关的软件包,使得用户能够方便地安装和管理这些软件包。
- ros_ign_image: 这个软件包提供了一个传输桥接,用于将Ignition仿真环境中的图像数据通过
image_transport
机制传输到ROS系统中。这对于需要处理图像数据的机器人应用尤为重要。 - ros_ign_bridge: 这个软件包是ROS和Ignition之间的双向传输桥接。它允许ROS和Ignition之间的消息、服务和操作等数据的自由交换,从而实现了两个系统之间的无缝集成。
- ros_ign_gazebo_demos: 这个软件包包含了一系列使用ROS和Ignition集成的演示示例。这些演示展示了如何在Ignition Gazebo仿真环境中运行ROS应用,并展示了集成的实际效果。
- ros_ign_point_cloud: 这个软件包提供了一系列插件,用于将从Ignition Gazebo仿真环境中生成的点云数据发布到ROS系统中。这对于需要处理点云数据的机器人应用(如SLAM、路径规划等)非常有用。
二、Ignition Gazebo简介
Ignition Gazebo是Gazebo仿真器的下一代版本,它提供了更先进的特性、更现代化的架构和更强大的仿真能力。Ignition Gazebo旨在提供更细粒度的控制以及更适合大型复杂仿真场景的特性。它基于插件的物理和渲染抽象,使得用户可以使用自己选择的引擎而无需重新编译仿真仿真器。此外,Ignition Gazebo还支持分布式仿真、高度可定制的用户界面等特性。
三、ROS与Ignition集成的优势
- 无缝集成:通过ros_ign系列软件包,ROS和Ignition实现了无缝集成,使得用户可以在两个平台之间自由交换数据。
- 高效开发:集成后的环境为机器人应用的开发提供了更高效的平台。开发者可以在Ignition Gazebo仿真环境中快速迭代更新机器人物理设计,并在ROS中测试控制策略。
- 丰富功能:Ignition Gazebo提供了丰富的仿真功能,包括多种传感器模型、图形界面、模型处理等。这些功能通过ROS接口暴露出来,使得ROS应用能够充分利用Ignition Gazebo的强大能力。
四、使用场景
ROS与Ignition的集成适用于多种机器人应用场景,包括但不限于:
- 机器人仿真测试:在Ignition Gazebo中构建复杂的仿真环境,通过ROS接口与机器人应用进行交互测试。
- 机器人算法验证:在仿真环境中验证机器人的路径规划、SLAM等算法,以减少在真实环境中的测试成本和时间。
- 机器人竞赛:在机器人竞赛中利用Ignition Gazebo进行虚拟竞赛,提高竞赛的效率和安全性。
综上所述,ROS与Ignition的集成通过一系列软件包实现了两个平台之间的无缝连接和数据交换,为机器人应用的开发、测试和部署提供了更高效、更灵活的平台。
2022-2023留白
ign gazebo和Harmonic 系列差异
gz sim shapes.sdf # Fortress and Citadel use "ign gazebo" instead of "gz sim"
Gazebo稳定版之ROS1/ROS2接口
ROS1官宣停更,Gazebo后续接口只有ROS2比较好用。
接口:ros-gz系列
2024:Gazebo Harmonic 和 ROS2 jazzy 安装和测试
ros_gz_project_template使用笔记①配置(Gazebo Harmonic ROS2 Jazzy
支持ROS1 noetic和ROS2 jazzy,旧版本支持度也还不错。
最新版的版本号(2024-8-23):
ros-jazzy-ros-gz is already the newest version (1.0.3-1noble.20240731.183524).
ros2@ros2-aspire4741:~$ sudo apt install ros-jazzy-ros-gz
ros-jazzy-ros-gz ros-jazzy-ros-gz-image-dbgsym ros-jazzy-ros-gz-sim-dbgsym
ros-jazzy-ros-gz-bridge ros-jazzy-ros-gz-interfaces ros-jazzy-ros-gz-sim-demos
ros-jazzy-ros-gz-bridge-dbgsym ros-jazzy-ros-gz-interfaces-dbgsym
ros-jazzy-ros-gz-image ros-jazzy-ros-gz-sim
ros2@ros2-aspire4741:~$ sudo apt install ros-jazzy-ros-gz
[sudo] password for ros2:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ros-jazzy-ros-gz is already the newest version (1.0.3-1noble.20240731.183524).
0 upgraded, 0 newly installed, 0 to remove and 28 not upgraded.
经典版Gazebo 11
过渡版Ignition Gazebo
稳定版趋势版Gazebo Harmonic
gz-sim + ros_gz
ROS 2 与 Gazebo 集成概述
ROS 2 与 Gazebo 版本兼容性
ROS 2 和 Gazebo 的不同版本之间有不同的集成支持和二进制包可用性。以下是一些关键版本的兼容性信息:
- Foxy:与 Citadel 版本的 Gazebo 集成,二进制包托管在 https://packages.ros.org。与 Edifice 版本的 Gazebo 集成仅支持从源代码编译。
- Galactic:与 Edifice 和 Fortress 版本的 Gazebo 集成,其中 Edifice 版本的二进制包托管在 https://packages.ros.org,而 Fortress 版本仅支持从源代码编译。
- Humble:与 Fortress、Garden 和 Harmonic 版本的 Gazebo 集成,其中 Fortress 版本的二进制包托管在 https://packages.ros.org,而 Garden 和 Harmonic 版本则通过特定的 gazebo packages 托管,或仅支持从源代码编译。
- Iron:与 Fortress、Garden 和 Harmonic 版本的 Gazebo 集成,但主要支持从源代码编译。
- Jazzy(计划于 2024 年 5 月 23 日发布):与 Garden 和 Harmonic 版本的 Gazebo 集成,其中 Harmonic 版本的二进制包托管在 https://packages.ros.org,而 Garden 版本仅支持从源代码编译。
- Rolling:与 Fortress、Garden 和 Harmonic 版本的 Gazebo 集成,其中 Fortress 版本的二进制包托管在 https://packages.ros.org,而 Garden 和 Harmonic 版本仅支持从源代码编译。
ROS 与 Gazebo 集成软件包
此仓库包含一系列软件包,用于在 ROS 和 Gazebo 之间提供集成:
- ros_gz:元软件包,提供所有其他相关软件包。
- ros_gz_image:单向传输桥,用于将 Gazebo 仿真中的图像数据通过
image_transport
传输到 ROS。 - ros_gz_bridge:双向传输桥,允许 ROS 和 Gazebo 之间的消息、服务和操作等数据的自由交换。
- ros_gz_sim:提供方便的启动文件和可执行文件,用于将 Gazebo 仿真与 ROS 结合使用。
- ros_gz_sim_demos:包含使用 ROS-Gazebo 集成的演示示例。
- ros_gz_point_cloud:插件,用于将从 Gazebo 仿真中生成的点云数据发布到 ROS。
安装说明
- 二进制安装(针对 Rolling 版本的 Fortress):
- 添加 ROS 2 Rolling 的 apt 仓库。
- 使用
apt
安装ros-rolling-ros-gz
。
- 从源代码编译:
- 安装 ROS Rolling(至少包含 ROS-Base)。
- 安装 Gazebo(Edifice、Fortress 或 Garden 版本),并设置
GZ_VERSION
环境变量。 - 克隆
ros_gz
仓库并安装依赖项(使用rosdep
)。 - 使用
colcon
构建工作区。
注意事项
- 内存使用:
ros_gz
库大量使用模板,可能导致编译器消耗大量内存。如果构建失败,可以尝试减少并行工作数或限制单个包构建时使用的处理器数量。
命名变更
- 从
ign
到gz
的重命名过程正在进行中。ros_ign
前缀的包是重定向到ros_gz
对应包的 shim 包。在大多数情况下,应使用ros_gz
对应的包。
额外信息
- ROS 1 和 Gazebo 的兼容性信息请参考 noetic 分支的 README。
- 如果需要支持某些特定的 ROS 和 Gazebo 版本组合,请提交问题。