mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
AP_Compass: use new vector methods to make for more compact code
The check for zero-length magnetic field on the primary is redundant given the one on the loop
This commit is contained in:
parent
2271827c9d
commit
7088286ebf
@ -2029,15 +2029,8 @@ void Compass::motor_compensation_type(const uint8_t comp_type)
|
|||||||
|
|
||||||
bool Compass::consistent() const
|
bool Compass::consistent() const
|
||||||
{
|
{
|
||||||
const Vector3f &primary_mag_field = get_field();
|
const Vector3f &primary_mag_field { get_field() };
|
||||||
const Vector2f primary_mag_field_xy = Vector2f(primary_mag_field.x,primary_mag_field.y);
|
const Vector2f &primary_mag_field_xy { primary_mag_field.xy() };
|
||||||
|
|
||||||
if (primary_mag_field_xy.is_zero()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Vector3f primary_mag_field_norm = primary_mag_field.normalized();
|
|
||||||
const Vector2f primary_mag_field_xy_norm = primary_mag_field_xy.normalized();
|
|
||||||
|
|
||||||
for (uint8_t i=0; i<get_count(); i++) {
|
for (uint8_t i=0; i<get_count(); i++) {
|
||||||
if (!use_for_yaw(i)) {
|
if (!use_for_yaw(i)) {
|
||||||
@ -2045,32 +2038,27 @@ bool Compass::consistent() const
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3f mag_field = get_field(i);
|
const Vector3f &mag_field = get_field(i);
|
||||||
Vector2f mag_field_xy = Vector2f(mag_field.x,mag_field.y);
|
const Vector2f &mag_field_xy = mag_field.xy();
|
||||||
|
|
||||||
if (mag_field_xy.is_zero()) {
|
if (mag_field_xy.is_zero()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const float xy_len_diff = (primary_mag_field_xy-mag_field_xy).length();
|
|
||||||
|
|
||||||
mag_field.normalize();
|
|
||||||
mag_field_xy.normalize();
|
|
||||||
|
|
||||||
const float xyz_ang_diff = acosf(constrain_float(mag_field*primary_mag_field_norm,-1.0f,1.0f));
|
|
||||||
const float xy_ang_diff = acosf(constrain_float(mag_field_xy*primary_mag_field_xy_norm,-1.0f,1.0f));
|
|
||||||
|
|
||||||
// check for gross misalignment on all axes
|
// check for gross misalignment on all axes
|
||||||
|
const float xyz_ang_diff = mag_field.angle(primary_mag_field);
|
||||||
if (xyz_ang_diff > AP_COMPASS_MAX_XYZ_ANG_DIFF) {
|
if (xyz_ang_diff > AP_COMPASS_MAX_XYZ_ANG_DIFF) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for an unacceptable angle difference on the xy plane
|
// check for an unacceptable angle difference on the xy plane
|
||||||
|
const float xy_ang_diff = mag_field_xy.angle(primary_mag_field_xy);
|
||||||
if (xy_ang_diff > AP_COMPASS_MAX_XY_ANG_DIFF) {
|
if (xy_ang_diff > AP_COMPASS_MAX_XY_ANG_DIFF) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for an unacceptable length difference on the xy plane
|
// check for an unacceptable length difference on the xy plane
|
||||||
|
const float xy_len_diff = (primary_mag_field_xy-mag_field_xy).length();
|
||||||
if (xy_len_diff > AP_COMPASS_MAX_XY_LENGTH_DIFF) {
|
if (xy_len_diff > AP_COMPASS_MAX_XY_LENGTH_DIFF) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user