ROS2 Gazebo Robot Simulation
Excerpt from ROS 2 Documentation (IRON): The Robot Operating System (ROS) is a set of software libraries and tools for building robot applications. From drivers and state-of-the-art algorithms to powerful developer tools, ROS has the open source tools you need for your next robotics project.
Launch the Gazebo Simulation
Use one of the worlds defined in the Gazebo examples called visualize_lidar.sdf to simulate a simple diff drive robot:
ign gazebo -v 4 -r visualize_lidar.sdf
This command will automatically download all dependencies and start the Gazebo UI:
When the simulation is running you can check the topics provided by Gazebo with the ign command line tool:
ign list -l
/clock
/gazebo/resource_paths
/gui/camera/pose
/gui/record_video/stats
/model/vehicle_blue/odometry
/model/vehicle_blue/tf
/stats
/world/visualize_lidar_world/clock
/world/visualize_lidar_world/dynamic_pose/info
/world/visualize_lidar_world/pose/info
/world/visualize_lidar_world/scene/deletion
/world/visualize_lidar_world/scene/info
/world/visualize_lidar_world/state
/world/visualize_lidar_world/stats
Configure ROS2
To be able to communicate our simulation with ROS 2 you need to use a package called ros_gz_bridge. This package provides a network bridge which enables the exchange of messages between ROS 2 and Gazebo Transport:
sudo apt install ros-iron-ros-ign-bridge
At this point you are ready to launch a bridge from ROS to Gazebo. In particular you are going to create a bridge for the topic /model/vehicle_blue/cmd_vel
:
ros2 run ros_gz_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist
Once the bridge is running the robot is able to follow your motor commands. There are two options:
Publish an Topic Update
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 }"
This will make the blue robot start to translate forward:
Use the following command to drive the robot back to the starting position:
ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/Twist "linear: { x: -0.1 }"
Use the teleop_twist_keyboard Package
The teleop_twist_keyboard
node takes keypresses from the keyboard and publishes them as Twist messages. You can install it typing:
sudo apt install ros-iron-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:
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
Visualizing Lidar Data in ROS2
The diff drive robot has a lidar. To send the data generated by Gazebo to ROS2, you need to launch another bridge. In the case the data from the lidar is provided in the Gazebo Transport topic /lidar2
, which you are going to remap in the bridge. This topic will be available under the topic /lidar_scan
:
ros2 run ros_gz_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 ROS2 you can use Rviz2:
rviz2
Here you need to Set the fixed frame to vehicle_blue/lidar_link/gpu_lidar
and click the Add button to add the LaserScan to visualize the lidar: