Skip to content

EAHRS is performing duplicate temperature compenstation #25792

@Ryanf55

Description

@Ryanf55

Bug report

Issue details

Certain devices exposed through EAHRS, like the MicroStrain7, supply data that is already temperature compenstated.

https://s3.amazonaws.com/files.microstrain.com/GQ7+User+Manual/external_content/dcp/Data/sensor_data/data/mip_field_sensor_scaled_mag.htm
https://s3.amazonaws.com/files.microstrain.com/GQ7+User+Manual/external_content/dcp/Data/sensor_data/data/mip_field_sensor_scaled_accel.htm

When the External AHRS driver posts data to sensor libraries, they perform temperature compenstation on it again, as long as HAL_INS_TEMPERATURE_CAL_ENABLE is defined, which is based on board size.

Please describe the problem

This causes double temperature compensation, leading to incorrect values.

Proposed Solution
Add bool is_temperature_compensated; to AP_ExternalARHS::ins_data_message_t, and then add the necessary hooks in AP_InertialSensor::handle_external(const AP_ExternalAHRS::ins_data_message_t &pkt) to stop doing temperature compensation if the supplied value is already temp-compensated.

See ryanf55:eahrs-precompensated-sensors for a prototype fix (WIP)

Version
master 1e644d56a51806b63dcd68d5e6566ec0f10248fc

Platform
[ x] All
[ ] AntennaTracker
[ ] Copter
[ ] Plane
[ ] Rover
[ ] Submarine

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions