PX4子模块

来自无人智胜
Root留言 | 贡献2025年9月27日 (六) 20:55的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

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">

  1. 添加 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>