时间:20220531
问题
在PX4 升级到1.12后使用local_position_estimator也就是LPE后会导致飞控启动失败, 从SD卡的log中可以看到是硬件错误.
解决办法
将文件 PX4Firmware根目录中的文件\platforms\common\include\px4_platform_common\px4_work_queue\WorkQueueManager.hpp
中的wq:nav_and_controllers的堆栈大小改为较大的数值, 实测需要5000以上把, 这里可以改回7300, 再重新编译新固件即可正常启动了.
// PX4 att/pos controllers, highest priority after sensors.
static constexpr wq_config_t nav_and_controllers{"wq:nav_and_controllers", 7300, -13};
注:
PX4 1.13版本该问题已经修复 https://github.com/PX4/PX4-Autopilot/issues/17380修复手段是将lpe移动到了INS0任务队列中, 但是已发布的1.12目前就这样了, 只能自己修改了.
解决过程
花了两天的时间, 对历史上的每次提交进行了逐步排查, 发现是在主分支上增加Multi-EKF后出现的问题, 该提交为 0f411d6820e55f5e7cb58d064095725f28a7820a
在本次提交中, wq:nav_and_controllers工作队列的堆栈被设置到很小的数值, 导致了lpe启动后堆栈溢出, 如下图所示, 原本是7200后来变为了1728, 虽然在最近的几次提交中该数值增加到了2000多, 但是依然会导致LPE启动失败