Docker Containers - LCAS/spot_platform GitHub Wiki

In this repository (spot_platform) we have the file configs/docker-compose.yaml which spawn three services. This article will explain what they are, and how they function internally, the aim is for you to understand how it is created and deployed in further detail.

This is a diagram that describes how the stack is composed. The bolder outlined boxes under spot_platform are managed by the L-CAS team and are hosted on the L-CAS Docker Registry.

spot-docker drawio

spot_drivers

L-CAS has created this container to include all the specific ROS drivers and packages (e.g. simulation, control, libraries, and Code Server) that we want to use for the Spot robot platform, we define the configuration in this repositories Dockerfile.

We build the spot_drivers container using the docker-build.yml action and publish it with the following image tag:

lcas.lincoln.ac.uk/lcas/spot_platform:main

We base this image on top of the lcas/ros:jammy-humble image that is built inside the lcas/ros-docker-images repository, this takes a "base image" and then installs the L-CAS rosdistro apt repositories on top and installs the desktop environment (xfce and novnc).

The base image in our case is ros:humble, this is published onto Docker Hub by ROS themselves, this takes the ros:humble-ros-core-jammy container and install some extra dependencies to make it a full installation.

ros:humble-ros-core-jammy takes ubuntu:jammy and installs the base ROS 2 Humble environment.

ubuntu:jammy is an official image and is made FROM scratch, meaning that all it does is add the files needed to make the base Linux container into an Ubuntu container.

filebrowser

This is a web-based filebrowser that opens up the /home/spot folder natively on the NUC to a web interface exposed on port 8080. This is useful for downloading data such as bag files.

We are using the docker image filebrowser/filebrowser which installs the application onto alpine

zenoh-bridge-ros2dds

This is a zenoh router endpoint to access the ROS topics over the network using zenoh, more about this later.

We are using the docker image eclipse/zenoh-bridge-ros2dds:latest which is built by the Eclipse Zenoh team, using their "publish crates" CI action, that is called from the zenoh-plugin-ros2dds using the release crates CI workflow which takes the built 'crate' (Rust Lingo) and then pipes it directly into a Docker image.