# Drone Landing Simulation (GPS-Denied) A GPS-denied drone landing simulation with multiple backends. Land a drone on a moving platform using only relative sensors (IMU, altimeter, camera). ## Quick Start ### Standalone Mode (No ROS 2 - Any Platform) ```bash source activate.sh python standalone_simulation.py --pattern circular --speed 0.3 ``` ### Gazebo + ROS 2 (Linux/WSL2) **Terminal 1:** ```bash ros2 launch gazebo/launch/drone_landing.launch.py ``` **Terminal 2:** ```bash source activate.sh python run_gazebo.py --pattern circular python camera_viewer.py # Optional: view camera feed ``` ### ArduPilot SITL (Realistic Flight Controller) **Terminal 1:** ```bash source ~/ardu_ws/install/setup.bash ros2 launch ardupilot_gz_bringup iris_runway.launch.py ``` **Terminal 2:** ```bash mavproxy.py --console --map --master=:14550 ``` ## Installation ```bash # Ubuntu/Debian (includes ROS 2 + Gazebo) ./setup/install_ubuntu.sh # With ArduPilot SITL ./setup/install_ardupilot.sh # Activate environment source activate.sh ``` | Platform | Install Script | |----------|---------------| | Ubuntu/Debian | `./setup/install_ubuntu.sh` | | ArduPilot SITL | `./setup/install_ardupilot.sh` | | Arch Linux | `./setup/install_arch.sh` | | macOS | `./setup/install_macos.sh` | | Windows | `.\setup\install_windows.ps1` | ## Files | File | Description | |------|-------------| | `standalone_simulation.py` | **All-in-one** (no ROS 2) | | `run_gazebo.py` | Gazebo controllers | | `run_ardupilot.py` | ArduPilot launcher | | `camera_viewer.py` | Drone camera window | | `drone_controller.py` | **Your landing algorithm** | | `config.py` | Configuration | ## Sensors Available | Sensor | Data | |--------|------| | IMU | Orientation (roll, pitch, yaw), angular velocity | | Altimeter | Altitude, vertical velocity | | Velocity | Estimated velocity (x, y, z) | | Camera | Downward-facing image | | Landing Pad | Relative position when visible | ## Configuration Edit `config.py` to customize: - Drone/rover positions - Controller gains (Kp, Kd) - Camera settings - Landing thresholds ## Command Line Options ```bash # Movement patterns --pattern, -p stationary, linear, circular, square, random --speed, -s Speed in m/s (default: 0.5) --amplitude, -a Amplitude in meters (default: 2.0) ``` ## Documentation | Document | Description | |----------|-------------| | [Installation](docs/installation.md) | Full setup guide | | [Architecture](docs/architecture.md) | System overview | | [ArduPilot](docs/ardupilot.md) | ArduPilot SITL guide | | [Gazebo](docs/gazebo.md) | Gazebo guide |