diff --git a/README.md b/README.md index 6ab8893..333e3f1 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console --wipe-eeprom ## Documentation - [Installation Guide](docs/installation.md) +- [Docker Guide](docs/docker.md) - [ArduPilot Guide](docs/ardupilot.md) - [Drone Controller Guide](docs/drone_guide.md) - [Architecture](docs/architecture.md) diff --git a/docs/docker.md b/docs/docker.md new file mode 100644 index 0000000..c05d19c --- /dev/null +++ b/docs/docker.md @@ -0,0 +1,126 @@ +# 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 + +1. **Docker Engine**: Install Docker for your OS. +2. **NVIDIA GPU & Drivers**: Ensure you have an NVIDIA GPU and proprietary drivers installed. +3. **NVIDIA Container Toolkit**: Required for GPU pass-through to Docker. + + ```bash + # 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 + +```bash +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: + +```bash +xhost +local:docker +``` + +### 3. Run the Container + +```bash +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: + +```bash +./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: + +```bash +# 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: +1. Find the container name or ID: `docker ps` +2. Exec into it: `docker exec -it bash` + +Then run your components: +* **Terminal 1:** Gazebo + ```bash + ./scripts/run_ardupilot_sim.sh runway + ``` +* **Terminal 2:** ArduPilot SITL + ```bash + sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --console + ``` +* **Terminal 3:** Controller + ```bash + 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: + +```bash +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 +```bash +./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). + +```bash +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.