mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 07:28:54 +08:00
ekf2: prevent false mag fault detection
A false positive could be triggered if velocity fusion started, then stopped after takeoff and only position fusion started again (because velocity fusion timed out and had a timestamp > time_last_on_ground). We now also check if the fusion timeout is due to the innovation being rejected (and not just a temporary check failure or data interruption).
This commit is contained in:
committed by
Mathieu Bresciani
parent
14186cf74f
commit
d62f112017
@@ -104,12 +104,17 @@ void Ekf::controlGpsFusion(const imuSample &imu_delayed)
|
||||
|
||||
bool do_vel_pos_reset = false;
|
||||
|
||||
if (!_control_status.flags.gnss_fault && (_control_status.flags.gnss_vel || _control_status.flags.gnss_pos)) {
|
||||
if (!_control_status.flags.gnss_fault && _control_status.flags.in_air && isYawFailure()) {
|
||||
const bool velocity_fusion_failure = _aid_src_gnss_vel.innovation_rejected
|
||||
&& isTimedOut(_time_last_hor_vel_fuse, _params.EKFGSF_reset_delay)
|
||||
&& (_time_last_hor_vel_fuse > _time_last_on_ground_us);
|
||||
|
||||
if (_control_status.flags.in_air
|
||||
&& isYawFailure()
|
||||
&& isTimedOut(_time_last_hor_vel_fuse, _params.EKFGSF_reset_delay)
|
||||
&& (_time_last_hor_vel_fuse > _time_last_on_ground_us)) {
|
||||
const bool position_fusion_failure = _aid_src_gnss_pos.innovation_rejected
|
||||
&& isTimedOut(_time_last_hor_pos_fuse, _params.EKFGSF_reset_delay)
|
||||
&& (_time_last_hor_pos_fuse > _time_last_on_ground_us);
|
||||
|
||||
if ((_control_status.flags.gnss_vel && velocity_fusion_failure)
|
||||
|| (_control_status.flags.gnss_pos && position_fusion_failure)) {
|
||||
do_vel_pos_reset = tryYawEmergencyReset();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user