diff options
author | Thomas Gubler <thomasgubler@gmail.com> | 2013-02-24 21:57:38 +0100 |
---|---|---|
committer | Thomas Gubler <thomasgubler@gmail.com> | 2013-02-24 21:57:38 +0100 |
commit | c0a852dab48e55aa12c995adc6dc0c32aa9a7ac3 (patch) | |
tree | ec06d0ad411737cc56bc102f90e82680cf943018 /apps/sensors | |
parent | 2707d2c1dde65dfb9ba48258994badb4b57f9627 (diff) | |
download | px4-firmware-c0a852dab48e55aa12c995adc6dc0c32aa9a7ac3.tar.gz px4-firmware-c0a852dab48e55aa12c995adc6dc0c32aa9a7ac3.tar.bz2 px4-firmware-c0a852dab48e55aa12c995adc6dc0c32aa9a7ac3.zip |
airspeed (pitot) offset calibration
Diffstat (limited to 'apps/sensors')
-rw-r--r-- | apps/sensors/sensor_params.c | 2 | ||||
-rw-r--r-- | apps/sensors/sensors.cpp | 13 |
2 files changed, 13 insertions, 2 deletions
diff --git a/apps/sensors/sensor_params.c b/apps/sensors/sensor_params.c index 9f23ebbba..a1ef9d136 100644 --- a/apps/sensors/sensor_params.c +++ b/apps/sensors/sensor_params.c @@ -64,6 +64,8 @@ PARAM_DEFINE_FLOAT(SENS_ACC_XSCALE, 1.0f); PARAM_DEFINE_FLOAT(SENS_ACC_YSCALE, 1.0f); PARAM_DEFINE_FLOAT(SENS_ACC_ZSCALE, 1.0f); +PARAM_DEFINE_FLOAT(SENS_VAIR_OFF, 2.5f); + PARAM_DEFINE_FLOAT(RC1_MIN, 1000.0f); PARAM_DEFINE_FLOAT(RC1_TRIM, 1500.0f); PARAM_DEFINE_FLOAT(RC1_MAX, 2000.0f); diff --git a/apps/sensors/sensors.cpp b/apps/sensors/sensors.cpp index c29910dcc..f77bc9b8b 100644 --- a/apps/sensors/sensors.cpp +++ b/apps/sensors/sensors.cpp @@ -187,6 +187,7 @@ private: float mag_scale[3]; float accel_offset[3]; float accel_scale[3]; + float airspeed_offset; int rc_type; @@ -235,6 +236,7 @@ private: param_t accel_scale[3]; param_t mag_offset[3]; param_t mag_scale[3]; + param_t airspeed_offset; param_t rc_map_roll; param_t rc_map_pitch; @@ -480,6 +482,9 @@ Sensors::Sensors() : _parameter_handles.mag_scale[1] = param_find("SENS_MAG_YSCALE"); _parameter_handles.mag_scale[2] = param_find("SENS_MAG_ZSCALE"); + /*Airspeed offset */ + _parameter_handles.airspeed_offset = param_find("SENS_VAIR_OFF"); + _parameter_handles.battery_voltage_scaling = param_find("BAT_V_SCALING"); /* fetch initial parameter values */ @@ -687,6 +692,9 @@ Sensors::parameters_update() param_get(_parameter_handles.mag_scale[1], &(_parameters.mag_scale[1])); param_get(_parameter_handles.mag_scale[2], &(_parameters.mag_scale[2])); + /* Airspeed offset */ + param_get(_parameter_handles.airspeed_offset, &(_parameters.airspeed_offset)); + /* scaling of ADC ticks to battery voltage */ if (param_get(_parameter_handles.battery_voltage_scaling, &(_parameters.battery_voltage_scaling)) != OK) { warnx("Failed updating voltage scaling param"); @@ -1036,7 +1044,7 @@ Sensors::adc_poll(struct sensor_combined_s &raw) // float pres_raw = fabsf(voltage - (3.3f / 2.0f)); // float pres_mbar = pres_raw * (3.3f / 5.0f) * 10.0f; //XXX depends on sensor used..., where are the above numbers from? - float diff_pres_pa = fabsf(voltage - 2.5f) * 1000.0f; //for MPXV7002DP //xxx: need an offset calibration + float diff_pres_pa = (voltage - _parameters.airspeed_offset) * 1000.0f; //for MPXV7002DP float airspeed_true = calc_true_airspeed(diff_pres_pa + _barometer.pressure*1e2f, _barometer.pressure*1e2f, _barometer.temperature - 5.0f); //factor 1e2 for conversion from mBar to Pa @@ -1045,7 +1053,7 @@ Sensors::adc_poll(struct sensor_combined_s &raw) float airspeed_indicated = calc_indicated_airspeed(diff_pres_pa); - //printf("voltage: %.4f, diff_pres_pa %.4f, v_ind %.4f, v_true %.4f\n", (double)voltage, (double)diff_pres_pa, (double)airspeed_indicated, (double)airspeed_true); + //printf("voltage: %.4f, diff_pres_pa %.4f, baro press %.4f Pa, v_ind %.4f, v_true %.4f\n", (double)voltage, (double)diff_pres_pa, (double)_barometer.pressure*1e2f, (double)airspeed_indicated, (double)airspeed_true); _differential_pressure.timestamp = hrt_absolute_time(); _differential_pressure.static_pressure_mbar = _barometer.pressure; @@ -1053,6 +1061,7 @@ Sensors::adc_poll(struct sensor_combined_s &raw) _differential_pressure.temperature_celcius = _barometer.temperature; _differential_pressure.indicated_airspeed_m_s = airspeed_indicated; _differential_pressure.true_airspeed_m_s = airspeed_true; + _differential_pressure.voltage = voltage; /* announce the airspeed if needed, just publish else */ if (_airspeed_pub > 0) { |