飞控与固件开发¶
本专题承接基础知识和硬件系统,目标不是教读者机械地修改几个参数,而是建立从源码、构建产物、板级硬件到真实执行器之间的完整工程模型。
飞控软件直接参与姿态稳定、动力输出和失效处理。任何修改都必须先在主机测试或仿真中验证,再经过拆桨台架检查,最后才允许进入受控飞行测试。
完成本专题后应具备的能力¶
- 解释飞控从上电、初始化到周期控制的主要阶段;
- 根据任务选择合适的开源飞控技术路线,而不是按知名度选择;
- 固定源码提交、子模块、工具链和板级目标,生成可复现固件;
- 在大型代码库中沿着传感器、状态估计、控制器、控制分配和执行器输出追踪数据;
- 区分中断、实时任务、普通任务和后台输入输出;
- 读懂板级目标中的时钟、存储、总线、引脚、定时器和启动配置;
- 理解传感器驱动的数据质量责任以及坐标、单位和时间戳边界;
- 修改参数、消息、日志或只读诊断功能,并验证兼容性;
- 使用单元测试、软件在环、硬件在环和拆桨台架逐级降低风险;
- 为失败构建、错误固件、配置损坏和无法启动准备恢复路径。
本专题不解决什么¶
- 焊接、压接、绝缘、机械安装和首次通电属于后续组装专题;
- 面向普通使用者的真实飞控刷写、端口配置和传感器校准属于后续首次配置专题;本专题必做实践在SITL结束,真实硬件刷写只作为满足板级识别、拆桨和恢复前提后的扩展;
- 以飞行日志为依据的增益和滤波调校属于后续调校专题;
- 特定通信协议的完整帧格式属于后续协议专题;
- 法规许可、产品准入和运行审批仍以合规专题及主管部门要求为准。
学习前提¶
读者不必已经会写飞控,但应能够:
- 使用命令行进入目录和运行命令;
- 理解变量、函数、条件、循环和基本数据类型;
- 阅读简单的C或C++代码;
- 使用Git查看提交和切换版本;
- 理解前述专题中的坐标系、传感器、闭环控制、电源和接口基础。
缺少其中某项时,可以先阅读本专题理解整体结构,但不要直接修改控制链或刷写真实飞行器。
两条学习路线¶
| 路线 | 前提 | 允许范围 |
|---|---|---|
| 概念阅读 | 已完成01基础知识 | 阅读架构、接口、时序、参数和测试原理,不执行构建或刷写 |
| 可执行开发 | 命令行、Git、C/C++和构建工具自检通过 | 在隔离源码副本中完成固定版本构建、测试、SITL和只读改动 |
可执行开发路线开始前,读者应能独立完成:
- 解释当前目录、相对路径、环境变量和命令退出状态;
- 使用
git status、git log、git show和git diff确认版本与修改; - 阅读函数声明、指针/引用、结构体、枚举、数组和条件编译;
- 理解编译、链接、构建目标和依赖;
- 根据错误输出定位失败阶段;
- 在不覆盖原件的情况下保存日志和补丁。
任何一项做不到时,状态为阻断,先使用以下外部基础材料补齐:
- Pro Git中文版
- CMake官方教程
- C++语言参考
- 当前操作系统终端和工具链的官方文档
外部教程只补语言和工具能力,不提供飞控刷写授权。首次可执行练习仍从本专题11的SITL只读改动开始。
学习顺序¶
- 飞控固件的职责与安全边界
- 开源飞控平台与技术路线
- 源码版本、开发环境与可复现构建
- 启动流程、源码架构与数据流
- 实时调度、中断与时间基准
- 硬件抽象、板级目标与启动链
- 传感器驱动与数据质量
- 状态估计、控制器与执行器链路
- 参数、协议、日志与地面工具
- 仿真、测试、调试与安全回滚
- 第一个安全的固件改动
统一开发原则¶
- 先固定版本,再讨论代码。 分支名会移动,提交哈希、子模块状态和工具链版本才可复现。
- 先理解数据契约,再修改算法。 单位、坐标系、时间戳、有效标志和更新率属于接口的一部分。
- 实时任务不得依赖不可控等待。 文件、网络、打印和总线阻塞必须隔离或设置边界。
- 板级目标不是针脚清单。 它还包含时钟、存储、启动、直接存储器访问、定时器和传感器实例。
- 参数不是任意全局变量。 默认值、范围、持久化、迁移和地面端元数据必须一致。
- 构建成功不代表能够安全飞行。 测试证据必须覆盖功能、时序、资源、失效和恢复。
- 第一次改动不进入控制输出。 先完成只读诊断或日志改动,建立完整验证链。
- 没有恢复路径,不刷写真实硬件。 至少保留已验证固件、原始配置和引导加载或调试接口。
引用与版本说明¶
各篇“主要参考”中的main、master或普通文档链接用于解释持续演进的通用架构,不作为某次构建的不可变证据。所有可执行示范固定到PX4 v1.17.0及提交d6f12ad1c4f70ad3230afd7d86e971421e02fef4;真实项目还应把实际依赖、工具链和测试结果写入自己的版本证据包。