3.8 KiB
Docker Setup for RDC Simulation
This guide explains how to run the RDC Simulation environment inside a Docker container with NVIDIA GPU support and X11 display forwarding. This approach isolates the simulation environment from your host system while providing full hardware acceleration.
Prerequisites
-
Docker Engine: Install Docker for your OS.
-
NVIDIA GPU & Drivers: Ensure you have an NVIDIA GPU and proprietary drivers installed.
-
NVIDIA Container Toolkit: Required for GPU pass-through to Docker.
# Install NVIDIA Container Toolkit curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(. /etc/os-release;echo $ID$VERSION_ID) /" | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list sudo apt update && sudo apt install -y nvidia-container-toolkit sudo systemctl restart docker
Quick Start
1. Build the Image
cd ~/RDC_Simulation
docker compose build
This may take 15-20 minutes mostly due to compiling Gazebo plugins.
2. Allow X11 Display Access
To allow the container to display the Gazebo GUI on your host screen:
xhost +local:docker
3. Run the Container
docker compose run --rm simulation
This drops you into a bash shell inside the container as the user pilot.
Running the Simulation
Once inside the container, the environment is pre-configured.
1. Start the Environment
You can use the helper script to verify everything is ready:
./docker-entrypoint.sh
2. Launch Components (Multi-Terminal)
Since docker compose run gives you a single terminal, you can verify basic functionality, but for the full workflow you might want to run the combined script:
# Run everything (Gazebo + SITL + Controller)
./scripts/run_ardupilot_controller.sh
Or manually launch components in background/separate terminals:
To open a second terminal into the running container:
- Find the container name or ID:
docker ps - Exec into it:
docker exec -it <container_name> bash
Then run your components:
- Terminal 1: Gazebo
./scripts/run_ardupilot_sim.sh runway - Terminal 2: ArduPilot SITL
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console - Terminal 3: Controller
python scripts/run_ardupilot.py --pattern square
Video Recording
The Docker image includes ffmpeg and tools to record the simulation.
Record Flight
Run a flight pattern and save the video automatically:
python scripts/record_flight.py --pattern square --quality high --output my_flight_video
Videos are saved to the recordings/ directory which is mounted inside the container (if you used a volume mount) or can be copied out.
Record Manually
./scripts/record_simulation.sh --duration 30
Headless Mode (CI/Server)
If you are running on a remote server without a display attached, use the headless service. Note that standard Gazebo GUI will not show, but you can still run simulations and record videos (rendering offscreen).
docker compose run --rm simulation-headless
Troubleshooting
"All CUDA-capable devices are busy or unavailable"
Check your NVIDIA drivers on the host. verifying with nvidia-smi.
"Example: Could not connect to display :0"
Make sure you ran xhost +local:docker on the host machine.
If using SSH, ensure X11 forwarding is enabled (ssh -X).
Persisting Data
The docker-compose.yml mounts the project directory. Changes to python scripts inside the container are reflected on your host machine.