# Architecture Overview ## Operation Modes ### 1. Standalone (Any Platform) Single process, no ROS 2 required: ```bash python standalone_simulation.py --pattern circular ``` ``` ┌────────────────────────────────────────┐ │ standalone_simulation.py │ │ ┌──────────────────────────────────┐ │ │ │ PyBullet Physics + Camera │ │ │ │ Built-in Controller │ │ │ │ Rover Movement │ │ │ └──────────────────────────────────┘ │ └────────────────────────────────────────┘ ``` ### 2. Gazebo + ROS 2 (2 Terminals) **Terminal 1:** ```bash ros2 launch gazebo/launch/drone_landing.launch.py ``` **Terminal 2:** ```bash python run_gazebo.py --pattern circular ``` ``` Terminal 1 Terminal 2 ┌───────────────────┐ ┌───────────────────┐ │ Gazebo + Bridge │◄──────►│ run_gazebo.py │ │ (Physics) │ ROS │ + Controllers │ └───────────────────┘ └───────────────────┘ ``` ### 3. ArduPilot SITL (2 Terminals) **Terminal 1:** ```bash ros2 launch ardupilot_gz_bringup iris_runway.launch.py ``` **Terminal 2:** ```bash mavproxy.py --console --map --master=:14550 ``` ``` ┌─────────────────────────────────────────────┐ │ Single Launch Command │ │ (Starts SITL + Gazebo + RViz) │ ├─────────────────────────────────────────────┤ │ ArduPilot SITL ◄──► Gazebo ◄──► ROS 2 │ │ ▲ │ │ │ /ap/* topics │ │ ▼ │ │ MAVProxy (GCS) │ └─────────────────────────────────────────────┘ ``` ## Key Components | Component | Description | |-----------|-------------| | `drone_controller.py` | Your landing algorithm | | `gazebo_bridge.py` | Gazebo ↔ ROS bridge | | `mavlink_bridge.py` | MAVLink commands | | `camera_viewer.py` | Camera display | ## ROS 2 Topics | Topic | Direction | Description | |-------|-----------|-------------| | `/drone/telemetry` | ← | Sensor data (JSON) | | `/cmd_vel` | → | Velocity commands | | `/drone/camera` | ← | Camera images | | `/rover/telemetry` | ← | Landing pad position | ## ArduPilot Topics | Topic | Type | |-------|------| | `/ap/pose/filtered` | Position | | `/ap/twist/filtered` | Velocity | | `/ap/imu/filtered` | IMU | | `/ap/battery` | Battery |