127 lines
9.2 KiB
Markdown
127 lines
9.2 KiB
Markdown
# Architecture Overview
|
|
|
|
## System Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ SIMULATION LAYER │
|
|
│ ┌──────────────────┐ ┌──────────────────┐ ┌───────────────┐ │
|
|
│ │ Gazebo World │ │ ArduPilot SITL │ │ MAVROS │ │
|
|
│ │ (Physics, Viz) │ │ (Autopilot) │ │ (ROS Bridge) │ │
|
|
│ └────────┬─────────┘ └────────┬─────────┘ └───────┬───────┘ │
|
|
└───────────┼─────────────────────┼─────────────────────┼─────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ SENSOR LAYER │
|
|
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────────┐ │
|
|
│ │ Forward │ │ Downward │ │ IMU │ │ Range- │ │
|
|
│ │ Camera │ │ Camera │ │ │ │ finder │ │
|
|
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └────┬─────┘ │
|
|
└────────┼───────────────┼───────────────┼──────────────┼────────┘
|
|
│ │ │ │
|
|
▼ ▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ PERCEPTION LAYER │
|
|
│ ┌─────────────────────┐ ┌────────────────┐ ┌──────────────┐ │
|
|
│ │ Visual Odometry │ │ Optical Flow │ │ Landmark │ │
|
|
│ │ (ORB/SIFT/SURF) │ │ (Lucas-Kanade) │ │ Detection │ │
|
|
│ └──────────┬──────────┘ └───────┬────────┘ └──────┬───────┘ │
|
|
└─────────────┼─────────────────────┼──────────────────┼──────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ LOCALIZATION LAYER │
|
|
│ ┌──────────────────────┐ │
|
|
│ │ Position Estimator │ │
|
|
│ │ (EKF Sensor Fusion)│ │
|
|
│ └──────────┬───────────┘ │
|
|
└───────────────────────────────┼─────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ NAVIGATION LAYER │
|
|
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
|
│ │ Local Planner │ │ Obstacle │ │ Waypoint │ │
|
|
│ │ │ │ Avoidance │ │ Follower │ │
|
|
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
|
|
└───────────┼────────────────────┼────────────────────┼───────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ CONTROL LAYER │
|
|
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
|
│ │ UAV Controller │ │ UGV Controller │ │ Mission Planner │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │
|
|
└───────────┼────────────────────┼────────────────────┼───────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ SAFETY LAYER │
|
|
│ ┌─────────────────────────┐ ┌─────────────────────────────┐ │
|
|
│ │ Geofence Monitor │ │ Failsafe Handler │ │
|
|
│ │ (GPS-based only) │ │ (Vision loss, battery) │ │
|
|
│ └─────────────────────────┘ └─────────────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Module Descriptions
|
|
|
|
### Vision Module (`src/vision/`)
|
|
- **camera_processor.py**: Image preprocessing, undistortion
|
|
- **visual_odometry.py**: Feature-based pose estimation
|
|
- **optical_flow.py**: Velocity from image flow
|
|
- **object_detector.py**: Landmark/obstacle detection
|
|
- **visual_servoing.py**: Vision-based control
|
|
|
|
### Localization Module (`src/localization/`)
|
|
- **position_estimator.py**: Sensor fusion for position
|
|
- **ekf_fusion.py**: Extended Kalman Filter implementation
|
|
- **landmark_tracker.py**: Track known visual features
|
|
|
|
### Navigation Module (`src/navigation/`)
|
|
- **local_planner.py**: Path planning in local frame
|
|
- **obstacle_avoidance.py**: Reactive obstacle avoidance
|
|
- **waypoint_follower.py**: Sequential waypoint navigation
|
|
|
|
### Control Module (`src/control/`)
|
|
- **uav_controller.py**: Quadcopter flight control
|
|
- **ugv_controller.py**: Ground vehicle control
|
|
- **mission_planner.py**: Multi-vehicle coordination
|
|
|
|
### Safety Module (`src/safety/`)
|
|
- **geofence_monitor.py**: GPS-based boundary checking
|
|
- **failsafe_handler.py**: Emergency procedures
|
|
|
|
## Data Flow
|
|
|
|
```
|
|
Camera Image → Feature Detection → Feature Matching →
|
|
Essential Matrix → Relative Pose → EKF Update →
|
|
Local Position → Navigation Controller →
|
|
Velocity Commands → MAVROS → ArduPilot
|
|
```
|
|
|
|
## ROS 2 Topics
|
|
|
|
### Sensor Topics
|
|
- `/uav/camera/forward/image_raw`
|
|
- `/uav/camera/downward/image_raw`
|
|
- `/uav/imu/data`
|
|
- `/uav/rangefinder/range`
|
|
|
|
### Perception Topics
|
|
- `/uav/visual_odometry/pose`
|
|
- `/uav/optical_flow/velocity`
|
|
|
|
### Control Topics
|
|
- `/uav/mavros/setpoint_position/local`
|
|
- `/uav/mavros/setpoint_velocity/cmd_vel`
|
|
- `/ugv/cmd_vel`
|
|
|
|
### Safety Topics
|
|
- `/geofence/status`
|
|
- `/failsafe/active`
|
|
|