Browse Source

EKF: Add missing reset for output observer vertical position derivative

Required to prevent large transients in value returned by get_pos_d_deriv accessor following a vertical state reset event.
master
Paul Riseborough 7 years ago committed by Lorenz Meier
parent
commit
db5264e45c
  1. 12
      EKF/ekf_helper.cpp

12
EKF/ekf_helper.cpp

@ -300,12 +300,24 @@ void Ekf::resetHeight() @@ -300,12 +300,24 @@ void Ekf::resetHeight()
for (uint8_t i = 0; i < _output_buffer.get_length(); i++) {
if (vert_pos_reset) {
_output_buffer[i].pos(2) += _state_reset_status.posD_change;
_output_vert_buffer[i].vel_d_integ += _state_reset_status.posD_change;
}
if (vert_vel_reset) {
_output_buffer[i].vel(2) += _state_reset_status.velD_change;
_output_vert_buffer[i].vel_d += _state_reset_status.velD_change;
}
}
// add the reset amount to the output observer vertical position state
if (vert_pos_reset) {
_output_vert_delayed.vel_d_integ = _state.pos(2);
_output_vert_new.vel_d_integ = _state.pos(2);
}
if (vert_vel_reset) {
_output_vert_delayed.vel_d = _state.vel(2);
_output_vert_new.vel_d = _state.vel(2);
}
}
// align output filter states to match EKF states at the fusion time horizon

Loading…
Cancel
Save