Limo Robot Simulation Introduction - LCAS/ROB1001 GitHub Wiki
The goal of this tutorial is to make you familiar with the LIMO robot simulation and ROS2, the simulation is built for ROS2 Humble and only runs on Ubuntu 22.
The nice thing about ROS is that both simulated robots and real robots work in the same way and use the same software packages for the main functions, meaning any code you write for the simulated robots can be used on the real robots.
The simulation runs in a docker container which includes Ubuntu OS, ROS2 and LIMO robot drivers all pre-installed so after initial deployment the simulator can be used straight away and can be run on "any" machine, Windows, Mac and Linux.
Launching the docker enviroment
- Start docker: On the lab PC, start up the provided container using the following instructions.
-
Download the docker-compose file.
-
Log into the docker registry.
-
Run the docker file.
-
Open the remote desktop in the browser.
-
Go to https://localhost:6901/ in your browser (Chrome works best). Use username
kasm_userwith passwordpasswordto log in. -
Once you have opened the remote desktop you should have a screen like this.

Remember that all of the following steps should be undertaken in the dockerised environment accessible through the browser window (not in the local PC terminal!).
- Start the simulator: In the dockerised environment, open the terminal and execute the following commands:
ros2 launch limo_gazebosim limo_gazebo_diff.launch.py
This launches the limo robot simulation.
- Inspection and control: In another terminal window open
rviz2with the following config filesrc/limo_gazebosim/rviz/urdf.rvizusing the command;
rviz2 -d /opt/ros/lcas_addons/src/limo_ros2/src/limo_gazebosim/rviz/urdf.rviz
This opens Rviz2, the robot visulaiser, this shows the robot's sensors output.
Basic operations
-
Inspect the robot's nodes and topics by using the
ros2 node listandros2 topic listcommands (in a new terminal, no need to source this time). When you type the command without any additional arguments, you should see all available options. Display and compare the format of the following topics/odom,/scan,/tfand/camera/color/image_raw. You might want to also refer to the official node and topic tutorials. -
Now, let us use the graphical visualiser RVIZ to look at the robot and its sensor topics. Start by typing
rviz2 -d /opt/ros/lcas_addons/src/limo_ros2/src/limo_gazebosim/rviz/urdf.rvizwhich uses a pre-defined configuration file, and you should see the interface with a robot model and its sensor data displayed. To get familiar with the interface, adjust the laser scan visualisation options and see how these affect the output. Try to add new visualisation for sensors not included in the provided configuration (e.g. odometry). -
Teleoperation. Leave running. In a new terminal start the keyboard teleoperation node
ros2 run teleop_twist_keyboard teleop_twist_keyboardand drive the robot around using the keyboard. -
Let's now send some basic robot control commands using ROS topics. The robot's speed can be controlled by the
/cmd_veltopic. Use theros2 topic pubfunctionality to send a singleTwistmessage (linear and angular velocity command) as in this example:
ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}"
Now, adjust the linear components of the Twist message and see the resulting trajectory.
- Using your knowledge of the topic publishing, issue a series of commands that will drive the robot:
- in a circle with a radius of 0.5 m;
- in a 1 m square.
Try using as few commands as possible.