You're reading the documentation for a version of ROS 2 that has reached its EOL (end-of-life), and is no longer officially supported. If you want up-to-date information, please have a look at Iron.

Setting up a robot simulation (Ignition Gazebo)

Goal: Launch a Simulation with Ignition Gazebo and ROS 2

Tutorial level: Advanced

Time: 20 minutes


First of all you should install ROS 2 and Ignition Gazebo. You have two options:


1 Launch the simulation

In this demo you are going to simulate a simple diff drive robot in Ignition Gazebo. You are going to use one of the worlds defined in the Ignition Gazebo examples called visualize_lidar.sdf. To run this example you should execute the following command in a terminal:

ign gazebo -v 4 -r visualize_lidar.sdf

When the simulation is running you can check the topics provided by Ignition Gazebo with the ign command line tool:

ign topic -l

Since you have not launched an ROS 2 nodes yet, the output from ros2 topic list should be free of any robot topics:

ros2 topic list

2 Configuring ROS 2

To be able to communicate our simulation with ROS 2 you need to use a package called ros_ign_bridge. This package provides a network bridge which enables the exchange of messages between ROS 2 and Ignition Transport. You can install this package by typing:

sudo apt-get install ros-foxy-ros-ign-bridge

At this point you are ready to launch a bridge from ROS to Ignition. In particular you are going to create a bridge for the topic /model/vehicle_blue/cmd_vel:

source /opt/ros/foxy/setup.bash
ros2 run ros_ign_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist

For more details about the ros_ign_bridge please check this README .

Once the bridge is running the robot is able to follow your motor commands. There are two options:

  • Send a command to the topic using ros2 topic pub

ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/Twist  "linear: { x: 0.1 }"
  • teleop_twist_keyboard package. This node takes keypresses from the keyboard and publishes them as Twist messages. You can install it typing:

sudo apt-get install ros-foxy-teleop-twist-keyboard

The default topic where teleop_twist_keyboard is publishing Twist messages is /cmd_vel but you can remap this topic to make use of the topic used in the bridge:

source /opt/ros/foxy/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/model/vehicle_blue/cmd_vel

This node takes keypresses from the keyboard and publishes them
as Twist messages. It works best with a US keyboard layout.
Moving around:
   u    i    o
   j    k    l
   m    ,    .

For Holonomic mode (strafing), hold down the shift key:
   U    I    O
   J    K    L
   M    <    >

t : up (+z)
b : down (-z)

anything else : stop

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%

CTRL-C to quit

currently:      speed 0.5       turn 1.0

3 Visualizing lidar data in ROS 2

The diff drive robot has a lidar. To send the data generated by Ignition to ROS 2, you need to launch another bridge. In the case the data from the lidar is provided in the Ignition Transport topic /lidar2, which you are going to remap in the bridge. This topic will be available under the topic /lidar_scan:

source /opt/ros/foxy/setup.bash
ros2 run ros_ign_bridge parameter_bridge /lidar2@sensor_msgs/msg/LaserScan[ignition.msgs.LaserScan --ros-args -r /lidar2:=/laser_scan

To visualize the data from the lidar in ROS 2 you can use Rviz2:

source /opt/ros/foxy/setup.bash

Then you need to configure the fixed frame:


And then click in the button “Add” to include a display to visualize the lidar:


Now you should see the data from the lidar in Rviz2:



In this tutorial, you launched a robot simulation with Ignition Gazebo, launched bridges with actuators and sensors, visualized data from a sensor, and moved a diff drive robot.