LeoOS
LeoOS is a Debian-based Operating System distribution for the Raspberry Pi computer running inside Leo Rover.
It uses Ubuntu and Fictionlab package archives and comes with:
- ROS distribution with Leo-specific packages installed,
- network configured to act as a Wi-Fi access point,
- SSH server for remote access,
- HTTP server that hosts the Web User Interface,
- desktop environment and remote desktop access (in the "full" variant),
- services for starting base functionalities at boot.
Network configuration​
LeoOS configures the network to provide connectivity to Leo Rover. The system
sets up a bridge interface (br0) that combines the Ethernet and Wi-Fi
interfaces into a single subnet. DHCP and DNS services are provided via
dnsmasq, while hostapd manages the wireless access point.
Interfaces​
eth0- Wired Ethernet interface, added to the bridgebr0.wlan_ext- External USB Wi-Fi interface, used as an Access Point (AP) and bridged intobr0.wlan_int- Internal Wi-Fi interface (onboard chip), can be used for connecting to existing networks.br0- Bridge interface combining Ethernet and AP Wi-Fi interfaces, assigned static IP10.0.0.1/24.
The bridge means that all devices connected to either the Ethernet or the Wi-Fi
network can communicate with each other as if they were on the same physical
network. Once a device connects to the Wi-Fi access point, it receives an IP
address in the 10.0.0.x range and can communicate with the rover.
You can learn how to change the access point settings in this guide:
LeoOS also supports connecting to existing Wi-Fi networks using the internal Wi-Fi interface. This can be useful for connecting the rover to a network with internet access. You can learn how to set it up in this guide:
Once connected to the internet, the rover will also serve as a gateway for devices connected to its access point, allowing them to access the internet as well.
ROS Startup​
LeoOS provides an easy mechanism for adding new functionalities without building any of the base packages. The whole process of starting the ROS nodes can be summarized as follows, using the following files:
- /etc/ros/robot.launch.xml - a launch file in XML format that starts the robot's functionality. It includes the launch file from the leo_bringup package, which starts the base functionality of the rover. It can be extended by the user, for example, to add additional nodes to be started at boot.
A launch file describes a system configuration to be executed. This includes what set of nodes to start, what parameters to pass to each node and many more.
-
/etc/ros/setup.bash - the environment setup file that sets all the environment variables necessary for the successful start of the ROS system. It sources the environment setup file from the target ROS workspace (by default
/opt/ros/jazzy/setup.bash), and sets additional environment variables used by ROS or startup services. -
/etc/ros/urdf/robot.urdf.xacro - the URDF description (in xacro format) that is passed to the Robot State Publisher node. It includes the robot's model from the leo_description package and can be extended by the user to add additional links or joints to the model.
-
/etc/ros/param_overrides.yaml - a YAML file that contains parameter overrides for the ROS nodes launched on boot. It is used to override default parameters defined in the ROS API:
📄ROS APIA comprehensive reference for the Leo Rover's ROS API. This guide details all available topics, services, and parameters for robot control and data access.
Additionally, systemd user units are used to start the ROS nodes at boot. The following units are defined:
- ros-nodes.service - A service that starts the
/etc/ros/robot.launch.xmlROS 2 launch file. - uros-agent.service - A service that starts the Micro-ROS Agent.
- ros.target - A target that groups the above two services together.
Both services can be configured through the /etc/ros/setup.bash file.
To facilitate managing these services, LeoOS comes with a set of bash aliases:
<unit>-start - Starts the specified unit.<unit>-stop - Stops the specified unit.<unit>-restart - Restarts the specified unit.<unit>-status - Displays the status of the specified unit.<unit>-enable - Enables the specified unit to start at boot.<unit>-disable - Disables the specified unit from starting at boot.<unit>-logs - Displays the logs of the specified unit (can be used with-fflag to follow the logs).
Where <unit> can be either ros, ros-nodes, uros-agent.
For example, to stop both services, you can type:
ros-nodes-stop
uros-agent-stop
or just:
ros-stop
To check logs from both services, you can type:
ros-logs
Support and release schedule​
LeoOS releases are aligned with ROS 2 LTS distributions. Each LeoOS release will be supported until the corresponding ROS 2 LTS distribution reaches its End of Life (EOL). During the support period, we will provide updates, bug fixes, and security patches for the LeoOS release.
New LeoOS releases will be made available up to a year after the corresponding ROS 2 LTS release, with a beta version available a few months prior.
For non-LTS ROS 2 releases, official LeoOS releases will not be provided. However, Leo Rover ROS 2 packages will be available for all currently supported upstream ROS 2 distributions.
Releases and support duration​
| LeoOS version | ROS LTS | Release date | End of Life | Status |
|---|---|---|---|---|
| 1.x.x | ROS 1 Noetic | April 2022 | May 2025 | End of life |
| 2.x.x-humble | Humble | January 2026 | May 2027 | Supported |
| 2.x.x | Jazzy | May 2025 | May 2029 | Supported (default) |
| 3.x.x | Lyrical | May 2027 | May 2031 | To be released |
For the LeoOS flashing instructions, visit the guide below.