92da41138b2c2202e12d8d78f404544adc8b6685
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
git clone <repository-url> ~/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:
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 scripts/run_simulation.sh
# Wait for EKF initialization (~15 seconds), then:
# mode guided
# arm throttle force
# takeoff 5
ROS 2 Mode
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
License
MIT License
Description
Languages
Python
78.7%
Shell
21.3%