ARYA-mgc/swayam_drone_communication-
GitHub: ARYA-mgc/swayam_drone_communication-
一个轻量级无人机通信框架,提供基于 MAVLink 的遥测、路径规划与编队协同,解决无 GPS 下的导航与多机协同问题。
Stars: 13 | Forks: 0
# Swayam — MAVLink 多无人机编队管理


## 功能特性
| 功能 | 详情 |
|---|---|
| **INS 导航** | 通过 IMU 积分进行死区推算——机身到世界坐标旋转、重力补偿、速度与位置跟踪。无需 GPS。 |
| **A* 路径规划** | 在 50×50 米的占用网格上进行 8 方向 A* 搜索,使用欧几里得启发式与障碍膨胀。 |
| **MAVLink 集成** | `SET_POSITION_TARGET_LOCAL_NED` 设定点、ARM/DISARM、模式切换、`SCALED_IMU2` 遥测。通过 UDP、TCP 或串口工作。 |
| **编队协同** | 多无人机并行线程运行。广播整体任务或单独指派。支持紧急全体降落。 |
| **SQLite 数据库** | 3 表结构:`flight_logs`、`ins_telemetry`、`missions`。线程安全,支持 JSON 导出。 |
| **Web 仪表盘** | 运行在 `:5050` 的 Flask UI——实时编队卡片、INS 地图、可筛选日志表、广播控制。每 4 秒自动刷新。 |
| **模拟模式** | 完整硬件无关模拟——合成 IMU、路径执行、数据库写入。适用于 CI 与开发。 |
## 架构
```
swayam/
├── src/
│ └── swayam_core.py # Core library — 5 classes
├── swayam_dashboard.py # Flask web dashboard
├── scripts/
│ └── run_simulation.py # Headless simulation runner
├── tests/
│ └── test_swayam.py # 30+ pytest unit tests
├── logs/ # Auto-created — DB exports
├── .github/
│ └── workflows/
│ └── ci.yml # GitHub Actions CI
├── requirements.txt
└── README.md
```
### 核心类(`src/swayam_core.py`)
```
INSState Dead-reckoning navigation
GridMap + A* Occupancy grid & optimal path planning
DroneAgent Single drone — MAVLink, telemetry, missions
FlightDatabase SQLite persistence layer
SwayamFleet Fleet coordinator — parallel missions, logging
```
## 快速开始
### 1. 克隆并安装
```
git clone https://github.com/YOUR_USERNAME/swayam.git
cd swayam
pip install -r requirements.txt
```
### 2. 运行模拟(无需硬件)
```
python scripts/run_simulation.py
```
输出:
```
╔══════════════════════════════════════╗
║ SWAYAM — Simulation Mode ║
╚══════════════════════════════════════╝
[LAUNCH] ALPHA → N=15.0 E=12.0 Alt=10.0m
[LAUNCH] BETA → N=-8.0 E=18.0 Alt=15.0m
[LAUNCH] GAMMA → N=5.0 E=-5.0 Alt=12.0m
...
✓ Simulation complete.
```
### 3. 启动仪表盘
```
python swayam_dashboard.py
# 打开 http://localhost:5050
```
### 4. 运行测试
```
pytest tests/ -v
```
## 连接真实硬件
### ArduPilot / Pixhawk(UDP)
```
from src.swayam_core import SwayamFleet
fleet = SwayamFleet()
fleet.add_drone("ALPHA", system_id=1,
connection_string="udp:192.168.1.10:14550",
simulation=False)
fleet.connect_all()
fleet.execute_mission("ALPHA", goal_n=20.0, goal_e=15.0, altitude=10.0)
```
### STM32 + CAN-MAVLink 桥接(串口)
```
fleet.add_drone("BETA", system_id=2,
connection_string="/dev/ttyUSB0,115200",
simulation=False)
```
### SITL(软件在环)
```
# 启动 ArduPilot SITL
sim_vehicle.py -v ArduCopter --out=udp:127.0.0.1:14550
# 连接 Swayam
python -c "
from src.swayam_core import SwayamFleet
f = SwayamFleet()
f.add_drone('SIM', connection_string='udp:127.0.0.1:14550', simulation=False)
f.connect_all()
f.execute_mission('SIM', 10, 10, 15)
"
```
## INS 导航细节
`INSState` 类实现基础捷联惯性导航系统:
1. **姿态更新** — 陀螺仪积分(欧拉角):
- 滚转角 += ωx · dt
- 俯仰角 += ωy · dt
- 偏航角 += ωz · dt
2. **机身→世界旋转** — 对加速度计读数应用完整 ZYX 欧拉旋转矩阵。
3. **重力移除** — 在世界坐标系 Z(北东地,下为正)减去 `g = 9.80665 m/s²`。
4. **速度积分**:
- v += a_world · dt
5. **位置积分**:
- p += v · dt
INS 数据来源于 `SCALED_IMU2` MAVLink 消息(单位:毫重力、毫弧度/秒)。
## A* 路径规划
- 网格:50×50 单元格,每格 1 米
- 起点:无人机当前 INS 位置(映射到网格)
- 终点:目标 N/E 坐标
- 移动:8 方向(允许对角)
- 启发式:欧几里得距离(可采纳 → 最优)
- 障碍支持:基于半径的膨胀
```
fleet.add_obstacle(x=10, y=15, radius=2) # 5x5 blocked area
path = fleet.plan_path("ALPHA", goal_n=20, goal_e=18)
```
## 仪表盘 API
| 端点 | 方法 | 描述 |
|---|---|---|
| `/` | GET | Web 仪表盘 |
| `/api/status` | GET | 所有无人机状态 + INS |
| `/api/logs` | GET | 近期飞行日志 |
| `/api/ins/` | GET | INS 遥测历史 |
| `/api/mission` | POST | 广播任务 `{goal_n, goal_e}` |
| `/api/emergency_land` | POST | 立即让所有无人机降落 |
| `/api/export` | GET | 导出数据库为 JSON |
## 数据库架构
```
flight_logs (id, drone_id, timestamp, level, event, details)
ins_telemetry (id, drone_id, timestamp, pos_n, pos_e, pos_d,
vel_n, vel_e, vel_d,
roll, pitch, yaw)
missions (id, drone_id, start_time, end_time, status,
path_json, notes)
```
## CI/CD
GitHub Actions 在每次推送时运行:
1. 在 Python 3.9、3.10、3.11 上运行测试
2. 生成覆盖率报告
3. 完整无头模拟
4. 将 `swayam_export.json` 作为构件上传
## 许可证
MIT — 参见 [许可证](LICENSE)
## 路线图
- [ ] GPS/INS 融合(扩展卡尔曼滤波)
- [ ] 3D 体素网格用于避障
- [ ] WebSocket 实时遥测(取代轮询)
- [ ] ROS 2 桥接节点
- [ ] 地理围栏强制执行
- [ ] 多无人机冲突解决
标签:A*算法, Flask Web仪表盘, GitHub Actions, INS惯性导航, MAVLink, Python, SEO无人机通信系统, SQLite数据库, TCP通信, UDP通信, 串口通信, 内核监控, 地面控制站, 多无人机协同, 实时遥测, 广播任务, 开源无人机, 无人机组网, 无人机通信, 无后门, 日志导出, 机器人通信, 模块化框架, 模拟仿真, 死推算, 紧急降落, 线程安全, 自动笔记, 自动驾驶, 路径规划, 轻量级通信框架, 逆向工具, 面向对象设计