PX4学习笔记(2)-- MicroAir743固件裁剪
在开发基于 PX4 的四旋翼无人机时,随着功能增加,固件体积(Flash 占用)往往会逼近硬件极限。以 MicoAir H743-V2 为例,默认配置下的 Flash 占用率高达 98.47% 。为了给未来的功能扩展和参数存储留出空间,对固件进行“瘦身”势在必行。
裁剪原则
对于四旋翼开发者,裁剪的核心逻辑非常明确:移除不匹配的机型控制组、精简冗余的驱动程序、剥离非必要的调试工具以及高级通信接口。
目标配置文件相对路径: boards/micoair/h743-v2/default.px4board
第一阶段:移除无关机型模块
PX4 默认固件通常是一个“全能包”,包含了固定翼(FW)和垂直起降(VTOL)的代码。对于纯四旋翼项目,这些内容可以直接删除。
固定翼控制组:
# 固定翼姿态控制
CONFIG_MODULES_FW_ATT_CONTROL
# 固定翼位置控制
CONFIG_MODULES_FW_POS_CONTROL
# 固定翼速率控制
CONFIG_MODULES_FW_RATE_CONTROL
# 固定翼自动调参工具
CONFIG_MODULES_FW_AUTOTUNE_ATTITUDE_CONTROL
垂起混合动力组:
# 负责 VTOL 模式转换和控制
CONFIG_MODULES_VTOL_ATT_CONTROL
第二阶段:精简传感器驱动
配置文件中往往包含了一系列兼容性驱动,但在实际硬件中,我们通常只用到特定的一两种 。不需要的外设驱动也可以裁剪。
差压计 :四旋翼通常不需要空速计,可移除以下驱动:
# 空速计通用基础模块
CONFIG_COMMON_DIFFERENTIAL_PRESSURE
CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ASP5033
CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_AUAV
CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_ETS
CONFIG_DRIVERS_DIFFERENTIAL_PRESSURE_MS4515
特定外设:
# 除非使用 TAP 品牌的电调,否则建议移除
CONFIG_DRIVERS_TAP_ESC
第三阶段:清理系统命令与实验性功能
一些用于工厂测试或极致调试的工具在量产固件中并非必须。
存储压力测试与模拟:
# SD 卡性能跑分测试
CONFIG_SYSTEMCMDS_SD_BENCH
# SD 卡压力测试
CONFIG_SYSTEMCMDS_SD_STRESS
# 故障注入测试
CONFIG_SYSTEMCMDS_FAILURE
进阶与实验性算法:
# 精准降落目标估计(无视觉模块则不需要)
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR
# 负载投送管理
CONFIG_MODULES_PAYLOAD_DELIVERER
第四阶段:深度裁剪冗余算法与高级通信
冗余位置估计算法:
PX4 默认使用 EKF2 (CONFIG_MODULES_EKF2=y) 作为核心状态估计器,旧版的 LPE 算法通常不需要同时开启:
# 局部位置估计(LPE),与 EKF2 存在功能重叠
CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR
未使用的复杂通信协议:
如果不涉及基于 CAN 的外设或与 ROS2 的通信联调,关闭这些接口将极大降低代码体积:
# UAVCAN/DroneCAN 驱动
CONFIG_DRIVERS_UAVCAN
# 用于与 ROS2 通信的 DDS 客户端
CONFIG_MODULES_UXRCE_DDS_CLIENT
第五阶段:编译与验证
修改完配置文件后,必须清理旧的编译缓存并重新编译固件:
make clean
make micoair_h743-v2_default
通过上述系统性的裁剪,Flash 占用率可以降至 78.3% 左右,但是建议谨慎裁切,够用即可。
补充说明
解决 PX4 自编译固件 “Preflight Fail: system power unavailable” 解锁拦截故障现象
在 MicoAir H743-V2 飞控上深度裁剪并重新编译烧录 PX4 固件后,尝试解锁电机时 QGC 地面站弹出警告:
顶层报错: Arming denied: Resolve system health failures first
详细错误: Preflight Fail: system power unavailable
根本原因分析
硬件架构差异: 标准的 Pixhawk 飞控具备专用的 5V 航空电子设备电压监测电路。而类似 MicoAir H743 此类基于穿越机架构设计的飞控,在物理层面精简了该 5V 监测电路。
软件基线重置: 自行执行 make clean 并重新编译固件,会导致飞控底层的安全参数重置为 PX4 官方最严苛的安全基线。
故障逻辑: 官方默认基线强制要求进行电源健康检查(检查 system_power 主题)。由于硬件缺失监测节点,ADC 驱动无法发布该主题,安全机制随之判定为系统内部供电故障并强制切断输出。
解决步骤
由于是硬件层面的物理精简,标准处理方案是在参数表中主动屏蔽该项检查:
- 打开 QGroundControl 地面站,进入参数 (Parameters) 设置界面。
搜索电源检查断路器参数 CBRK_SUPPLY_CHK。
将该参数的值由默认的 0 修改为 894281(禁用系统供电检查)。
点击保存并重启飞控。
重启后,系统将跳过无效的 5V 供电轨检测,恢复正常解锁逻辑。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)