PX4子模块
PX4 的子模块 (Submodule) 设计
PX4 飞控系统采用子模块(Submodule)的方式来管理其依赖的外部库和内部组件,这是其实现高度模块化、可维护性和可扩展性的关键。
子模块的作用
- 依赖管理: 精确控制外部库的版本,确保构建可重复性[2](@ref)。
- 模块化设计: 将系统解耦为独立的功能单元(如传感器驱动、控制算法、通信协议),允许独立开发、测试和更新[1,3](@ref)。
- 灵活配置: 通过 Kconfig 系统选择性地启用或禁用功能模块,以适应不同的硬件和飞行器类型[3](@ref)。
比喻理解
想象 PX4 是一个庞大的乐高无人机模型。每个子模块就像一包特定功能的乐高积木(例如:马达包、传感器包、控制器包)。主项目(Firmware 仓库)是总组装说明书。
- 总说明书告诉你需要哪些积木包(子模块)以及如何组装它们(构建系统)。
- 每个积木包都是一个独立的产品(独立的 Git 仓库),有自己的说明书和更新版本。
- 你可以轻松升级一包积木(例如更新 GPS 驱动子模块)而无需替换所有零件,只要接口匹配即可。
代码中的示例
在 PX4 的 `mc_att_control` (多旋翼姿态控制模块) 中,其 CMakeLists.txt 文件通过 `add_subdirectory(AttitudeControl)` 和 `DEPENDS AttitudeControl mathlib ...` 来声明对其内部算法子模块和数学库的依赖[3](@ref)。
<syntaxhighlight lang="cmake">
- 添加 AttitudeControl 子模块
add_subdirectory(AttitudeControl)
px4_add_module(
MODULE modules__mc_att_control MAIN mc_att_control SRCS mc_att_control_main.cpp DEPENDS AttitudeControl # 依赖 AttitudeControl 子模块 mathlib # 依赖数学库 px4_work_queue
) </syntaxhighlight>