跳转至

飞控与固件开发

本专题承接基础知识硬件系统,目标不是教读者机械地修改几个参数,而是建立从源码、构建产物、板级硬件到真实执行器之间的完整工程模型。

飞控软件直接参与姿态稳定、动力输出和失效处理。任何修改都必须先在主机测试或仿真中验证,再经过拆桨台架检查,最后才允许进入受控飞行测试。

完成本专题后应具备的能力

  • 解释飞控从上电、初始化到周期控制的主要阶段;
  • 根据任务选择合适的开源飞控技术路线,而不是按知名度选择;
  • 固定源码提交、子模块、工具链和板级目标,生成可复现固件;
  • 在大型代码库中沿着传感器、状态估计、控制器、控制分配和执行器输出追踪数据;
  • 区分中断、实时任务、普通任务和后台输入输出;
  • 读懂板级目标中的时钟、存储、总线、引脚、定时器和启动配置;
  • 理解传感器驱动的数据质量责任以及坐标、单位和时间戳边界;
  • 修改参数、消息、日志或只读诊断功能,并验证兼容性;
  • 使用单元测试、软件在环、硬件在环和拆桨台架逐级降低风险;
  • 为失败构建、错误固件、配置损坏和无法启动准备恢复路径。

本专题不解决什么

  • 焊接、压接、绝缘、机械安装和首次通电属于后续组装专题;
  • 面向普通使用者的真实飞控刷写、端口配置和传感器校准属于后续首次配置专题;本专题必做实践在SITL结束,真实硬件刷写只作为满足板级识别、拆桨和恢复前提后的扩展;
  • 以飞行日志为依据的增益和滤波调校属于后续调校专题;
  • 特定通信协议的完整帧格式属于后续协议专题;
  • 法规许可、产品准入和运行审批仍以合规专题及主管部门要求为准。

学习前提

读者不必已经会写飞控,但应能够:

  • 使用命令行进入目录和运行命令;
  • 理解变量、函数、条件、循环和基本数据类型;
  • 阅读简单的C或C++代码;
  • 使用Git查看提交和切换版本;
  • 理解前述专题中的坐标系、传感器、闭环控制、电源和接口基础。

缺少其中某项时,可以先阅读本专题理解整体结构,但不要直接修改控制链或刷写真实飞行器。

两条学习路线

路线 前提 允许范围
概念阅读 已完成01基础知识 阅读架构、接口、时序、参数和测试原理,不执行构建或刷写
可执行开发 命令行、Git、C/C++和构建工具自检通过 在隔离源码副本中完成固定版本构建、测试、SITL和只读改动

可执行开发路线开始前,读者应能独立完成:

  • 解释当前目录、相对路径、环境变量和命令退出状态;
  • 使用git statusgit loggit showgit diff确认版本与修改;
  • 阅读函数声明、指针/引用、结构体、枚举、数组和条件编译;
  • 理解编译、链接、构建目标和依赖;
  • 根据错误输出定位失败阶段;
  • 在不覆盖原件的情况下保存日志和补丁。

任何一项做不到时,状态为阻断,先使用以下外部基础材料补齐:

外部教程只补语言和工具能力,不提供飞控刷写授权。首次可执行练习仍从本专题11的SITL只读改动开始。

学习顺序

  1. 飞控固件的职责与安全边界
  2. 开源飞控平台与技术路线
  3. 源码版本、开发环境与可复现构建
  4. 启动流程、源码架构与数据流
  5. 实时调度、中断与时间基准
  6. 硬件抽象、板级目标与启动链
  7. 传感器驱动与数据质量
  8. 状态估计、控制器与执行器链路
  9. 参数、协议、日志与地面工具
  10. 仿真、测试、调试与安全回滚
  11. 第一个安全的固件改动

统一开发原则

  1. 先固定版本,再讨论代码。 分支名会移动,提交哈希、子模块状态和工具链版本才可复现。
  2. 先理解数据契约,再修改算法。 单位、坐标系、时间戳、有效标志和更新率属于接口的一部分。
  3. 实时任务不得依赖不可控等待。 文件、网络、打印和总线阻塞必须隔离或设置边界。
  4. 板级目标不是针脚清单。 它还包含时钟、存储、启动、直接存储器访问、定时器和传感器实例。
  5. 参数不是任意全局变量。 默认值、范围、持久化、迁移和地面端元数据必须一致。
  6. 构建成功不代表能够安全飞行。 测试证据必须覆盖功能、时序、资源、失效和恢复。
  7. 第一次改动不进入控制输出。 先完成只读诊断或日志改动,建立完整验证链。
  8. 没有恢复路径,不刷写真实硬件。 至少保留已验证固件、原始配置和引导加载或调试接口。

引用与版本说明

各篇“主要参考”中的mainmaster或普通文档链接用于解释持续演进的通用架构,不作为某次构建的不可变证据。所有可执行示范固定到PX4 v1.17.0及提交d6f12ad1c4f70ad3230afd7d86e971421e02fef4;真实项目还应把实际依赖、工具链和测试结果写入自己的版本证据包。