# UAV-UGV Simulation **GPS-Denied Navigation with Vision-Based Localization** A ROS 2 simulation environment for UAV and UGV development using GPS-denied navigation with vision-based localization, while maintaining GPS-based geofencing for safety. ## Features - **GPS-Denied Navigation**: Visual odometry, optical flow, and EKF sensor fusion - **GPS-Based Geofencing**: Safety boundaries using GPS (navigation remains GPS-free) - **Multi-Vehicle Support**: Coordinated UAV and UGV operations - **ArduPilot SITL**: Full flight controller simulation - **Gazebo Harmonic**: Modern physics simulation - **ROS 2 Integration**: Full ROS 2 Humble/Jazzy support ## Requirements - Ubuntu 22.04 or 24.04 (WSL2 supported) - 16GB RAM recommended - 50GB disk space - NVIDIA GPU recommended (software rendering available) ## Installation ```bash git clone ~/sim/uav_ugv_simulation cd ~/sim/uav_ugv_simulation bash setup.sh ``` Installation takes 20-40 minutes (builds ArduPilot from source). ## Quick Start ### Autonomous Mode (Recommended) The UAV automatically arms, takes off, and executes a mission: ```bash cd ~/sim/uav_ugv_simulation source activate_venv.sh # Hover mission bash scripts/run_autonomous.sh --mission hover # Square pattern bash scripts/run_autonomous.sh --mission square # Circle pattern bash scripts/run_autonomous.sh --mission circle # WSL/Software rendering bash scripts/run_autonomous.sh --software-render --mission hover ``` ### Manual Mode (MAVProxy) ```bash bash scripts/run_simulation.sh # Wait for EKF initialization (~15 seconds), then: # mode guided # arm throttle force # takeoff 5 ``` ### ROS 2 Mode ```bash source /opt/ros/humble/setup.bash ros2 launch uav_ugv_simulation full_simulation.launch.py ``` ## Mission Types | Mission | Description | |---------|-------------| | `hover` | Take off, hover for 30 seconds, land | | `square` | Fly a 5m square pattern | | `circle` | Fly a circular pattern | ## GPS-Denied Navigation **Navigation** uses only relative positioning: - Visual odometry from cameras - Optical flow sensors - IMU integration - Local coordinate frames (NED) **GPS is ONLY used for geofencing** (safety boundaries), NOT for navigation or position control. ## Project Structure ``` uav_ugv_simulation/ ├── setup.sh # Installation script ├── scripts/ │ ├── run_autonomous.sh # Autonomous simulation │ ├── run_simulation.sh # Manual simulation │ └── kill_simulation.sh # Cleanup ├── src/ │ ├── control/ # UAV/UGV controllers │ ├── vision/ # Visual odometry, optical flow │ ├── localization/ # EKF sensor fusion │ ├── navigation/ # Path planning │ └── safety/ # Geofencing, failsafe ├── launch/ # ROS 2 launch files ├── config/ # Configuration files ├── models/ # Gazebo models └── worlds/ # Gazebo worlds ``` ## Commands | Command | Description | |---------|-------------| | `bash scripts/run_autonomous.sh` | Run autonomous simulation | | `bash scripts/run_simulation.sh` | Run manual simulation | | `bash scripts/kill_simulation.sh` | Kill all processes | | `bash scripts/uninstall.sh` | Uninstall ArduPilot | ## Documentation - [Setup Guide](docs/setup_guide.md) - [Usage Guide](docs/usage.md) - [Architecture](docs/architecture.md) - [GPS-Denied Navigation](docs/gps_denied_navigation.md) - [WSL Setup](docs/wsl_setup_guide.md) - [Troubleshooting](docs/troubleshooting.md) ## License MIT License