跳转至

飞控固件的职责与安全边界

飞控固件不是“读取遥控器后给电机一个数值”的单一程序。它需要在确定的时间边界内完成硬件初始化、传感器采集、状态估计、控制计算、执行器输出、故障处理、参数管理、通信和日志记录。

飞控固件职责边界

从输入到物理响应

一条最小控制链包括:

  1. 传感器驱动取得角速度、加速度和其他观测量;
  2. 数据经过时间戳、比例、坐标变换、校准和滤波;
  3. 状态估计器计算姿态、速度、位置或其他状态;
  4. 遥控输入、任务规划器或上层导航产生目标值;
  5. 控制器根据目标与估计状态计算期望力和力矩;
  6. 控制分配或混控把期望量转换为各执行器命令;
  7. 输出驱动通过数字油门、脉宽或总线发送命令;
  8. 飞行器运动改变,传感器再次观测,闭环继续。

任何一个环节的单位、方向、时间或有效状态错误,都可能在后续环节被放大。

三类工作不能混在一起

启动阶段

启动阶段通常只执行一次,负责:

  • 建立时钟、内存和基础硬件环境;
  • 初始化板级引脚和电源控制;
  • 启动总线和设备驱动;
  • 读取并校验持久化参数;
  • 检查硬件身份和固件目标;
  • 建立任务、消息通道和日志;
  • 进入可配置但默认不输出动力的状态。

启动完成不等于允许解锁。传感器健康、姿态估计、遥控链、电池和安全开关等条件仍需通过解锁前检查。

周期控制

周期控制按照固定或事件驱动的节奏反复执行,包括:

  • 读取最新传感器样本;
  • 更新估计状态;
  • 生成控制目标;
  • 运行控制器;
  • 处理限幅和控制分配;
  • 更新执行器输出;
  • 监视截止期限和故障状态。

这条路径要求确定的时间上界。不能把不可预测的文件写入、网络等待或大量格式化输出直接放进高优先级控制路径。

后台工作

参数保存、日志落盘、地面站通信、文件传输和部分健康统计可以放在较低优先级任务中,但仍要限制资源占用。后台任务失控同样可能耗尽处理器时间、内存或总线带宽。

固件能控制什么,不能保证什么

固件可以:

  • 检查已知状态;
  • 拒绝不满足条件的解锁请求;
  • 限制输出;
  • 检测部分传感器、通信和执行器故障;
  • 根据已配置策略降级、降落、返航或解除动力;
  • 记录故障前后的数据。

固件不能单独保证:

  • 螺旋桨安装正确;
  • 电机和电调有足够热余量;
  • 电源不会因焊点或连接器问题掉电;
  • 全球导航卫星系统(GNSS,Global Navigation Satellite System)和磁力计没有环境干扰;
  • 无线链路在所有环境中可靠;
  • 任意故障后仍能安全返航;
  • 修改后的控制算法在真实飞行中稳定。

软件安全结论必须与硬件、安装、环境和测试证据一起成立。

四类需要同时保存的工程产物

产物 至少记录 缺失后果
源码版本 仓库、提交哈希、子模块、补丁 无法知道实际构建了什么
构建信息 工具链、命令、板级目标、选项、产物校验值 无法复现同一二进制
运行配置 参数、校准、机型、端口和安全策略 同一固件表现可能完全不同
运行证据 日志、测试步骤、硬件版本和结果 无法证明修改是否安全

只备份固件文件而不保存配置,或者只保存配置而不知道固件提交,都不足以复现实验。

按风险给改动分级

级别 示例 最低验证要求
注释、文档、主机端工具文字 静态检查和相关测试
只读诊断、日志字段、非关键遥测 单元测试、仿真、资源和兼容性检查
传感器驱动、参数迁移、任务调度 仿真、硬件台架、故障注入和回滚验证
极高 状态估计、控制器、混控、解锁和失效策略 独立审查、分层测试、受控飞行和明确安全论证

改动行数不能代表风险。一个符号、单位或数组索引错误可能比新增几百行只读工具代码更危险。

开发前的硬门禁

  • 使用专门的测试机和可恢复飞控,不直接修改唯一可用设备;
  • 保留官方或已验证固件、原始参数和硬件接线记录;
  • 首次刷写、驱动验证和输出检查必须拆除螺旋桨;
  • 明确引导加载程序或串行线调试(SWD,Serial Wire Debug)恢复路径;
  • 不在人员、财产或无线电敏感环境中验证未知行为;
  • 每次测试只改变可解释的一组变量;
  • 测试失败时先保留日志和版本信息,再恢复基线。

检查理解

  1. 为什么构建成功不能证明固件可以安全飞行?
  2. 周期控制任务为什么不应直接执行文件写入?
  3. 源码版本、构建产物和运行参数为什么必须同时保存?
  4. 日志字段改动为什么也可能影响实时性?
  5. 哪些条件满足前不能把自编译固件刷入真实飞控?

主要参考