Docker Image to be used for ROBO.720 Advanced Robotics course hosted by Tampere University
108
This is the official Docker image for the ROBO.720 Advanced Robotics course. It contains a fully configured environment including ROS 2 Humble, Gazebo, RViz, and all necessary dependencies required to complete the course exercises.
humble: Base image containing ROS 2 Humble and course dependencies.latest: Most recent image containing ROS 2 and course dependencies.humble-webrtc-intel: Humble image with a web GUI and Intel GPU acceleration along with ROS 2 and course dependencies.Important - There are FOUR options available. Choose one that is suitable for your machine. Sub-Option D2 is a fallback to work on most machines but without GPU acceleration that means your CPU will to all the Graphics heavy-lifting.
To use this image, you will need to map a local directory to the container so that your workspace files persist between runs.
Create a directory on your host machine and a Docker volume:
mkdir -p ~/Docker_appdata/ROBO720/home/student/
docker volume create --driver local --opt type=none --opt device=$HOME/Docker_appdata/ROBO720/home/student/ --opt o=bind ROBO720_data
Select the command based on your hardware configuration. Options A, B, and C map local X11 and PulseAudio sockets for native Linux GUI applications. Option D runs a lightweight browser-accessible stream.
Option A: Standard / iGPU (Intel / AMD)
docker run -it \
--name advanced_robotics \
--network host \
--user student \
--workdir /home/student/ros2_ws/ \
--device /dev/snd \
--device /dev/dri:/dev/dri \
-e DISPLAY=$DISPLAY \
-e SHELL=/bin/bash \
-e QT_X11_NO_MITSHM=1 \
-e IGN_IP=127.0.0.1 \
-e PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ${XDG_RUNTIME_DIR}/pulse:${XDG_RUNTIME_DIR}/pulse \
-v ~/.config/pulse/cookie:/home/student/.config/pulse/cookie \
-v ROBO720_data:/home/student/ \
cogrobot/robo720:humble
Option B: Nvidia dGPU (Requires Nvidia Container Toolkit)
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all ubuntu nvidia-smi
docker run -it \
--name advanced_robotics \
--network host \
--user student \
--workdir /home/student/ros2_ws/ \
--runtime nvidia \
--gpus all \
--device /dev/snd \
--device /dev/dri:/dev/dri \
-e DISPLAY=$DISPLAY \
-e SHELL=/bin/bash \
-e QT_X11_NO_MITSHM=1 \
-e IGN_IP=127.0.0.1 \
-e PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e NVIDIA_VISIBLE_DEVICES=all \
-e __NV_PRIME_RENDER_OFFLOAD=1 \
-e __GLX_VENDOR_LIBRARY_NAME=nvidia \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ${XDG_RUNTIME_DIR}/pulse:${XDG_RUNTIME_DIR}/pulse \
-v ~/.config/pulse/cookie:/home/student/.config/pulse/cookie \
-v ROBO720_data:/home/student/ \
cogrobot/robo720:humble
Option C: Mac Users (Apple Silicon - Experimental)
Requires XQuartz installed on the host and network connections enabled in XQuartz settings. Run xhost +localhost on your Mac terminal before launching.
Macs do not have a built-in X11 display server. You must install XQuartz:
brew install xquartz.xhost +localhost (or xhost + if localhost fails).docker run -it \
--name advanced_robotics \
-p 11345:11345 \
--user student \
--workdir /home/student/ros2_ws/ \
-e DISPLAY=host.docker.internal:0 \
-e SHELL=/bin/bash \
-e QT_X11_NO_MITSHM=1 \
-e IGN_IP=127.0.0.1 \
-v ROBO720_data:/home/student/ \
cogrobot/robo720:humble
Mac Limitations: CPU-based software rendering means Gazebo/RViz will be laggy. There is no sound mapping. Network is isolated, requiring additional
-pflags for physical hardware connections.
Option D: Web-Based GUI via WebRTC (Easy Access / No X11 Needed) This deployment is developed with the help of Selkies Open-Source Project to stream the fully-accelerated container desktop straight to your web browser. Use this option if you don't want to set up local X11 servers, are using an isolated system, or want an effortless remote setup.
Choose your execution command based on your machine's graphics support:
Sub-Option D1: Intel Hardware Encoding (Intel GPU Acceleration)
docker run -d --name advanced_robotics_webRTC \
--device /dev/dri/renderD128 \
--device /dev/dri/card1 \
--group-add audio \
--group-add 992 \
--group-add 44 \
--user student \
--workdir /home/student/ros2_ws/ \
-p 8080:8080 \
-e IGN_IP=127.0.0.1 \
-e DISPLAY=:99 \
-e RESOLUTION=1920x1080x24 \
-e SELKIES_PORT=8080 \
-e SELKIES_USER=student \
-e SELKIES_PASSWD=123 \
-e SELKIES_ENCODER=vah264enc \
-e LIBVA_DRIVER_NAME=iHD \
-v ROBO720_data:/home/student/ \
cogrobot/robo720:humble-webrtc-intel
*Note: You may need to change --device /dev/dri/renderD128 \ --device /dev/dri/card1 \ according to your system. You can identify it by running
ls -l /dev/dri/by-path/
This will show you all available nodes, something like this:
total 0
lrwxrwxrwx 1 root root 8 Aug 28 19:47 pci-0000:00:02.0-card -> ../card1
lrwxrwxrwx 1 root root 13 Aug 28 19:47 pci-0000:00:02.0-render -> ../renderD128
lrwxrwxrwx 1 root root 8 Aug 28 19:47 pci-0000:01:00.0-card -> ../card0
lrwxrwxrwx 1 root root 13 Aug 28 19:47 pci-0000:01:00.0-render -> ../renderD129
Select the correct matching pair (pci-0000:02:00.0 or pci-0000:01:00.0) and use that.
Sub-Option D2: Software Encoding (Compatibility Mode)
docker run -d --name advanced_robotics_webRTC_Soft \
--group-add audio \
--group-add 44 \
--user student \
--workdir /home/student/ros2_ws/ \
-p 8080:8080 \
-e IGN_IP=127.0.0.1 \
-e DISPLAY=:99 \
-e RESOLUTION=1920x1080x24 \
-e SELKIES_PORT=8080 \
-e SELKIES_USER=student \
-e SELKIES_PASSWD=123 \
-e SELKIES_ENCODER=x264enc \
-v ROBO720_data:/home/student/ \
cogrobot/robo720:humble-webrtc-intel
After getting the container to run, You can access the WebGUI by using the following credentials.
student123You can run apps and tools in accelerated environment by adding tag gpu infront of your command. For example, inside container terminal, run Gazebo ignition with gpu by following:
gpu ign gazebo
For Software encoded version, you can run commands as usual, though running with gpu tag won't create error since it detects automatically.
You only need to run the docker run command once. To return to your workspace later (applies to Options A, B, and C):
# Start the stopped container
docker start advanced_robotics
# Open an interactive terminal
docker exec -it advanced_robotics bash
(For Option D, simply re-run your browser instance or use docker start advanced_robotics_webRTC / advanced_robotics_webRTC_Soft if the container was stopped).
Any new workspaces, files, or source code you place inside ~/Docker_appdata/ROBO720/home/student/ on your host machine will instantly be available inside the container at /home/student/. You can edit your code in VS Code locally while compiling/running it through the Docker container terminal.
Go to ~/Docker_appdata/ROBO720/home/student/ros2_ws/ on host and clone course repo:
cd ~/Docker_appdata/ROBO720/home/student/ros2_ws/
git clone https://github.com/tau-alma/robo720_2026.git
Content type
Image
Digest
sha256:2dd804c70…
Size
1.5 GB
Last updated
about 1 month ago
docker pull cogrobot/robo720