7a1c4ba22794a7305154cd224864bbe90f24d5a2
Drone Landing Simulation (GPS-Denied)
A GPS-denied drone landing simulation using relative sensors (IMU, altimeter, camera, landing pad detection) with PyBullet and Gazebo simulators.
Quick Start
Windows (Standalone - No ROS 2 Required)
. .\activate.ps1
python standalone_simulation.py
# With moving rover
python standalone_simulation.py --pattern circular --speed 0.3
Linux (Full ROS 2 Setup)
source activate.sh
# Terminal 1: Simulator
python simulation_host.py
# Terminal 2: ROS bridge
python ros_bridge.py
# Terminal 3: Controllers
python controllers.py --pattern circular --speed 0.3
Architecture
┌─────────────────────────────────────────────────────────────────────────┐
│ STANDALONE MODE (Windows) FULL MODE (Linux + ROS 2) │
│ ───────────────────────── ────────────────────────── │
│ │
│ ┌──────────────────────┐ ┌───────────────┐ ┌───────────────┐ │
│ │standalone_simulation │ │simulation_host│◄──►│ ros_bridge │ │
│ │ (All-in-one) │ └───────────────┘ └───────┬───────┘ │
│ └──────────────────────┘ │ │
│ ┌─────────▼─────────┐ │
│ │ controllers.py │ │
│ │ (Drone + Rover) │ │
│ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
Files
| File | Description |
|---|---|
standalone_simulation.py |
Windows: All-in-one simulation (no ROS 2) |
simulation_host.py |
PyBullet physics simulator |
ros_bridge.py |
UDP ↔ ROS 2 bridge |
gazebo_bridge.py |
Gazebo ↔ ROS 2 bridge |
controllers.py |
Runs drone + rover controllers |
drone_controller.py |
Drone landing logic (edit this) |
rover_controller.py |
Moving landing pad |
Controller Options
# Standalone (Windows)
python standalone_simulation.py --pattern circular --speed 0.3
# Full mode (Linux)
python controllers.py --pattern circular --speed 0.3
Options:
--pattern, -p Rover pattern: stationary, linear, circular, square
--speed, -s Rover speed in m/s (default: 0.5)
--amplitude, -a Rover amplitude in meters (default: 2.0)
GPS-Denied Sensors
The drone has no GPS. Available sensors:
| Sensor | Data |
|---|---|
| IMU | Orientation, angular velocity |
| Altimeter | Altitude, vertical velocity |
| Velocity | Estimated horizontal velocity |
| Camera | 320x240 downward-facing image |
| Landing Pad | Relative position when visible |
Documentation
| Document | Description |
|---|---|
| Installation | Setup for Ubuntu, macOS, Windows |
| Architecture | System components and data flow |
| Protocol | Sensor data formats |
| Drone Guide | How to implement landing logic |
| Rover Controller | Movement patterns |
| PyBullet | PyBullet-specific setup |
| Gazebo | Gazebo-specific setup (Linux only) |
Platform Support
| Platform | Standalone | Full (ROS 2) | Gazebo |
|---|---|---|---|
| Windows | ✅ | ⚠️ Complex | ❌ |
| Linux | ✅ | ✅ | ✅ |
| macOS | ✅ | ⚠️ Limited | ❌ |
Getting Started
- Windows: Run
python standalone_simulation.py - Linux: Read docs/drone_guide.md
- Edit
drone_controller.pyto implement your algorithm - Test with different rover patterns
Description
Languages
Python
66.3%
Shell
25.4%
PowerShell
4.5%
Dockerfile
3.8%