Gazebo Ignition is a long-term support release and a successor to Gazebo Classic, with Gazebo 11 being the last classic release. Over the last 8 years, Open Robotics has been working on a successor, which was earlier referred to as “Ignition” but has since been renamed to Gazebo, while the previous version is now called Gazebo Classic. At Black Coffee Robotics we have been working extensively with gz-classic to develop a wide spectrum of autonomous robot applications. (We will refer to Ignition and Classic variants of Gazebo as gz-sim and gz-classic respectively)
Over time, we have faced some problems with gz-classic, particularly concerning rendering, stability, and computation. A switch to gz-sim seemed promising, as well as mandatory, very much in the mold of migrating from ROS1 to ROS2. In this article, we will cover -
- Using Gazebo Sim with ROS2
- Modeling robots and worlds with Gazebo Ignition
- Conclude our findings
Using Gazebo Sim with ROS2
A large developer base working with Gazebo uses it in conjunction with ROS2.
Gazebo — ROS2 distro compatibility
The image below by Open Robotics provides recommended distros across ROS2 and Gazebo. At the time of writing, ROS2 Humble running on Ubuntu 22.04 is the most stable and widespread distro, so using it in conjunction with Gazebo Fortress makes the most sense. Interestingly, the official documentation recommends the usage of Gazebo Garden on Ubuntu 22.04. To make it a little more complicated, there are some syntactical and command-line differences between Fortress and Garden. All things considered, if you are looking to start development, I’d recommend using Ubuntu 22.04 + ROS2 Humble + Gazebo Fortress stack.
ROS2 plugins for sensors and control
Gazebo Classic depended on gazebo_ros_pkgs to relay sensor data from the simulated world to ROS/ROS2 world. Writing a custom sensor, actuator or model plugin would typically involve utilizing Gazebo’s C++ APIs in conjunction with standard ROS pub/sub or service mechanisms. Gazebo Sim however uses ros_gz_bridge, this allows a convenient way to bridge topics across Gazebo and ROS2, very similar to bridging topics across ROS1 and ROS2. This means that developers can utilize Gazebo APIs to model a relevant sensor/model, publish it as a Gazebo topic and just bridge the topic across to ROS2!
Open Source Release of a Gazebo Robot
The official docs provide a guide to developing a robot with gz-sim. These docs combined with a migration guide provide most of the necessary information to model a robot with gz-sim. The documentation itself could provide more complete and consolidated information, however. Additionally, open-source examples providing a working robot model in gz-sim are sparse.
To bridge the information gap concerning model design, sensor modeling, and ROS2 integration, we are announcing the release of bcr_bot, an open-source robot simulator for an industrial Autonomous Mobile Robot (AMR). Our primary objectives for this development and release are —
- A standard platform with all necessary sensor models for an AMR.
- Support multiple ROS and Gazebo distros (Noetic + Classic, Humble + Classic, Humble + Fortress)
- Detailed documentation and run instructions.
Our goal over time is to keep adding hardware and sensor interfaces.
Gazebo Ignition provides a solution for modeling robots and environments. In addition to a modular architecture and customizations, gz-sim provides features such as distributed computing, the concept of levels, and cloud integration to model complicated and large-scale worlds. At the same time, I found that the documentation and examples do not match up to the pace of development and list of features.
Our goal with bcr_bot is to provide a goto reference with regards to mobile robot simulation with ignition, and we welcome all contributions to it! If you‘re looking to create advanced and large simulations for your robotic applications with gz-sim, reach out to us!