飞控执行严格实时的飞行控制回路。伴随 SBC 负责视频、路由、API 和外部通信。Mission Control 选择 USB 直连、LAN 路径或远程中继,同时保持职责分离。
本页内容 +
两台机载计算机,各司其职
飞控管理电机、稳定、GPS 和传感器。伴随计算机——Raspberry Pi、Radxa、Jetson 或其他 Linux SBC——运行 KairOS Drone Agent,并不替代飞控,而是增加视频、遥测中继、云连接、无线电、REST API 和扩展。
地面 Mission Control 在浏览器中运行。它可通过 WebSerial 直连飞控,通过 LAN 访问 Drone Agent,或通过 MQTT/Convex 和 WebRTC 信令连接远程中继。Ground Agent 用于 WFB-ng 场景,将无线电接收转化为易用的本地 Web 链路。
遥测、指令与视频的完整循环
飞控 → 代理
MAVLink UART 通常使用 115200–921600 波特;代理等待心跳并识别固件。
代理 → 本地使用方
路由器将原始 MAVLink 分发至 IPC 套接字、WebSocket、云服务和健康状态。
代理 → 云端
目标链路通过 HTTP/MQTT 路径发布约 2 Hz 遥测和状态。
相机 → 浏览器
V4L2 采集经 H.264 编码、MediaMTX/RTSP,进入所选 WHEP、WebRTC 或 WFB-ng 传输。
GCS → 飞控
解锁、模式、任务等指令沿同一所选路径返回;飞控执行解锁前规则。
ACK → UI
指令确认和新的心跳/状态返回后,UI 才更新状态。
USB 直连、局域网和远程 P2P
| 模式 | 传输 | 使用时机 | 目标参考值 |
|---|---|---|---|
| USB 直连 | WebSerial → 飞控,无需代理 | 台架、配置、校准、固件 | 设计目标 <10 ms |
| LAN 直连 | REST :8080, MAVLink WS :8765, WHEP :8889 | 室内、近距离、开发、现场 LAN | 目标:视频 50–150 ms;遥测 <100 ms |
| 远程 P2P | 4G/互联网、MQTT SDP 信令、WebRTC、Convex | 远程观察与第二路径 | 目标:视频 100–300 ms;遥测 2–5 Hz |
自动传输应先用约四秒寻找 LAN 路径,再转入约十四秒窗口的 P2P 信令。这些均为设计时间间隔,取决于网络,不构成 KairOS SLA。
路由器处理心跳、数据流和多客户端
- 代理以 1 Hz 发送类型为 MAV_TYPE_ONBOARD_CONTROLLER 的伴随设备心跳。
- 收到飞控心跳后,请求姿态、GPS、电池、RC 和传感器数据。
- 约每 30 秒重复数据流请求,以适应飞控重启或状态变化。
- 典型端口:/dev/ttyS0、/dev/ttyUSB0、/dev/ttyACM*;板卡配置决定自动搜索优先级。
- IPC 套接字 /run/kairos/mavlink.sock 向其他服务传递二进制帧。
- Mission Control 解析带 CRC 的 MAVLink v2;ArduPilot/PX4 使用 MAVLink,Betaflight/iNav 使用 MSP v1/v2。
Flight Controller UART
│
▼
kairos-mavlink router
├─ /run/kairos/mavlink.sock
├─ /run/kairos/state.sock
├─ WebSocket :8765
├─ TCP :5760 / UDP :14550
└─ optional cloud relay从 V4L2 采集到原生 H.264 播放
采集
通过 V4L2 打开 USB UVC 或 MIPI CSI;启动前检查可用格式和分辨率。
编码
ffmpeg 使用 H.264 High Profile、Level 4.1、yuv420p 和低延迟标志;存在硬件编码器时优先选择。
发布
编码流发布到 MediaMTX/RTSP,作为后续传输的源。
LAN
WHEP 直接向本地浏览器提供 WebRTC。
远程
MQTT 传递 SDP 信令,随后媒体通过 P2P WebRTC,或必要时经中继传输。
无线电
wfb_tx 通过 WFB-ng 发送 H.264;Ground Agent 接收并在本地重新发布。
nobuffer、low_delay 和较小探测缓冲可缩短队列,但实际延迟由采集、编码器、码率、FEC、无线电、网络和浏览器解码共同决定。KairOS 将按具体配置公布测量结果,而非单一通用数字。
MQTT 负责实时通信,Convex 负责状态和指令队列
目标 KairOS Agent 以约 2 Hz 向 MQTT 发布遥测。MQTT-to-Convex 桥接以每设备约三秒去抖聚合状态,浏览器通过响应式查询接收。指令写入 Convex,代理轮询取得待处理项,将其转换为 MAVLink 并返回 ACK。
Telemetry: FC → Agent → MQTT → bridge → Convex → Mission Control
Commands: Mission Control → Convex queue → Agent poll → MAVLink → FC
Video: Camera → Agent → MQTT SDP → P2P WebRTC → Browser现场节点将无线电接收转换为本地接口
| 客户端 | 路径 |
|---|---|
| 笔记本 | Wi-Fi AP、以太网或 USB CDC-NCM 网络共享 |
| 手机/平板 | 同一局域网中的浏览器或 KairOS Android 路线 |
| 现场显示器 | HDMI + Chromium 自助终端 |
| Mission Control | 包含视频/遥测源的地面站配置 |
配置字面值为 ground-station。它与 Drone Agent 使用同一代码库,但启用的服务不同:接收替代机载编码,AP/网络共享/自助终端替代以飞控为中心的接入流程。
状态存储区分飞行器、遥测、任务和传输
| 状态存储 | 职责 |
|---|---|
| drone-manager | 节点、连接路径和当前飞行器 |
| telemetry-store | 实时状态和 300 样本环形缓冲区 |
| mission-store | 航点、模式、验证、上传状态 |
| video-store | 数据源、传输、播放和错误 |
| settings-store | IndexedDB 持久化和迁移 |
| ground-station-store | 接收器、中继路径、数据源和现场 IO |
解锁是经过确认的链路,不是本地开关
操作员意图
Mission Control 在明确确认后调用 protocol.arm()。
协议
创建 MAV_CMD_COMPONENT_ARM_DISARM,即指令 #400。
传输
帧通过 WebSocket/LAN 或 Convex/云路径到达代理。
串口
代理将指令转发给飞控,不代替飞控仲裁解锁前检查。
飞控验证
固件检查传感器、GPS、电池、安全开关、EKF 和已配置失控保护。
状态确认
HEARTBEAT base_mode 位 7 和 ACK 经 IPC/MQTT 返回;UI 仅在确认后显示 ARMED。

