Software Updates

This topic’s purpose is to notify about updates of various software components related to Leo Rover.


The Operating System running on the robot’s computer. (Raspberry Pi 4).

Leo Image (deprecated)

Ubuntu image that is running on the robot’s main computer (Raspberry Pi 3 or 4).
The releases can be downloaded from here.


A program that is running on the CORE2 board. It exposes the robot’s capabilities, such as differential drive controller or servo control, to the main computer.


A ROS package that contains scripts, launch files and configuration for starting the base functionality of Leo Rover.


A ROS package that contains Leo Rover’s model in URDF format.
ROS Wiki page


A ROS package that contains visualization launch files and RViz configurations for Leo Rover.
ROS Wiki page

2020-02-08 updates

New Leo Image released! Download it from here.

Leo Image

fixed the issue that caused the Access Point to not start

NetworkManager sometimes took control of the external wireless interface due to udev not changing the interface name in time. The issue was resolved by delaying the start of the NetworkManager service at boot.

installed python-catkin-tools package

The package that provides catkin commands is now installed by default.

2020-02-12 updates

New Leo Image released! Download it from here.


exported new, more up-to-date part models in COLLADA format

The new part models resemble more the current version of Leo Rover. They are more detailed and contain color information as opposed to the previous version. The model of the base link was exported in such a way that the origin is placed in a known, fixed location to provide a good point of reference for child links.

added rviz.launch file

This launch file starts RViz with the configuration that shows the current robot model. It provides a quicker way to visualize the current state of Leo.

changed camera link name to camera_frame

The link name was changed to comply with the established naming conventions which say that the names of links that don’t have any visual properties and are only used as a reference frame, should end with a _frame keyword.


changed camera frame id to camera_frame

The camera images are now published with the frame_id parameter set to camera_frame. The change was made to comply with the newer version of leo_description.

added upload_description argument to leo_bringup.launch file

This parameter controls whether to upload the URDF model to the Parameter Server. Setting this to false is useful when the robot description is provided externally.

Leo Image

changed the way ROS nodes are started at boot to provide a more user-friendly mechanism for adding new functionalities

The user now can easily modify the set of nodes that are started at boot and the robot description that is uploaded to the Parameter Server without building any packages. The behavior can be adjusted by modifying the files located at the /etc/ros/ directory. More of that will be covered soon at the ROS Development tutorial.

updated leo_bringup and leo_description packages

2020-03-24 updates


added GPS module support

The feature has been tested on Waveshare UART GPS NEO-6M module, but should work with any UART GPS module that supports NMEA protocol. The port on which the device is connected can be adjusted by setting GPS_HSENS variable in params.h file and the feature can be toggled by publishing on core2/set_gps topic. Upon receiving each GPGGA message, a new NavSatFix will be published on gps_fix topic.

added ROS logging

The firmware now publishes log messages (on different verbosity levels) to the ROS network via rosserial. To enable debug level logging, send true on core2/set_debug topic.

added ROS parameters

All of the parameters regarding motors, servos and differential drive controller are now loaded at runtime from ROS Parameter Server. A complete list of the parameters and their description can be found on the ROS API section of the README file.

added angular_velocity_multiplier parameter

This parameter was added to account for a difference between a two-wheel robot model and the real robot (check the README for more info). The wheel odometry should now be closer to the real velocity.

added frame_id parameters for IMU and GPS

The core2/imu_frame_id and core2/gps_frame_id parameters specify the tf frame ids associated with IMU and GPS modules.


fixed leo_system shutdown command

Previously, the leo_system node performed a reboot on /system/shutdown command. This has been fixed and now the RPi properly shuts down upon receiving the shutdown command.

added configuration files for camera and core2 firmware

The launch file now loads the parameters for the raspicam_node and leo_firmware from the YAML files located in the config/ directory. The firmware parameters are required starting from the v1.0.0 version of leo_firmware. For the camera node, the ISO, contrast and saturation parameters have been slightly adjusted to work better in darker environments.

added motors_model argument to the launch file

The argument specifies the motor parameters to load for the leo_firmware. The supported values are buehler (default) and pololu. The argument can be set either by passing the value to the launch file or by setting the LEO_MOTORS environment variable.


2020-04-23 updates


used relative topic names in leo_system node

The leo_system node now uses relative names instead of global for the reboot and shutdown topics. This makes it easier to run the node under a namespace.

Leo Image

added source /etc/ros/setup.bash line to ~/.bashrc file

As the /etc/ros/setup.bash can be considered the global setup file for Leo’s ROS installation, it is now sourced at the start of every console session.

fixed the issue with /var/log/ros directory permissions

When using the /etc/ros/setup.bash, starting a node without root privileges resulted in an error due to not sufficient permissions to the /var/log/ros directory which is used as a global ROS logging directory. This has been fixed by adding write permissions to this directory for all users.

updated leo_bringup and leo_ui

The leo_ui has got two minor changes:

  • the angular velocity scale has been modified to work better with the newest leo_firmware.
  • the topic names have been changed to relative (removed the leading /) to support putting the nodes into a namespace.

updated the leo service (files under /etc/ros)

The /etc/ros/setup.bash file has been expanded a little. The /etc/ros/robot.launch now sets the tf_prefix parameter (which defaults to ROS_NAMESPACE environment variable) to fully support multi-robot setup.

downloaded newest leo_firmware binary to the home directory

1 Like

2020-05-18 updates

Leo Image

added support for wifi modules that are based on rtl88XXau chipsets

The image now contains drivers for Realtek rtl8812au, rtl8811au, rtl8821au and rtl8814au usb wifi devices. An udev rule configures the module as an access point, so it can be used to replace the ralink rt2800 wifi dongle. The support was tested on the Alfa AWUS036ACS device.

modified hostapd config to enable High-Throughput mode (802.11n)

The new configuration makes use of the IEEE 802.11n standard which should allow for a throughput of around 100Mb/s when using a 40MHz channel. It also enables WMM which provides Quality of service features.

Sorry for the delayed updates

2020-09-17 updates


The old Leo Images are now deprecated in favor of LeoOS. Read this post for information about migration from previous OS.


Moved the launch files and rviz configs to leo_viz package

The package does not depend on RViz or any other GUI components anymore which makes it a lot easier to build on headless systems.


Added Rviz configurations for odometry, slam and navigation

The configurations were developed to work with the autonomous navigation tutorial.

Added Image panel to default config

Enabling this panel should spawn a display with the stream from robot’s camera.

2020-09-22 updates


fixed an issue with sudden changes in encoder count values

There was an issue which caused sporadic huge changes in wheel position and velocity spikes if there is noise in encoder signal. This has been fixed by implementing a detection of abnormal wheel velocities in update function of wheel controllers.

modified the ROS API to use services instead of topics for settings config options

All of the functionalities which were available on /core2 topics are now provided by services instead. For example, to turn the IMU functionality on, you now have to run:

rosservice call /core2/set_imu true

instead of:

rostopic pub /core2/set_imu std_msgs/Bool true

added service for getting the current firmware version

The service /core2/get_firmware_version returns a String with the current firmware version which is set in the params.h file.

fixed the issue with building the firmware on Windows

The previous version of the firmware did not build successfully on Windows due to missing std::to_string function in standard library.

2020-09-25 updates


Added gazebo references

Gazebo-specific tags were added to make the model usable inside gazebo simulation (see the leo_gazebo package).

Added camera_optical_frame link which uses camera coordinate convention

ROS uses different coordinate frame conventions for the link translations and cameras (they are both defined in REP103). On previous version of the model the camera_link used the “camera” convention. To comply with REP103, the camera_frame now uses the “normal” convention and a new camera_optical_frame uses the “camera” convention.

Added launch files for publishing robot state

Two launch files are added: description.launch which sets the robot_description parameter to the current model and state_publisher.launch which starts the robot_state_publisher.

Added low-poly outline models for collision geometry

All links now include collision geometry defined by low-poly meshes which are optimal for collision detection.

Added physical properties for all links and revolute joints

All links now have mass and inertia properties set, all revolute joints now have friction and damping properties, as well as effort and velocity limits set (usable for simulation purposes).

Added joints for rockers and antenna

Rockers and antenna are now separate links in the model which are connected to the base model by fixed joints. Setting default_antenna argument to false in xacro will remove the antenna link from the model. Setting rockers_fixed argument to false will change the rockers joint types to revolute.

Replaced meshes with more optimized ones

The new COLLADA meshes are several times smaller in size which makes them consume less resources when visualizing (e.g. in RViz).


Changed camera frame name to camera_optical_frame

To make the package compatible with the new version of leo_description, the camera_frame_id parameter for raspicam_node was changed from camera_frame to camera_optical_frame