问题如图所示,在arm的过程中,检测到ESC failure,导致无人机无法正常启动:
INFO [commander] Armed by external command
INFO [tone_alarm] arming warning
INFO [logger] Start file log (type: full)
INFO [logger] [logger] ./log/2025-02-28/05_38_18.ulg
INFO [logger] Opened full log file: ./log/2025-02-28/05_38_18.ulg
WARN [health_and_arming_checks] Preflight Fail: ESC failure detected
WARN [failsafe] Failsafe activated
INFO [commander] Disarmed by failsafe
这里我的机型模型文件(sdf文件)参考的是官方的例子x500进行改写的,并且已经在ROS1中gazebo-classic里验证了可行性,因此基本排除是机型文件的问题。
飞行参数文件也是参考x500的进行了设置,仿真相关参数如下:
param set-default SIM_GZ_EN 1
param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 0
param set-default SENS_EN_MAGSIM 1
param set-default SIM_GZ_EC_FUNC1 101
param set-default SIM_GZ_EC_FUNC2 102
param set-default SIM_GZ_EC_FUNC3 103
param set-default SIM_GZ_EC_FUNC4 104
param set-default SIM_GZ_EC_FUNC5 105
param set-default SIM_GZ_EC_FUNC6 106
param set-default SIM_GZ_EC_MIN1 0
param set-default SIM_GZ_EC_MIN2 0
param set-default SIM_GZ_EC_MIN3 0
param set-default SIM_GZ_EC_MIN4 0
param set-default SIM_GZ_EC_MIN5 0
param set-default SIM_GZ_EC_MIN6 0
param set-default SIM_GZ_EC_MAX1 1500
param set-default SIM_GZ_EC_MAX2 1500
param set-default SIM_GZ_EC_MAX3 1500
param set-default SIM_GZ_EC_MAX4 1500
param set-default SIM_GZ_EC_MAX5 1500
param set-default SIM_GZ_EC_MAX6 1500
查看报错信息相关源码,发现是跟一个内部参数fd_esc_arming_failure相关,与之联系的外部QGC参数是FD_ESCS_EN,作用是检查ESC的启动状态,如果启用,故障检测器将验证所有的 ESCs 是否已成功启动,进而车辆会过渡到arm状态。而收到 ESCs 确认的超时为 0.3 秒,如果没有收到反馈,故障检测器将自动解除车辆。因此,我猜测是ESC启动超时,导致无人机无法启动。我这里简单的将参数FD_ESCS_EN关闭,即设置为0,无人机可正常起飞。
param set-default FD_ESCS_EN 0
猜测还可以在内部将确认时间加长,或者增大ESC的最小速度,来解决这个问题,但是还需要后续验证。