PX4 的模块化架构与工程目录解析
PX4 并不是一个传统意义上的'飞控程序',而是一个基于模块划分的实时系统框架。 其核心设计目标不是算法性能最大化,而是:
在长期演进、多人协作与多机型适配之间取得工程稳定性
因此,理解 PX4,首先必须理解它的模块化架构,其次才是控制算法。
本章从系统结构出发,说明:
- PX4 为什么采用模块化设计
- 模块之间如何协作
- GitHub 工程目录的职责划分
src目录的真实结构与功能边界
PX4 采用模块化实时系统框架而非单体程序,核心在于通过独立模块协作实现工程稳定性。模块间禁止直接依赖,通过 uORB 消息总线进行数据发布与订阅通信。GitHub 工程目录按职责划分,如 boards 定义硬件,platforms 适配系统,src 为核心执行区。其中 src/drivers 负责硬件驱动,src/modules 包含飞行控制逻辑(Flight Stack),src/lib 提供公共算法库。理解此分层结构有助于掌握 PX4 无单一主线的持续数据流设计思想。
PX4 并不是一个传统意义上的'飞控程序',而是一个基于模块划分的实时系统框架。 其核心设计目标不是算法性能最大化,而是:
在长期演进、多人协作与多机型适配之间取得工程稳定性
因此,理解 PX4,首先必须理解它的模块化架构,其次才是控制算法。
本章从系统结构出发,说明:
src 目录的真实结构与功能边界无人机飞控同时处理:
这些功能具有明显特征:
如果采用单体程序(Monolithic Architecture),结果通常是:
PX4 的选择是:
拆分职责,让系统通过数据协作,而不是函数调用协作
PX4 模块化由两部分构成:
每个核心功能都是独立任务,例如:
模块具备:
换句话说:
PX4 更像一个微型操作系统,而不是应用程序
模块之间禁止直接依赖。
通信方式:
发布(Publish) → 订阅(Subscribe)
示例数据流:
IMU → vehicle_imu ↓ EKF2 ↓ vehicle_attitude ↓ Attitude Controller ↓ Actuator Output
模块不知道数据来自谁,只关心数据是否存在。
工程意义:
代价是:
PX4 用少量性能换可维护性,这是明确的工程取舍。
PX4-Autopilot 根目录并不是随机组织,而是按系统层级划分。

下面按职责说明主要目录。
CI、自动测试与代码检查配置。
作用:保证提交代码不会破坏系统。
运行时无关。
boards/硬件板级定义。
包含:
本质是:
不同飞控硬件的'身份证'
platforms/操作系统适配层。
负责:
解决问题:
同一 PX4 代码 ↓ 运行在 MCU 或 Linux
属于 HAL 上层实现。
ROMFS/启动脚本与默认配置。
例如:
可以理解为:
PX4 的开机启动盘
Tools/开发工具集合:
仅开发阶段使用。
msg/uORB 消息定义。
例如:
vehicle_attitude.msg sensor_combined.msg
这些文件会自动生成:
它定义了整个系统的数据语言。
test/ /integrationtests/自动化测试。
用于保证模块修改不会破坏飞行行为。
docs/文档源文件。
src/ —— PX4 的核心执行区域(重点)如果说 PX4 是一座城市:
src就是所有居民真正生活和工作的地方
几乎所有运行时逻辑都在这里。
src 目录结构详解
截图中展示的正是 PX4 最核心区域。
src/drivers/ —— 硬件驱动层职责:
硬件设备 → 标准化传感器数据
包含:
特点:
它解决的问题只有一个:
如何可靠读取物理世界
src/modules/ —— Flight Stack 主体这是 PX4 最重要的目录。
绝大多数飞行逻辑在这里。
典型模块:
| 模块 | 职责 |
|---|---|
| commander | 飞行状态机 |
| ekf2 | 状态估计 |
| sensors | 传感器融合 |
| navigator | 航线与任务 |
| mc_att_control | 姿态控制 |
| mc_pos_control | 位置控制 |
| land_detector | 着陆检测 |
这里构成真正的:
Flight Stack
src/lib/ —— 公共算法与工具库不运行,仅提供功能。
包括:
类似标准库扩展。
src/systemcmds/ —— 系统级命令PX4 内置命令行工具。
例如:
listener param top reboot
用于:
相当于嵌入式 Linux 的 shell 命令集合。
src/examples/示例模块。
作用:
生产系统基本不会依赖。
src/include/全局公共头文件。
定义:
用于跨模块统一接口规范。
src/templates/template_module/模块模板。
提供:
新模块通常从这里复制开始。
PX4 实际分层如下:
硬件 ↓ drivers ↓ sensors/modules ↓ EKF ↓ Controllers ↓ Mixer ↓ Actuators
GitHub 目录正是该架构的直接映射。
换句话说:
目录结构本身就是系统架构图
PX4 模块化架构的核心不是'代码好看',而是工程生存能力。
关键认知:
src/modules 才是真正的 Flight Stackdrivers 负责现实世界,modules 负责飞行决策理解本章后,再阅读 PX4 代码时,应避免寻找'主程序逻辑',因为:
PX4 没有唯一主线,只有持续运行的数据流

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online