mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-05-16 17:57:35 +08:00
Ekf: centralize GPS height fusion startup
This commit is contained in:
committed by
Mathieu Bresciani
parent
61763544b6
commit
6b64cf0770
+2
-8
@@ -822,7 +822,7 @@ void Ekf::controlHeightSensorTimeouts()
|
||||
// set height sensor health
|
||||
_baro_hgt_faulty = true;
|
||||
|
||||
setControlGPSHeight();
|
||||
startGpsHgtFusion();
|
||||
|
||||
request_height_reset = true;
|
||||
ECL_WARN_TIMESTAMPED("baro hgt timeout - reset to GPS");
|
||||
@@ -1018,14 +1018,8 @@ void Ekf::controlHeightFusion()
|
||||
}
|
||||
|
||||
} else if (!do_range_aid && _gps_data_ready && !_gps_hgt_intermittent && _gps_checks_passed) {
|
||||
setControlGPSHeight();
|
||||
fuse_height = true;
|
||||
|
||||
// we have just switched to using gps height, calculate height sensor offset such that current
|
||||
// measurement matches our current height estimate
|
||||
if (_control_status_prev.flags.gps_hgt != _control_status.flags.gps_hgt) {
|
||||
_hgt_sensor_offset = _gps_sample_delayed.hgt - _gps_alt_ref + _state.pos(2);
|
||||
}
|
||||
startGpsHgtFusion();
|
||||
|
||||
} else if (_control_status.flags.baro_hgt && _baro_data_ready && !_baro_hgt_faulty) {
|
||||
// switch to baro if there was a reset to baro
|
||||
|
||||
@@ -759,6 +759,7 @@ private:
|
||||
void startMag3DFusion();
|
||||
|
||||
void startBaroHgtFusion();
|
||||
void startGpsHgtFusion();
|
||||
|
||||
// calculate the measurement variance for the optical flow sensor
|
||||
float calcOptFlowMeasVar();
|
||||
|
||||
@@ -1487,6 +1487,17 @@ void Ekf::startBaroHgtFusion()
|
||||
}
|
||||
}
|
||||
|
||||
void Ekf::startGpsHgtFusion()
|
||||
{
|
||||
setControlGPSHeight();
|
||||
|
||||
// we have just switched to using gps height, calculate height sensor offset such that current
|
||||
// measurement matches our current height estimate
|
||||
if (_control_status_prev.flags.gps_hgt != _control_status.flags.gps_hgt) {
|
||||
_hgt_sensor_offset = _gps_sample_delayed.hgt - _gps_alt_ref + _state.pos(2);
|
||||
}
|
||||
}
|
||||
|
||||
// update the rotation matrix which rotates EV measurements into the EKF's navigation frame
|
||||
void Ekf::calcExtVisRotMat()
|
||||
{
|
||||
|
||||
+1
-3
@@ -100,9 +100,7 @@ bool Ekf::collect_gps(const gps_message &gps)
|
||||
|
||||
if (_params.vdist_sensor_type == VDIST_SENSOR_GPS) {
|
||||
ECL_INFO_TIMESTAMPED("GPS checks passed (WGS-84 origin set, using GPS height)");
|
||||
setControlGPSHeight();
|
||||
// zero the sensor offset
|
||||
_hgt_sensor_offset = 0.0f;
|
||||
startGpsHgtFusion();
|
||||
} else {
|
||||
ECL_INFO_TIMESTAMPED("GPS checks passed (WGS-84 origin set)");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user