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.

1. Get to know your LIMO

  • 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).

2. Setup Limo Robot

Get your robot and check it out

  • 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!

Battery

  • Ensure you insert the battery correctly (so that the ribbon is underneath it).

Power up

  • Press and hold the power button for about 5 seconds (until it beeps) to turn the robot on.

Power down

  • Press and hold the power button for about 5 seconds (until it beeps) to turn the robot off again.

Zenoh Container

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.

image

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 running you can continue with the next steps.
  • If the container is shutdown you 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 error state, 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.

3. Remotely Connect your Lab PC or Laptop to the robot using Zenoh

This section explains how to connect to the robot remotely, being able to develop and run code from the Lab PC.

  1. In the Lab PC, log in to docker, docker login lcas.lincoln.ac.uk, username lcas and password lincoln.
  2. 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.
  3. 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.
  4. Open VS Code and open the ROB1001 folder.
  5. In the bottom right corner a box should appear click on "Reopen in Container", this starts the container and VS Code connects to it.
  6. 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.
  7. Open another terminal tab and run ros2 topic list -v and you should see all the robot topics. Check which topic names are different to the simulation and which are the same.
  8. To disconnect from the robot's ROS system, simply stop the zenoh-bridge-ros2dds process by pressing [Ctrl-c] in the terminal where it is running.

Access the embedded lite Desktop

This subsection is required only for visualization purposes (e.g. to use rviz2)

  1. 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.

    image
  2. (recommended) Set the desktop scaling by clicking on the settings cog and choose scaling mode "Remote Resizing" if it's not set.

    image
  3. click on "Connect" and enter the password vscode when prompted.

    image

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.

4. Remotely Connect your Lab PC or Laptop to the robot using SSH or VNC

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.

Remote connection using VNC

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!

Remote connection using SSH

Connect to the robot using SSH. In VSC, first, connect to the robot by SSH (install Remote - SSH in the Extensions tab if required):

  1. Show All Commands (Ctrl + Shift + P) and then start typing Remote-SSH: Connect to Host….
  2. Add New SSH Host.. ssh agilex@limo_IP and Select SSH configuration file to update: select .ssh/config.
  3. Press Connect in the Host added! window.
  4. Specify remote platform: Linux and enter password: agx.

You should be now remotely connected to the robot.

Opening the ROS2 container running in 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).

5. Basic operations

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.

  1. Inspect the robot's nodes and topics by using the ros2 node and ros2 topic commands (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, /tf and /camera/color/image_raw. You might want to also refer to the official node and topic tutorials.

  2. 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.rviz which 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).

  3. Teleoperation. Leave running. In a new terminal start the keyboard teleoperation node ros2 run teleop_twist_keyboard teleop_twist_keyboard and drive the robot around using the keyboard.

  4. Let's now send some basic robot control commands using ROS topics. The robot's speed can be controlled by the /cmd_vel topic. Use the ros2 topic pub functionality to send a single Twist message (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.

  1. 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.

⚠️ **GitHub.com Fallback** ⚠️