You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
2.4 KiB

#include "reset_logging_checker.h"
// call immediately after state reset
void ResetLoggingChecker::capturePreResetState() {
float a[2];
float b;
uint8_t c;
_ekf->get_velNE_reset(a, &c);
horz_vel_reset_counter_before_reset = c;
_ekf->get_velD_reset(&b, &c);
vert_vel_reset_counter_before_reset = c;
_ekf->get_posNE_reset(a, &c);
horz_pos_reset_counter_before_reset = c;
_ekf->get_posD_reset(&b, &c);
vert_pos_reset_counter_before_reset = c;
velocity_before_reset = _ekf->getVelocity();
position_before_reset = _ekf->getPosition();
}
// call immediately after state reset
void ResetLoggingChecker::capturePostResetState() {
float a[2];
float b;
uint8_t c;
_ekf->get_velNE_reset(a, &c);
logged_delta_velocity(0) = a[0];
logged_delta_velocity(1) = a[1];
horz_vel_reset_counter_after_reset = c;
_ekf->get_velD_reset(&b, &c);
logged_delta_velocity(2) = b;
vert_vel_reset_counter_after_reset = c;
_ekf->get_posNE_reset(a, &c);
logged_delta_position(0) = a[0];
logged_delta_position(1) = a[1];
horz_pos_reset_counter_after_reset = c;
_ekf->get_posD_reset(&b, &c);
logged_delta_position(2) = b;
vert_pos_reset_counter_after_reset = c;
velocity_after_reset = _ekf->getVelocity();
position_after_reset = _ekf->getPosition();
}
bool ResetLoggingChecker::isVelocityDeltaLoggedCorrectly(float accuracy) {
const Vector3f measured_delta_velocity = velocity_after_reset -
velocity_before_reset;
return matrix::isEqual(logged_delta_velocity,
measured_delta_velocity,
accuracy);
}
bool ResetLoggingChecker::isHorizontalVelocityResetCounterIncreasedBy(int offset) {
return horz_vel_reset_counter_after_reset ==
horz_vel_reset_counter_before_reset + offset;
}
bool ResetLoggingChecker::isVerticalVelocityResetCounterIncreasedBy(int offset) {
return vert_vel_reset_counter_after_reset ==
vert_vel_reset_counter_before_reset + offset;
}
bool ResetLoggingChecker::isPositionDeltaLoggedCorrectly(float accuracy) {
const Vector3f measured_delta_position = position_after_reset -
position_before_reset;
return matrix::isEqual(logged_delta_position,
measured_delta_position,
accuracy);
}
bool ResetLoggingChecker::isHorizontalPositionResetCounterIncreasedBy(int offset) {
return horz_pos_reset_counter_after_reset ==
horz_pos_reset_counter_before_reset + offset;
}
bool ResetLoggingChecker::isVerticalPositionResetCounterIncreasedBy(int offset) {
return vert_pos_reset_counter_after_reset ==
vert_pos_reset_counter_before_reset + offset;
}