mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 15:28:53 +08:00
Thermal Calibration - add parameter required to control minimum starting temperature
This commit is contained in:
committed by
Lorenz Meier
parent
693cc4a533
commit
c901c4b39e
@@ -44,8 +44,8 @@
|
||||
#include <uORB/topics/sensor_accel.h>
|
||||
#include <mathlib/mathlib.h>
|
||||
|
||||
TemperatureCalibrationAccel::TemperatureCalibrationAccel(float min_temperature_rise)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise)
|
||||
TemperatureCalibrationAccel::TemperatureCalibrationAccel(float min_temperature_rise, float min_start_temperature)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise, min_start_temperature)
|
||||
{
|
||||
|
||||
//init subscriptions
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
class TemperatureCalibrationAccel : public TemperatureCalibrationCommon<3, 3>
|
||||
{
|
||||
public:
|
||||
TemperatureCalibrationAccel(float min_temperature_rise);
|
||||
TemperatureCalibrationAccel(float min_temperature_rise, float min_start_temperature);
|
||||
virtual ~TemperatureCalibrationAccel();
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,8 +44,8 @@
|
||||
#include <uORB/topics/sensor_baro.h>
|
||||
#include <mathlib/mathlib.h>
|
||||
|
||||
TemperatureCalibrationBaro::TemperatureCalibrationBaro(float min_temperature_rise)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise)
|
||||
TemperatureCalibrationBaro::TemperatureCalibrationBaro(float min_temperature_rise, float min_start_temperature)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise, min_start_temperature)
|
||||
{
|
||||
|
||||
//init subscriptions
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
class TemperatureCalibrationBaro : public TemperatureCalibrationCommon<1, POLYFIT_ORDER>
|
||||
{
|
||||
public:
|
||||
TemperatureCalibrationBaro(float min_temperature_rise);
|
||||
TemperatureCalibrationBaro(float min_temperature_rise, float min_start_temperature);
|
||||
virtual ~TemperatureCalibrationBaro();
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,8 +53,8 @@
|
||||
class TemperatureCalibrationBase
|
||||
{
|
||||
public:
|
||||
TemperatureCalibrationBase(float min_temperature_rise)
|
||||
: _min_temperature_rise(min_temperature_rise) {}
|
||||
TemperatureCalibrationBase(float min_temperature_rise, float min_start_temperature)
|
||||
: _min_temperature_rise(min_temperature_rise), _min_start_temperature(min_start_temperature) {}
|
||||
|
||||
virtual ~TemperatureCalibrationBase() {}
|
||||
|
||||
@@ -85,6 +85,7 @@ protected:
|
||||
inline int set_parameter(const char *format_str, unsigned index, const void *value);
|
||||
|
||||
float _min_temperature_rise; ///< minimum difference in temperature before the process finishes
|
||||
float _min_start_temperature; ///< minimum temperature before the process starts
|
||||
};
|
||||
|
||||
|
||||
@@ -110,8 +111,8 @@ template <int Dim, int PolyfitOrder>
|
||||
class TemperatureCalibrationCommon : public TemperatureCalibrationBase
|
||||
{
|
||||
public:
|
||||
TemperatureCalibrationCommon(float min_temperature_rise)
|
||||
: TemperatureCalibrationBase(min_temperature_rise) {}
|
||||
TemperatureCalibrationCommon(float min_temperature_rise, float min_start_temperature)
|
||||
: TemperatureCalibrationBase(min_temperature_rise, min_start_temperature) {}
|
||||
|
||||
virtual ~TemperatureCalibrationCommon() {}
|
||||
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
#include <uORB/topics/sensor_gyro.h>
|
||||
#include "gyro.h"
|
||||
|
||||
TemperatureCalibrationGyro::TemperatureCalibrationGyro(float min_temperature_rise, int gyro_subs[], int num_gyros)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise)
|
||||
TemperatureCalibrationGyro::TemperatureCalibrationGyro(float min_temperature_rise, float min_start_temperature, int gyro_subs[], int num_gyros)
|
||||
: TemperatureCalibrationCommon(min_temperature_rise, min_start_temperature)
|
||||
{
|
||||
for (int i = 0; i < num_gyros; ++i) {
|
||||
_sensor_subs[i] = gyro_subs[i];
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
class TemperatureCalibrationGyro : public TemperatureCalibrationCommon<3, 3>
|
||||
{
|
||||
public:
|
||||
TemperatureCalibrationGyro(float min_temperature_rise, int gyro_subs[], int num_gyros);
|
||||
TemperatureCalibrationGyro(float min_temperature_rise, float min_start_temperature, int gyro_subs[], int num_gyros);
|
||||
virtual ~TemperatureCalibrationGyro() {}
|
||||
|
||||
/**
|
||||
|
||||
@@ -127,13 +127,16 @@ void TemperatureCalibration::task_main()
|
||||
param_get(param_find("SYS_CAL_TDEL"), &min_temp_rise);
|
||||
PX4_INFO("Waiting for %i degrees difference in sensor temperature", min_temp_rise);
|
||||
|
||||
int32_t min_start_temp = 5;
|
||||
param_get(param_find("SYS_CAL_TMIN"), &min_start_temp);
|
||||
|
||||
//init calibrators
|
||||
TemperatureCalibrationBase *calibrators[3];
|
||||
bool error_reported[3] = {};
|
||||
int num_calibrators = 0;
|
||||
|
||||
if (_accel) {
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationAccel(min_temp_rise);
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationAccel(min_temp_rise,min_start_temp);
|
||||
|
||||
if (calibrators[num_calibrators]) {
|
||||
++num_calibrators;
|
||||
@@ -144,7 +147,7 @@ void TemperatureCalibration::task_main()
|
||||
}
|
||||
|
||||
if (_baro) {
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationBaro(min_temp_rise);
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationBaro(min_temp_rise, min_start_temp);
|
||||
|
||||
if (calibrators[num_calibrators]) {
|
||||
++num_calibrators;
|
||||
@@ -155,7 +158,7 @@ void TemperatureCalibration::task_main()
|
||||
}
|
||||
|
||||
if (_gyro) {
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationGyro(min_temp_rise, gyro_sub, num_gyro);
|
||||
calibrators[num_calibrators] = new TemperatureCalibrationGyro(min_temp_rise, min_start_temp, gyro_sub, num_gyro);
|
||||
|
||||
if (calibrators[num_calibrators]) {
|
||||
++num_calibrators;
|
||||
|
||||
@@ -221,3 +221,13 @@ PARAM_DEFINE_INT32(SYS_CAL_BARO, 0);
|
||||
* @group System
|
||||
*/
|
||||
PARAM_DEFINE_INT32(SYS_CAL_DELT, 24);
|
||||
|
||||
/**
|
||||
* Minimum starting temperature for thermal calibration
|
||||
*
|
||||
* Temperature calibration for each sensor will ignore data if the temperature is lower than the value set by SYS_CAL_TMIN.
|
||||
*
|
||||
* @unit deg C
|
||||
* @group System
|
||||
*/
|
||||
PARAM_DEFINE_INT32(SYS_CAL_TMIN, 5);
|
||||
|
||||
Reference in New Issue
Block a user