Welcome to this series of articles that delves into creative applications of Ubuntu Core. Throughout this series, Engineers from Canonical will showcase the possibilities with this Core 24 release, outlining the features and resources at your disposal.
In this fourth installment, Mirko Ferrati, a manager from the Robotics team, will guide you through setting up an observability and telemetry server with corresponding clients within a robot. This tailored observability system for robotics empowers startups to quickly supervise their robot fleet remotely, while established companies can easily customize it to suit their specific requirements. When coupled with Ubuntu Core, this system provides roboticists with a comprehensive framework for securely managing a modular deployment of their observability stack.
Expanding with robotics telemetry
If your project or organization has deployed robots across various client sites, monitoring their performance and metrics becomes crucial. Instead of simply connecting to the device through a virtual network using ssh or a remote desktop viewer, consider more advanced, all-encompassing open-source solutions. Discover how to effortlessly establish the server and requisite applications within the robot. The selected tools to construct our observability system are:
Grafana: A comprehensive platform for gathering and storing system statistics like CPU and RAM usage in a database, accompanied by a web interface equipped with an array of visualization tools.
Foxglove: The standard for streaming and visualizing data from your robot into a browser, with basic teleoperation support directly from the browser interface.
Rosbags: The default method for archiving historical data from the ROS ecosystem, seamlessly accessible through a web browser in conjunction with an uploader script and a file webserver.
Framework of the robotics telemetry and observability system
The three tools mentioned share a common set of principles:
- A client application in the robot collects and transmits data to a remote server via an encrypted connection.
- A remote database to store the collected data.
- A web server that presents the data through a user-friendly interface to any connected client.
These concepts are visually depicted in the illustration below:
Deploying a comprehensive observability suite with Juju and Ubuntu Core
Lets now explore the necessary steps to deploy the observability stack for your fleet of Ubuntu Core robots. The server-side setup relies on Juju and Microk8s. Juju serves as an open-source orchestration engine for managing applications seamlessly at any scale and infrastructure using charms. On the other hand, Microk8s offers a lightweight Kubernetes cluster that’s easy to install. Juju can utilize Microk8s to simplify the deployment of Kubernetes-based applications on a cloud environment. With Juju, you can deploy the mentioned application portfolio on a server with minimal effort.
For the robot side, Snaps are used to install the essential agents required for interfacing and communicating with the telemetry server. An overview of the available snaps and their functionalities is provided.
Deploying the observability for robotics bundle on the server
Initiate the process by setting up a computer as a server with either Ubuntu Desktop or Ubuntu Server installed. Once the server is ready, ensure the configuration with Juju and K8s is prepared. To ensure smooth operations, enable the dns
, hostpath-storage
, and metallb
add-ons. Subsequently, create a Juju model dedicated to housing all observability applications and integrations:
juju add-model my-juju-model
juju switch my-juju-model
Juju applications are deployable via bundles, which are collections of interlinked charms. The robotics overlay, an extension of the COS lite bundle customized for Robotics, can be downloaded and deployed:
curl -L https://raw.githubusercontent.com/ubuntu-robotics/rob-cos-overlay/main/robotics-overlay.yaml -O
juju deploy cos-lite --trust --overlay ./robotics-overlay.yaml
With the server applications set, devices can be registered, and monitoring can begin.
Deploying the observability for robotics snaps on the robot
To optimize Ubuntu Core, create a custom image as detailed here. Once the robot is equipped with Ubuntu, proceed to install the required snaps:
Additional configuration snaps may be necessary. Refer to the demo rob-cos-demo-configuration for specific details.
After installing the snaps, they will link to the server, initiating historical data transmission for storage in databases and live data streaming to the Foxglove UI for client viewing.
Accessing the web GUI from your laptop
Open your browser and access the server’s main page by entering the IP address of the Juju model. Discover the IP address through this command on the server:
juju run traefik/0 show-proxied-endpoints | grep catalogue
That’s all!
You can now concentrate on your development efforts without being burdened by the infrastructure for remotely managing and observing robots in the field.
What’s on the horizon?
Given that the entire system is open-source and adaptable, consider designing your own observability tools and integrating them into the Juju model described earlier by accessing the repository and forking the yaml configuration overlay for robotics. To maximize this setup, utilize the snap tutorials to seamlessly integrate client applications on your robot within the snap ecosystem.
Consider packaging your ROS applications using snaps, offering the ability to manage and deploy software at the edge effectively. Utilize Ubuntu Core to craft your production image with targeted hardware and snaps. This facilitates straightforward device flashing on production lines and allows for customizing the image with desired applications, incorporating a complete, readily deployable observability and telemetry stack as standalone snaps!