# DonkeyCar RL Batch Automation and Setup Guide ## System Requirements - Windows 10/11 machine (with DonkeyCar Unity Simulator installed) - WSL2 with Ubuntu (Python 3.x installed) - DonkeyCar Unity Simulator running in Windows, Remote Control enabled --- ## 1. **WSL (Linux) Setup** ### A. Install Python, pip, and core packages ```bash sudo apt update && sudo apt install -y python3-pip git pip3 install --upgrade pip pip3 install stable-baselines3 gymnasium gym-donkeycar numpy matplotlib # If pip install gym-donkeycar fails, use: pip3 install git+https://github.com/tawnkramer/gym-donkeycar.git ``` ### B. Place scripts Copy these into `/home/paulh/.pi/agent/`: - `donkeycar_sb3_runner.py` - `manual_multiepisode_batch.sh` (and make executable) - Any grid/outer loop script (`donkeycar_outer_loop.py`, as needed) --- ## 2. **Unity DonkeyCar Simulator Setup (Windows)** - Download/install Unity DonkeyCar sim (from DonkeyCar/tawnkramer Github or releases page) - Open simulator, select "Donkey Generated Track" and enable Remote (SocketAPI) mode - Ensure port 9091 is listening (default); leave sim running and visible --- ## 3. **Running Robust Batches (Best Practice)** ### Clean multi-episode approach: **Do NOT rapidly kill/restart agents.** Use scripts that: - Open one connection, run multiple episodes using `env.reset()` in a loop - Cleanly call `env.close()` - Batch script launches process, waits a couple seconds, repeats #### Sample batch script (`manual_multiepisode_batch.sh`): ```bash #!/bin/bash for i in {1..20}; do echo "===== RUN $i ===== $(date)" | tee -a manual-multiepisode-batch.log python3 donkeycar_sb3_runner.py >> manual-multiepisode-batch.log 2>&1 echo "===== END RUN $i ===== $(date)" | tee -a manual-multiepisode-batch.log sleep 2 done ``` Make executable: ```bash chmod +x manual_multiepisode_batch.sh ``` Run in background: ```bash nohup ./manual_multiepisode_batch.sh & ``` --- ## 4. **Debugging/Recovery** - If sim blanks/hangs, first check for stuck agent processes: `ps aux | grep donkeycar_sb3_runner` - Always allow scripts to call `env.close()` - If hang persists: restart Unity DonkeyCar Sim in Windows --- ## 5. **Automation Flow Summary** | Step | Where | Details | |-------------|-----------|-------------------------------------------| | Install | WSL/Linux | pip install ... | | Prepare | WSL/Linux | Place scripts, ensure Python dependencies | | Sim start | Windows | Start DonkeyCar Unity Sim | | Run batch | WSL/Linux | nohup ./manual_multiepisode_batch.sh ... | | Monitor | Both | Car resets, batch log grows, check hangs | --- See included Python scripts for reusable RL runner and grid search outer loop logic.