跳转至

开源飞控平台与技术路线

选择飞控项目首先是选择任务模型、软件架构、硬件生态和验证工具,不是比较哪个项目“功能最多”。同一块飞控板也不一定被所有项目支持,更不能把不同项目的固件文件、参数或板级目标互换。

图中会出现以下平台专名:

  • ArduPilot硬件抽象层(AP_HAL,ArduPilot Hardware Abstraction Layer)用于隔离上层库与具体板卡接口;
  • uORB是PX4内部的异步发布订阅消息总线;
  • NuttX是常用于飞控板的实时操作系统;
  • 可移植操作系统接口(POSIX,Portable Operating System Interface)定义一组操作系统接口约定;
  • 软件在环(SITL,Software In The Loop)在主机上运行飞控代码;
  • 硬件在环(HITL,Hardware In The Loop)在真实飞控硬件上运行固件,并由仿真环境提供反馈。

开源飞控技术路线

四种常见技术路线

下表用于建立方向感,不替代各项目当前版本的正式支持列表。

项目 主要取向 代表性架构特征 适合先验证的场景
Betaflight 小型多旋翼的人工操控、响应和飞行性能 紧凑的嵌入式控制链、任务调度器、板级目标和配置器 控制链、滤波、数字油门、日志与资源约束
INAV 多种遥控模型与导航功能 与小型飞控硬件生态结合的导航、任务和配置体系 导航传感器、返航、固定翼或多旋翼任务
ArduPilot 多载具、自主任务和丰富外设 车辆代码、公共库、硬件抽象层、调度器和软件在环 自动驾驶逻辑、任务、故障处理与硬件抽象
PX4 模块化自动驾驶与机器人系统集成 模块、发布订阅消息总线、驱动、中间件和飞行栈 模块通信、状态估计、控制分配和机器人集成

“主要取向”不是功能排他声明。例如某项目可能同时支持人工飞行、导航和多种载具,但其默认工作流、主要硬件和贡献路径仍可能不同。

先用任务筛选

至少回答:

  1. 目标载具是多旋翼、固定翼、垂直起降、车辆还是其他平台;
  2. 主要是人工操控、辅助飞行还是自主任务;
  3. 是否需要任务规划、避障、冗余或伴随计算机;
  4. 目标飞控板是否有当前维护的正式目标;
  5. 需要哪些传感器、执行器和通信协议;
  6. 是否需要软件在环、硬件在环或自动化回归;
  7. 团队更熟悉C、C++、实时操作系统还是消息化模块;
  8. 修改是否计划向上游提交;
  9. 开源许可证是否与发布方式和商业计划兼容;
  10. 谁负责后续版本升级、安全修复和硬件维护。

三个示例任务

示例任务 强制需求 优先候选 仍需继续确认
5英寸人工操控练习机 小型多旋翼、低延迟人工操控、黑匣子日志、目标板正式支持 Betaflight 接收机、电调协议、目标版本和配置器版本
自主垂直起降验证机 固定翼与多旋翼状态转换、任务规划、位置控制、仿真 ArduPilot或PX4 载具支持、转换策略、外设、团队经验和仿真场景
飞控源码教学平台 主机仿真、清晰模块边界、消息接口、板级移植资料 本专题选择PX4作为贯穿示例 主机系统、稳定版本和后续真实目标板

“优先候选”不是直接采购结论。真实项目仍须使用下方矩阵逐项验证,任一强制项失败就淘汰候选。

本专题为什么用PX4演示

本专题需要一条从源码到软件在环再到只读模块改动的公开路径。PX4官方同时提供:

  • 明确的稳定发布标签;
  • 开发环境和构建说明;
  • 软件在环仿真;
  • 模块示例;
  • 发布订阅消息接口;
  • 板级移植指南。

因此后续实操固定使用PX4 v1.17.0作为教学样例。选择它只为保证示范步骤连续,不表示它适合所有飞行器,也不要求后续硬件购买PX4生态产品。

平台名称不能替代版本

必须同时记录:

  • 仓库地址;
  • 发布标签或提交哈希;
  • 子模块提交;
  • 板级目标名称;
  • 地面配置工具版本;
  • 参数和消息协议版本;
  • 本地补丁;
  • 构建环境。

“使用PX4”“使用Betaflight”无法复现实验。主分支每天变化,同名板卡也可能存在不同硬件版本。

许可证也是架构约束

不同项目采用的开源许可证不同。许可证会影响修改、分发、链接、源代码提供和声明义务。

项目 仓库标示的主要许可证 开发时需要确认
Betaflight GNU通用公共许可证第3版 分发修改版固件时的对应义务
INAV GNU通用公共许可证第3版 修改和分发边界
ArduPilot GNU通用公共许可证第3版 派生代码和发布方式
PX4 BSD三条款许可证 版权声明、许可文本和免责条款

这里只提示许可证差异,不构成法律意见。实际产品还可能包含第三方库、硬件设计、商标和无线电合规要求。

架构比较要落到源码证据

不要只根据宣传页判断。至少找到:

  • 主入口或启动脚本;
  • 调度器或任务模型;
  • 硬件抽象和驱动目录;
  • 传感器与状态估计模块;
  • 控制器和控制分配模块;
  • 参数定义;
  • 消息或协议定义;
  • 日志实现;
  • 板级目标;
  • 自动化测试入口。

同一个概念在不同项目中可能使用不同名称。例如“混控器”“控制分配”“输出混合”都可能承担从控制需求到执行器命令的映射,但数据结构、限幅和故障处理并不相同。

选择矩阵

为候选项目填写:

维度 必须满足 候选A 候选B 证据
载具与任务 待填 待填 待填 官方功能和限制
飞控板 正式目标和硬件版本 待填 待填 支持列表与源码
传感器 型号、总线和冗余 待填 待填 驱动目录与板级定义
执行器 数量、协议和更新率 待填 待填 输出驱动
仿真 所需载具和故障场景 待填 待填 官方仿真文档
地面工具 系统、版本和协议 待填 待填 发布说明
许可证 满足发布计划 待填 待填 仓库许可证
维护 活跃分支和升级责任 待填 待填 提交、发布和维护规则

任何关键维度处于未知状态时,都不应进入板级移植或真实飞行测试。

填写后的教学样例

假设目标是“在普通计算机上学习模块、消息和仿真,不接真实电机;后续可能研究自主多旋翼并做板级移植”。下表依据均核验于2026-09-21:

维度 强制条件 Betaflight INAV ArduPilot PX4 证据
主机仿真 必须有官方路径 各项目开发文档与仿真入口
独立应用示例 必须有固定版本、源码和运行命令 没有采用本专题所需的同类教学路径 没有采用本专题所需的同类教学路径 有库示例,但流程不同 hello示例 PX4 v1.17 hello源码
发布订阅教学 必须有官方消息接口说明 不满足本次特定教学要求 不满足本次特定教学要求 架构不同 uORB明确 PX4 uORB
自主多旋翼 后续需要 非主要教学路径 支持 支持 支持 各项目官方功能与载具文档
板级移植资料 后续需要 有目标配置 有目标配置 有AP_HAL与板级支持 有独立移植指南 PX4移植指南
本次结论 所有强制条件通过 淘汰 淘汰 淘汰 选择 固定到PX4 v1.17.0

这里不使用简单总分,因为“目标板不受支持”“许可证不满足发布计划”等强制条件不能被其他高分抵消。

前三个项目被“淘汰”只针对这份需要官方PX4式模块和发布订阅教程的教学任务,不表示它们不适合其他飞行任务。若任务改为5英寸人工操控练习机,强制条件也会改变,Betaflight就可能成为优先候选。

常见错误

因为界面熟悉就选择固件

配置器只显示固件已经实现的能力。开发者最终需要理解源码、板级目标、消息和测试体系。

因为处理器相同就交叉刷写

处理器相同不代表时钟、闪存布局、引脚、电源控制、传感器和引导加载程序相同。

先写功能,再考虑上游

若计划长期维护,应在设计前阅读贡献规则、代码风格、测试要求和版本兼容策略。大面积偏离上游会持续增加合并和升级成本。

把仿真支持理解为所有硬件行为都已验证

软件在环可以验证大量逻辑,但不能证明真实总线时序、电源、传感器噪声、执行器和射频链路正确。

检查理解

  1. 为什么不能只按“功能最多”选择飞控项目?
  2. 同一飞控板为什么可能只支持部分开源固件?
  3. 平台比较为什么必须包含许可证和维护责任?
  4. 软件在环通过后还缺少哪些硬件证据?
  5. 哪些信息共同定义了“实际使用的固件版本”?

主要参考