Limo Robot Introduction - LCAS/ROB1001 GitHub Wiki
The goal of this tutorial is to make you familiar with the LIMO robot platform which will be used in future in-class activities. This includes the robot's components and functionality, tools for remote operation, software development and simulation. We are going to use Visual Studio Code (VSC) which will serve as a development platform but also enable remote interaction with the robot. It is a fairly intuitive development environment but you might want to refer to some docs if some of the concepts are not very clear.
- Check the manufacturer's webpage and read Sections 1.1-1.6 of the manual whilst inspecting the real robot and its components.
- Limo Robot Quick Start Guide
- Limo Robot Risk Assessment
- If you have a mobile phone, you can try out the remote controller phone app by following the instructions in Section 1.8 of the manual.
- The iPhone app is available from the App Store. Unfortunately, the Android app is not available on the Play Store you can side-load it from PGYER but it is currently unavailable.
- Try it out and joystick the robot around in different configurations (differential and Ackerman drives). Switch back to the differential drive at the end (orange lights).
-
Take the box and scan the QR code on it (or go to the page Log Limo Use). Fill out the online form to check out the robot for your use. Remember to use the same form to check it back in when you are done!
-
This logs the robot's use so we can log any faults and know when the batteries need charging or replacing.
-
Always keep the robot on the floor to avoid it accidentally driving off a table!
- Ensure you insert the battery correctly (so that the ribbon is underneath it).
- Press and hold the power button for about 5 seconds (until it beeps) to turn the robot on.
- Press and hold the power button for about 5 seconds (until it beeps) to turn the robot off again.
The robot uses Docker under the hood to run the ROS2 environment. Don't worry — you don't need to know everything about it. You just need to know that docker is a box that the ROS2 environment runs in. And we need it to be running so we can connect to the robot.
This container is called the 'Zenoh Container' as it makes use of Zenoh which is a tool we are going to be using to share data between the robot and the developer machine.
If you've previously used ROS1, you would use "ROS_MASTER" to establish a client-server relationship with the robot. However, in ROS2, the system has shifted to using DDS (Data Distribution Service), which enables decentralized communication and coordination. DDS allows for more flexible and scalable control, facilitating the management of multiple robots in a coordinated fleet without relying on a single server. This does not work in our setting, so we are using Zenoh as a replacement for DDS.
On the display on the back of the Limo, you should now see a screen which tells you the state of the robot.

The hostname is displayed in big text, and it is the serial number of the Limo. We use this to track and maintain the robots we have.
The IP is the numbers that start with 10.82.0.x, you will need to use this to connect to the Limo from your developer machine.
Then you will see some text which shows the state of the container.
- If the container is
runningyou can continue with the next steps. - If the container is
shutdownyou will need to start the container. You should see on the desktop a blue icon that says 'Zenoh Docker On' press this, and wait a few seconds. It will then update to say it is running. Once it is running — you can continue. - If the container is in a
errorstate, ask for some help from the staff in the room. But, you may be able to resolve it by turning 'Zenoh Docker' off and then back on again.
This section explains how to connect to the robot remotely, being able to develop and run code from the Lab PC.
- In the Lab PC, log in to docker,
docker login lcas.lincoln.ac.uk, usernamelcasand passwordlincoln. - If you have not already forked the ROB1001 repository make a fork, and make sure your fork is up to date with the main LCAS/ROB1001 repository.
- Clone your fork to the lab PC or your laptop
git clone https://github.com/<user name>/ROB1001.git, if you are using Ubuntu on the lab machine clone it to the Desktop or Documents folder. - Open VS Code and open the ROB1001 folder.
- In the bottom right corner a box should appear click on "Reopen in Container", this starts the container and VS Code connects to it.
- Start the Zenoh ROS bridge
zenoh-bridge-ros2dds -e tcp/10.82.0.XXX:8888(you need to add your robot's IP here!) and keep it running, don't close this terminal window. - Open another terminal tab and run
ros2 topic list -vand you should see all the robot topics. Check which topic names are different to the simulation and which are the same. - To disconnect from the robot's ROS system, simply stop the
zenoh-bridge-ros2ddsprocess by pressing[Ctrl-c]in the terminal where it is running.
This subsection is required only for visualization purposes (e.g. to use rviz2)
-
Click on the "Port" in VSCode, find the "novnc" port, right click on it to open the menu, and then choose either "Open in Browser" to open it outside of VSCode or "Preview in Editor" to have it open within VSCode.
-
(recommended) Set the desktop scaling by clicking on the settings cog and choose scaling mode "Remote Resizing" if it's not set.
-
click on "Connect" and enter the password
vscodewhen prompted.
The remote desktop will just be a black empty window, use the terminal in VS Code to run ROS2 commands and start applications such as RViz as detailed in the next section.
This section explains how to connect to the robot remotely, but unlike section 3, here you are developing and running code from the robot PC.
Open the VSC on the lab PC and head to the VNC tab (install vnc-extension in the Extensions tab if required). Add limo_IP as a server address and connect. You should now see the robot's desktop on your PC monitor and be able to interact with the robot remotely by typing and using the mouse on your PC!
Connect to the robot using SSH. In VSC, first, connect to the robot by SSH (install Remote - SSH in the Extensions tab if required):
- Show All Commands (
Ctrl+Shift+P) and then start typingRemote-SSH: Connect to Host…. -
Add New SSH Host..ssh agilex@limo_IPandSelect SSH configuration file to update:select.ssh/config. - Press
Connectin theHost added!window. - Specify remote platform:
Linuxand enter password:agx.
You should be now remotely connected to the robot.
Once you are remotely connected to the robot (using VNC or SSH), to open the container that is currently running ROS2 in the robot, you need to use the command:
docker exec -it agilex-limo_drivers-1 bash
If you want to leave from the container you need to use (Ctrl + D).
These operations and tasks are the same as for the simulation robot to show how both the simulation and real robots work the same using ROS2.
-
Inspect the robot's nodes and topics by using the
ros2 nodeandros2 topiccommands (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 visualizer RVIZ to look at the robot and its sensor topics. Start by typing
rviz2 -d rob1001_ros_scripts/rviz/limo.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 visualization options and see how these affect the output. Try to add new visualization 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.