mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-23 04:43:34 +08:00
accel and gyro calibration refactor and cleanup
- remove all remaining IOCTLs for accel and gyro and handle all calibration entirely in sensors module with parameters
- sensor_accel and sensor_gyro are now always raw sensor data
- calibration procedures no longer need to first clear existing values before starting
- temperature calibration (TC) remove all scale (SCL) parameters
- gyro and baro scale are completely unused
- regular accel calibration scale can be used (CAL_ACC*_xSCALE) instead of TC scale
This commit is contained in:
@@ -71,8 +71,6 @@ int TemperatureCompensation::initialize_parameter_handles(ParameterHandles ¶
|
||||
parameter_handles.gyro_cal_handles[j].x1[i] = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_G%d_X0_%d", j, i);
|
||||
parameter_handles.gyro_cal_handles[j].x0[i] = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_G%d_SCL_%d", j, i);
|
||||
parameter_handles.gyro_cal_handles[j].scale[i] = param_find(nbuf);
|
||||
}
|
||||
|
||||
sprintf(nbuf, "TC_G%d_TREF", j);
|
||||
@@ -103,8 +101,6 @@ int TemperatureCompensation::initialize_parameter_handles(ParameterHandles ¶
|
||||
parameter_handles.accel_cal_handles[j].x1[i] = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_A%d_X0_%d", j, i);
|
||||
parameter_handles.accel_cal_handles[j].x0[i] = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_A%d_SCL_%d", j, i);
|
||||
parameter_handles.accel_cal_handles[j].scale[i] = param_find(nbuf);
|
||||
}
|
||||
|
||||
sprintf(nbuf, "TC_A%d_TREF", j);
|
||||
@@ -137,8 +133,6 @@ int TemperatureCompensation::initialize_parameter_handles(ParameterHandles ¶
|
||||
parameter_handles.baro_cal_handles[j].x1 = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_B%d_X0", j);
|
||||
parameter_handles.baro_cal_handles[j].x0 = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_B%d_SCL", j);
|
||||
parameter_handles.baro_cal_handles[j].scale = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_B%d_TREF", j);
|
||||
parameter_handles.baro_cal_handles[j].ref_temp = param_find(nbuf);
|
||||
sprintf(nbuf, "TC_B%d_TMIN", j);
|
||||
@@ -175,18 +169,12 @@ int TemperatureCompensation::parameters_update()
|
||||
param_get(parameter_handles.gyro_cal_handles[j].x2[i], &(_parameters.gyro_cal_data[j].x2[i]));
|
||||
param_get(parameter_handles.gyro_cal_handles[j].x1[i], &(_parameters.gyro_cal_data[j].x1[i]));
|
||||
param_get(parameter_handles.gyro_cal_handles[j].x0[i], &(_parameters.gyro_cal_data[j].x0[i]));
|
||||
param_get(parameter_handles.gyro_cal_handles[j].scale[i], &(_parameters.gyro_cal_data[j].scale[i]));
|
||||
}
|
||||
|
||||
} else {
|
||||
// Set all cal values to zero and scale factor to unity
|
||||
// Set all cal values to zero
|
||||
memset(&_parameters.gyro_cal_data[j], 0, sizeof(_parameters.gyro_cal_data[j]));
|
||||
|
||||
// Set the scale factor to unity
|
||||
for (unsigned int i = 0; i < 3; i++) {
|
||||
_parameters.gyro_cal_data[j].scale[i] = 1.0f;
|
||||
}
|
||||
|
||||
PX4_WARN("FAIL GYRO %d CAL PARAM LOAD - USING DEFAULTS", j);
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
@@ -208,18 +196,12 @@ int TemperatureCompensation::parameters_update()
|
||||
param_get(parameter_handles.accel_cal_handles[j].x2[i], &(_parameters.accel_cal_data[j].x2[i]));
|
||||
param_get(parameter_handles.accel_cal_handles[j].x1[i], &(_parameters.accel_cal_data[j].x1[i]));
|
||||
param_get(parameter_handles.accel_cal_handles[j].x0[i], &(_parameters.accel_cal_data[j].x0[i]));
|
||||
param_get(parameter_handles.accel_cal_handles[j].scale[i], &(_parameters.accel_cal_data[j].scale[i]));
|
||||
}
|
||||
|
||||
} else {
|
||||
// Set all cal values to zero and scale factor to unity
|
||||
// Set all cal values to zero
|
||||
memset(&_parameters.accel_cal_data[j], 0, sizeof(_parameters.accel_cal_data[j]));
|
||||
|
||||
// Set the scale factor to unity
|
||||
for (unsigned int i = 0; i < 3; i++) {
|
||||
_parameters.accel_cal_data[j].scale[i] = 1.0f;
|
||||
}
|
||||
|
||||
PX4_WARN("FAIL ACCEL %d CAL PARAM LOAD - USING DEFAULTS", j);
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
@@ -241,22 +223,18 @@ int TemperatureCompensation::parameters_update()
|
||||
param_get(parameter_handles.baro_cal_handles[j].x2, &(_parameters.baro_cal_data[j].x2));
|
||||
param_get(parameter_handles.baro_cal_handles[j].x1, &(_parameters.baro_cal_data[j].x1));
|
||||
param_get(parameter_handles.baro_cal_handles[j].x0, &(_parameters.baro_cal_data[j].x0));
|
||||
param_get(parameter_handles.baro_cal_handles[j].scale, &(_parameters.baro_cal_data[j].scale));
|
||||
|
||||
} else {
|
||||
// Set all cal values to zero and scale factor to unity
|
||||
// Set all cal values to zero
|
||||
memset(&_parameters.baro_cal_data[j], 0, sizeof(_parameters.baro_cal_data[j]));
|
||||
|
||||
// Set the scale factor to unity
|
||||
_parameters.baro_cal_data[j].scale = 1.0f;
|
||||
|
||||
PX4_WARN("FAIL BARO %d CAL PARAM LOAD - USING DEFAULTS", j);
|
||||
ret = PX4_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* the offsets & scales might have changed, so make sure to report that change later when applying the
|
||||
/* the offsets might have changed, so make sure to report that change later when applying the
|
||||
* next corrections
|
||||
*/
|
||||
_gyro_data.reset_temperature();
|
||||
@@ -374,8 +352,7 @@ int TemperatureCompensation::set_sensor_id(uint32_t device_id, int topic_instanc
|
||||
return -1;
|
||||
}
|
||||
|
||||
int TemperatureCompensation::update_scales_and_offsets_gyro(int topic_instance, float temperature, float *offsets,
|
||||
float *scales)
|
||||
int TemperatureCompensation::update_offsets_gyro(int topic_instance, float temperature, float *offsets)
|
||||
{
|
||||
// Check if temperature compensation is enabled
|
||||
if (_parameters.gyro_tc_enable != 1) {
|
||||
@@ -392,11 +369,6 @@ int TemperatureCompensation::update_scales_and_offsets_gyro(int topic_instance,
|
||||
// Calculate and update the offsets
|
||||
calc_thermal_offsets_3D(_parameters.gyro_cal_data[mapping], temperature, offsets);
|
||||
|
||||
// Update the scales
|
||||
for (unsigned axis_index = 0; axis_index < 3; axis_index++) {
|
||||
scales[axis_index] = _parameters.gyro_cal_data[mapping].scale[axis_index];
|
||||
}
|
||||
|
||||
// Check if temperature delta is large enough to warrant a new publication
|
||||
if (fabsf(temperature - _gyro_data.last_temperature[topic_instance]) > 1.0f) {
|
||||
_gyro_data.last_temperature[topic_instance] = temperature;
|
||||
@@ -406,8 +378,7 @@ int TemperatureCompensation::update_scales_and_offsets_gyro(int topic_instance,
|
||||
return 1;
|
||||
}
|
||||
|
||||
int TemperatureCompensation::update_scales_and_offsets_accel(int topic_instance, float temperature, float *offsets,
|
||||
float *scales)
|
||||
int TemperatureCompensation::update_offsets_accel(int topic_instance, float temperature, float *offsets)
|
||||
{
|
||||
// Check if temperature compensation is enabled
|
||||
if (_parameters.accel_tc_enable != 1) {
|
||||
@@ -424,11 +395,6 @@ int TemperatureCompensation::update_scales_and_offsets_accel(int topic_instance,
|
||||
// Calculate and update the offsets
|
||||
calc_thermal_offsets_3D(_parameters.accel_cal_data[mapping], temperature, offsets);
|
||||
|
||||
// Update the scales
|
||||
for (unsigned axis_index = 0; axis_index < 3; axis_index++) {
|
||||
scales[axis_index] = _parameters.accel_cal_data[mapping].scale[axis_index];
|
||||
}
|
||||
|
||||
// Check if temperature delta is large enough to warrant a new publication
|
||||
if (fabsf(temperature - _accel_data.last_temperature[topic_instance]) > 1.0f) {
|
||||
_accel_data.last_temperature[topic_instance] = temperature;
|
||||
@@ -438,8 +404,7 @@ int TemperatureCompensation::update_scales_and_offsets_accel(int topic_instance,
|
||||
return 1;
|
||||
}
|
||||
|
||||
int TemperatureCompensation::update_scales_and_offsets_baro(int topic_instance, float temperature, float *offsets,
|
||||
float *scales)
|
||||
int TemperatureCompensation::update_offsets_baro(int topic_instance, float temperature, float *offsets)
|
||||
{
|
||||
// Check if temperature compensation is enabled
|
||||
if (_parameters.baro_tc_enable != 1) {
|
||||
@@ -456,9 +421,6 @@ int TemperatureCompensation::update_scales_and_offsets_baro(int topic_instance,
|
||||
// Calculate and update the offsets
|
||||
calc_thermal_offsets_1D(_parameters.baro_cal_data[mapping], temperature, *offsets);
|
||||
|
||||
// Update the scales
|
||||
*scales = _parameters.baro_cal_data[mapping].scale;
|
||||
|
||||
// Check if temperature delta is large enough to warrant a new publication
|
||||
if (fabsf(temperature - _baro_data.last_temperature[topic_instance]) > 1.0f) {
|
||||
_baro_data.last_temperature[topic_instance] = temperature;
|
||||
|
||||
@@ -84,15 +84,14 @@ public:
|
||||
* @param sensor_data input sensor data, output sensor data with applied corrections
|
||||
* @param temperature measured current temperature
|
||||
* @param offsets returns offsets that were applied (length = 3, except for baro), depending on return value
|
||||
* @param scales returns scales that were applied (length = 3), depending on return value
|
||||
* @return -1: error: correction enabled, but no sensor mapping set (@see set_sendor_id_gyro)
|
||||
* 0: no changes (correction not enabled),
|
||||
* 1: corrections applied but no changes to offsets & scales,
|
||||
* 2: corrections applied and offsets & scales updated
|
||||
* 1: corrections applied but no changes to offsets,
|
||||
* 2: corrections applied and offsets updated
|
||||
*/
|
||||
int update_scales_and_offsets_gyro(int topic_instance, float temperature, float *offsets, float *scales);
|
||||
int update_scales_and_offsets_accel(int topic_instance, float temperature, float *offsets, float *scales);
|
||||
int update_scales_and_offsets_baro(int topic_instance, float temperature, float *offsets, float *scales);
|
||||
int update_offsets_gyro(int topic_instance, float temperature, float *offsets);
|
||||
int update_offsets_accel(int topic_instance, float temperature, float *offsets);
|
||||
int update_offsets_baro(int topic_instance, float temperature, float *offsets);
|
||||
|
||||
/** output current configuration status to console */
|
||||
void print_status();
|
||||
@@ -110,7 +109,7 @@ private:
|
||||
|
||||
delta_temp = measured_temp - ref_temp
|
||||
offset = x5 * delta_temp^5 + x4 * delta_temp^4 + x3 * delta_temp^3 + x2 * delta_temp^2 + x1 * delta_temp + x0
|
||||
corrected_value = (raw_value - offset) * scale
|
||||
corrected_value = raw_value - offset
|
||||
|
||||
*/
|
||||
struct SensorCalData1D {
|
||||
@@ -121,7 +120,6 @@ private:
|
||||
float x2;
|
||||
float x1;
|
||||
float x0;
|
||||
float scale;
|
||||
float ref_temp;
|
||||
float min_temp;
|
||||
float max_temp;
|
||||
@@ -135,7 +133,6 @@ private:
|
||||
param_t x2;
|
||||
param_t x1;
|
||||
param_t x0;
|
||||
param_t scale;
|
||||
param_t ref_temp;
|
||||
param_t min_temp;
|
||||
param_t max_temp;
|
||||
@@ -154,7 +151,7 @@ private:
|
||||
|
||||
delta_temp = measured_temp - ref_temp
|
||||
offset = x3 * delta_temp^3 + x2 * delta_temp^2 + x1 * delta_temp + x0
|
||||
corrected_value = (raw_value - offset) * scale
|
||||
corrected_value = raw_value - offset
|
||||
|
||||
*/
|
||||
struct SensorCalData3D {
|
||||
@@ -163,7 +160,6 @@ private:
|
||||
float x2[3]; /**< x^2 term of polynomial */
|
||||
float x1[3]; /**< x^1 term of polynomial */
|
||||
float x0[3]; /**< x^0 / offset term of polynomial */
|
||||
float scale[3]; /**< scale factor correction */
|
||||
float ref_temp; /**< reference temperature used by the curve-fit */
|
||||
float min_temp; /**< minimum temperature with valid compensation data */
|
||||
float max_temp; /**< maximum temperature with valid compensation data */
|
||||
@@ -175,7 +171,6 @@ private:
|
||||
param_t x2[3];
|
||||
param_t x1[3];
|
||||
param_t x0[3];
|
||||
param_t scale[3];
|
||||
param_t ref_temp;
|
||||
param_t min_temp;
|
||||
param_t max_temp;
|
||||
|
||||
@@ -48,19 +48,6 @@ TemperatureCompensationModule::TemperatureCompensationModule() :
|
||||
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::lp_default),
|
||||
_loop_perf(perf_alloc(PC_ELAPSED, "temperature_compensation"))
|
||||
{
|
||||
// Initialize the publication variables
|
||||
for (unsigned i = 0; i < 3; i++) {
|
||||
_corrections.gyro_scale_0[i] = 1.0f;
|
||||
_corrections.accel_scale_0[i] = 1.0f;
|
||||
_corrections.gyro_scale_1[i] = 1.0f;
|
||||
_corrections.accel_scale_1[i] = 1.0f;
|
||||
_corrections.gyro_scale_2[i] = 1.0f;
|
||||
_corrections.accel_scale_2[i] = 1.0f;
|
||||
}
|
||||
|
||||
_corrections.baro_scale_0 = 1.0f;
|
||||
_corrections.baro_scale_1 = 1.0f;
|
||||
_corrections.baro_scale_2 = 1.0f;
|
||||
}
|
||||
|
||||
TemperatureCompensationModule::~TemperatureCompensationModule()
|
||||
@@ -81,11 +68,9 @@ void TemperatureCompensationModule::parameters_update()
|
||||
|
||||
if (temp < 0) {
|
||||
PX4_ERR("%s init: failed to find device ID %u for instance %i", "gyro", report.device_id, uorb_index);
|
||||
_corrections.gyro_mapping[uorb_index] = 0;
|
||||
_corrections.gyro_device_ids[uorb_index] = 0;
|
||||
|
||||
} else {
|
||||
_corrections.gyro_mapping[uorb_index] = temp;
|
||||
_corrections.gyro_device_ids[uorb_index] = report.device_id;
|
||||
}
|
||||
}
|
||||
@@ -101,11 +86,9 @@ void TemperatureCompensationModule::parameters_update()
|
||||
if (temp < 0) {
|
||||
PX4_ERR("%s init: failed to find device ID %u for instance %i", "accel", report.device_id, uorb_index);
|
||||
|
||||
_corrections.accel_mapping[uorb_index] = 0;
|
||||
_corrections.accel_device_ids[uorb_index] = 0;
|
||||
|
||||
} else {
|
||||
_corrections.accel_mapping[uorb_index] = temp;
|
||||
_corrections.accel_device_ids[uorb_index] = report.device_id;
|
||||
}
|
||||
}
|
||||
@@ -120,13 +103,10 @@ void TemperatureCompensationModule::parameters_update()
|
||||
|
||||
if (temp < 0) {
|
||||
PX4_ERR("%s init: failed to find device ID %u for instance %i", "baro", report.device_id, uorb_index);
|
||||
_corrections.baro_mapping[uorb_index] = 0;
|
||||
_corrections.baro_device_ids[uorb_index] = 0;
|
||||
|
||||
} else {
|
||||
_corrections.baro_mapping[uorb_index] = temp;
|
||||
_corrections.baro_device_ids[uorb_index] = temp;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,7 +115,6 @@ void TemperatureCompensationModule::parameters_update()
|
||||
void TemperatureCompensationModule::accelPoll()
|
||||
{
|
||||
float *offsets[] = {_corrections.accel_offset_0, _corrections.accel_offset_1, _corrections.accel_offset_2 };
|
||||
float *scales[] = {_corrections.accel_scale_0, _corrections.accel_scale_1, _corrections.accel_scale_2 };
|
||||
|
||||
// For each accel instance
|
||||
for (uint8_t uorb_index = 0; uorb_index < ACCEL_COUNT_MAX; uorb_index++) {
|
||||
@@ -143,13 +122,13 @@ void TemperatureCompensationModule::accelPoll()
|
||||
|
||||
// Grab temperature from report
|
||||
if (_accel_subs[uorb_index].update(&report)) {
|
||||
if (PX4_ISFINITE(report.temperature)) {
|
||||
// Update the offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_offsets_accel(uorb_index, report.temperature, offsets[uorb_index]) == 2) {
|
||||
|
||||
// Update the scales and offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_scales_and_offsets_accel(uorb_index, report.temperature, offsets[uorb_index],
|
||||
scales[uorb_index]) == 2) {
|
||||
|
||||
_corrections.accel_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
_corrections.accel_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,7 +137,6 @@ void TemperatureCompensationModule::accelPoll()
|
||||
void TemperatureCompensationModule::gyroPoll()
|
||||
{
|
||||
float *offsets[] = {_corrections.gyro_offset_0, _corrections.gyro_offset_1, _corrections.gyro_offset_2 };
|
||||
float *scales[] = {_corrections.gyro_scale_0, _corrections.gyro_scale_1, _corrections.gyro_scale_2 };
|
||||
|
||||
// For each gyro instance
|
||||
for (uint8_t uorb_index = 0; uorb_index < GYRO_COUNT_MAX; uorb_index++) {
|
||||
@@ -166,13 +144,13 @@ void TemperatureCompensationModule::gyroPoll()
|
||||
|
||||
// Grab temperature from report
|
||||
if (_gyro_subs[uorb_index].update(&report)) {
|
||||
if (PX4_ISFINITE(report.temperature)) {
|
||||
// Update the offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_offsets_gyro(uorb_index, report.temperature, offsets[uorb_index]) == 2) {
|
||||
|
||||
// Update the scales and offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_scales_and_offsets_gyro(uorb_index, report.temperature, offsets[uorb_index],
|
||||
scales[uorb_index]) == 2) {
|
||||
|
||||
_corrections.gyro_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
_corrections.gyro_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,7 +159,6 @@ void TemperatureCompensationModule::gyroPoll()
|
||||
void TemperatureCompensationModule::baroPoll()
|
||||
{
|
||||
float *offsets[] = {&_corrections.baro_offset_0, &_corrections.baro_offset_1, &_corrections.baro_offset_2 };
|
||||
float *scales[] = {&_corrections.baro_scale_0, &_corrections.baro_scale_1, &_corrections.baro_scale_2 };
|
||||
|
||||
// For each baro instance
|
||||
for (uint8_t uorb_index = 0; uorb_index < BARO_COUNT_MAX; uorb_index++) {
|
||||
@@ -189,13 +166,13 @@ void TemperatureCompensationModule::baroPoll()
|
||||
|
||||
// Grab temperature from report
|
||||
if (_baro_subs[uorb_index].update(&report)) {
|
||||
if (PX4_ISFINITE(report.temperature)) {
|
||||
// Update the offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_offsets_baro(uorb_index, report.temperature, offsets[uorb_index]) == 2) {
|
||||
|
||||
// Update the scales and offsets and mark for publication if they've changed
|
||||
if (_temperature_compensation.update_scales_and_offsets_baro(uorb_index, report.temperature,
|
||||
offsets[uorb_index], scales[uorb_index]) == 2) {
|
||||
|
||||
_corrections.baro_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
_corrections.baro_device_ids[uorb_index] = report.device_id;
|
||||
_corrections_changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,30 +154,6 @@ PARAM_DEFINE_FLOAT(TC_A0_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A0_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A0_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A0_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A0_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer calibration reference temperature.
|
||||
*
|
||||
@@ -308,30 +284,6 @@ PARAM_DEFINE_FLOAT(TC_A1_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A1_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A1_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A1_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A1_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer calibration reference temperature.
|
||||
*
|
||||
@@ -462,30 +414,6 @@ PARAM_DEFINE_FLOAT(TC_A2_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A2_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A2_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A2_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_A2_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Accelerometer calibration reference temperature.
|
||||
*
|
||||
|
||||
@@ -106,14 +106,6 @@ PARAM_DEFINE_FLOAT(TC_B0_X1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B0_X0, 0.0f);
|
||||
|
||||
/**
|
||||
* Barometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B0_SCL, 1.0f);
|
||||
|
||||
/**
|
||||
* Barometer calibration reference temperature.
|
||||
*
|
||||
@@ -196,14 +188,6 @@ PARAM_DEFINE_FLOAT(TC_B1_X1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B1_X0, 0.0f);
|
||||
|
||||
/**
|
||||
* Barometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B1_SCL, 1.0f);
|
||||
|
||||
/**
|
||||
* Barometer calibration reference temperature.
|
||||
*
|
||||
@@ -286,14 +270,6 @@ PARAM_DEFINE_FLOAT(TC_B2_X1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B2_X0, 0.0f);
|
||||
|
||||
/**
|
||||
* Barometer scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_B2_SCL, 1.0f);
|
||||
|
||||
/**
|
||||
* Barometer calibration reference temperature.
|
||||
*
|
||||
|
||||
@@ -154,30 +154,6 @@ PARAM_DEFINE_FLOAT(TC_G0_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G0_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G0_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G0_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G0_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro calibration reference temperature.
|
||||
*
|
||||
@@ -308,30 +284,6 @@ PARAM_DEFINE_FLOAT(TC_G1_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G1_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G1_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G1_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G1_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro calibration reference temperature.
|
||||
*
|
||||
@@ -462,30 +414,6 @@ PARAM_DEFINE_FLOAT(TC_G2_X0_1, 0.0f);
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G2_X0_2, 0.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - X axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G2_SCL_0, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Y axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G2_SCL_1, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro scale factor - Z axis.
|
||||
*
|
||||
* @group Thermal Compensation
|
||||
* @category system
|
||||
*/
|
||||
PARAM_DEFINE_FLOAT(TC_G2_SCL_2, 1.0f);
|
||||
|
||||
/**
|
||||
* Gyro calibration reference temperature.
|
||||
*
|
||||
|
||||
@@ -68,22 +68,6 @@ TemperatureCalibrationAccel::~TemperatureCalibrationAccel()
|
||||
}
|
||||
}
|
||||
|
||||
void TemperatureCalibrationAccel::reset_calibration()
|
||||
{
|
||||
/* reset all driver level calibrations */
|
||||
float offset = 0.0f;
|
||||
float scale = 1.0f;
|
||||
|
||||
for (unsigned s = 0; s < 3; s++) {
|
||||
set_parameter("CAL_ACC%u_XOFF", s, &offset);
|
||||
set_parameter("CAL_ACC%u_YOFF", s, &offset);
|
||||
set_parameter("CAL_ACC%u_ZOFF", s, &offset);
|
||||
set_parameter("CAL_ACC%u_XSCALE", s, &scale);
|
||||
set_parameter("CAL_ACC%u_YSCALE", s, &scale);
|
||||
set_parameter("CAL_ACC%u_ZSCALE", s, &scale);
|
||||
}
|
||||
}
|
||||
|
||||
int TemperatureCalibrationAccel::update_sensor_instance(PerSensorData &data, int sensor_sub)
|
||||
{
|
||||
bool finished = data.hot_soaked;
|
||||
|
||||
@@ -47,11 +47,6 @@ public:
|
||||
*/
|
||||
int finish();
|
||||
|
||||
/**
|
||||
* @see TemperatureCalibrationBase::reset_calibration()
|
||||
*/
|
||||
void reset_calibration();
|
||||
|
||||
private:
|
||||
|
||||
virtual inline int update_sensor_instance(PerSensorData &data, int sensor_sub);
|
||||
|
||||
@@ -68,11 +68,6 @@ TemperatureCalibrationBaro::~TemperatureCalibrationBaro()
|
||||
}
|
||||
}
|
||||
|
||||
void TemperatureCalibrationBaro::reset_calibration()
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
int TemperatureCalibrationBaro::update_sensor_instance(PerSensorData &data, int sensor_sub)
|
||||
{
|
||||
bool finished = data.hot_soaked;
|
||||
|
||||
@@ -50,11 +50,6 @@ public:
|
||||
*/
|
||||
int finish();
|
||||
|
||||
/**
|
||||
* @see TemperatureCalibrationBase::reset_calibration()
|
||||
*/
|
||||
void reset_calibration();
|
||||
|
||||
private:
|
||||
|
||||
virtual int update_sensor_instance(PerSensorData &data, int sensor_sub);
|
||||
|
||||
@@ -78,9 +78,6 @@ public:
|
||||
*/
|
||||
virtual int finish() = 0;
|
||||
|
||||
/** reset all driver-level calibration parameters */
|
||||
virtual void reset_calibration() = 0;
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
||||
@@ -55,18 +55,6 @@ TemperatureCalibrationGyro::TemperatureCalibrationGyro(float min_temperature_ris
|
||||
_num_sensor_instances = num_gyros;
|
||||
}
|
||||
|
||||
void TemperatureCalibrationGyro::reset_calibration()
|
||||
{
|
||||
/* reset all driver level calibrations */
|
||||
float offset = 0.0f;
|
||||
|
||||
for (unsigned s = 0; s < 3; s++) {
|
||||
set_parameter("CAL_GYRO%u_XOFF", s, &offset);
|
||||
set_parameter("CAL_GYRO%u_YOFF", s, &offset);
|
||||
set_parameter("CAL_GYRO%u_ZOFF", s, &offset);
|
||||
}
|
||||
}
|
||||
|
||||
int TemperatureCalibrationGyro::update_sensor_instance(PerSensorData &data, int sensor_sub)
|
||||
{
|
||||
bool finished = data.hot_soaked;
|
||||
|
||||
@@ -48,11 +48,6 @@ public:
|
||||
*/
|
||||
int finish();
|
||||
|
||||
/**
|
||||
* @see TemperatureCalibrationBase::reset_calibration()
|
||||
*/
|
||||
void reset_calibration();
|
||||
|
||||
private:
|
||||
|
||||
virtual int update_sensor_instance(PerSensorData &data, int sensor_sub);
|
||||
|
||||
@@ -163,16 +163,6 @@ void TemperatureCalibration::task_main()
|
||||
}
|
||||
}
|
||||
|
||||
// reset params
|
||||
for (int i = 0; i < num_calibrators; ++i) {
|
||||
calibrators[i]->reset_calibration();
|
||||
}
|
||||
|
||||
// make sure the system updates the changed parameters
|
||||
param_notify_changes();
|
||||
|
||||
px4_usleep(300000); // wait a bit for the system to apply the parameters
|
||||
|
||||
hrt_abstime next_progress_output = hrt_absolute_time() + 1e6;
|
||||
|
||||
// control LED's: blink, then turn solid according to progress
|
||||
|
||||
Reference in New Issue
Block a user