Docker Docs
This commit is contained in:
126
docs/docker.md
Normal file
126
docs/docker.md
Normal file
@@ -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 <container_name> 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.
|
||||
Reference in New Issue
Block a user