在开发基于 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 供电轨检测,恢复正常解锁逻辑。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐