Runs a PAL Robotics Kangaroo Simulation out of the box on both NVIDIA and Intel/AMD GPUs, using Zenoh
(rmw_zenoh_cpp) as the ROS 2 middleware.
See the workshop slides for more info.
- Docker + Docker Compose.
- NVIDIA hosts only: the NVIDIA Container Toolkit.
- An X11 desktop session (the MuJoCo GUI uses OpenGL/GLFW over X11).
- Windows:
- Enable Linux docker daemon.
- Install VcXsrv
- Run
XLaunchwith default settings
# from the repo root
./run.sh # auto-detects NVIDIA vs Mesa, allows X access, starts the containerAdd this handy alias to your host ~/.bashrc:
echo 'alias rc="docker exec -it ros2_control_roscon26 bash"' >> ~/.bashrcSee workshop_bringup/README.md
Running the demo needs four terminals, each attached to the container with
rc. Aliases (z, sim, demo, teleop) are preconfigured in the container.
# Terminal 1 — Zenoh router
z
# Terminal 2 — MuJoCo simulation
sim
# Terminal 3 — Run the policy
demo
# Terminal 4 — drive the humanoid around
teleoprun.sh picks the backend automatically. To be explicit:
# Intel / AMD (Mesa via /dev/dri)
docker compose -f docker-compose.yaml up -d
# NVIDIA (NVIDIA Container Toolkit)
docker compose -f docker-compose.yaml -f docker-compose.nvidia.yaml up -dThere is no wrapper shell script, instead use explicit one of the following
docker compose -f docker-compose.yaml -f docker-compose.win.yaml up -d
docker compose -f docker-compose.yaml down
docker compose -f docker-compose.yaml -f docker-compose.win.yaml buildBy default the container renders onto the host X11 display. On hosts without a reachable physical display (e.g. macOS, headless/remote sessions) add the noVNC overlay; it starts Xvfb + X11VNC + noVNC so GUIs are served in a browser at http://localhost:6080/vnc.html:
Important
You need to check Enable host networking in Settings → Resources → Network on Docker Desktop.
Before running the docker image, set export DISPLAY=:99.
export DISPLAY=:99
docker compose -f docker-compose.yaml -f docker-compose.novnc.yaml up -d
docker compose -f docker-compose.yaml down
docker compose -f docker-compose.yaml -f docker-compose.novnc.yaml build./run.sh build # build locally
# or pull the published image (default in docker-compose.yaml):
docker compose -f docker-compose.yaml pull./run.sh # restart a stopped container, or recreate it after a rebuild
./run.sh down # stop and remove the container- Blank / black MuJoCo window: the GL context is not reaching a real GPU
display.
- Run
xhost +local:rooton the host (once per boot).run.shdoes this. - NVIDIA: confirm
docker exec ros2_control_roscon26 nvidia-smiworks and thatNVIDIA_DRIVER_CAPABILITIES=all(includesgraphics). - Intel/AMD: confirm
/dev/driexists on the host anddocker exec ros2_control_roscon26 glxinfo -Breports your GPU. - Remote/VNC/screen-share sessions cannot show NVIDIA direct-rendered OpenGL — run at the physical display, or use VirtualGL/TurboVNC.
- Run
glxinfoshowsllvmpipe: you are on software rendering — the GPU is not passed through. Re-check the toolkit (NVIDIA) or/dev/dri(Mesa).- No windows appear with different errors:
Run
xlcockandglxgearsto see if the X11 forwarding works.
Source packages are listed in deps.repos and built in the
image. Change a version: there to test an in-review branch, then rebuild.