# 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 ```bash # Install (choose your platform) ./setup/install_ubuntu.sh # Ubuntu/Debian ./setup/install_arch.sh # Arch Linux ./setup/install_macos.sh # macOS .\setup\install_windows.ps1 # Windows (PowerShell) # Activate and run source activate.sh # Linux/macOS . .\activate.ps1 # Windows python standalone_simulation.py --pattern circular --speed 0.3 ``` ## Platform Compatibility | Feature | Ubuntu | Arch | macOS | Windows | |---------|--------|------|-------|---------| | Standalone | ✅ | ✅ | ✅ | ✅ | | ROS 2 | ✅ | ⚠️ | ❌ | ❌ | | Gazebo | ✅ | ⚠️ | ❌ | ❌ | **All platforms support standalone mode** - no ROS 2 required! ## Files | File | Description | |------|-------------| | `standalone_simulation.py` | **All-in-one simulation (no ROS 2)** | | `simulation_host.py` | PyBullet simulator (ROS 2 mode) | | `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 ```bash python standalone_simulation.py --help Options: --pattern, -p stationary, linear, circular, square --speed, -s Speed in m/s (default: 0.5) --amplitude, -a Amplitude in meters (default: 2.0) ``` ## GPS-Denied 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](docs/installation.md) | All platform setup guides | | [Architecture](docs/architecture.md) | System components | | [Protocol](docs/protocol.md) | Sensor data formats | | [Drone Guide](docs/drone_guide.md) | Landing algorithm guide | | [PyBullet](docs/pybullet.md) | PyBullet setup | | [Gazebo](docs/gazebo.md) | Gazebo setup (Linux) | ## Getting Started 1. Run `python standalone_simulation.py` 2. Watch the drone land automatically 3. Edit `drone_controller.py` to implement your own algorithm 4. Test: `python standalone_simulation.py --pattern circular`