mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-03 12:14:10 -04:00
AP_Baro: average SITL baro measurements using update()
This commit is contained in:
parent
d276029e35
commit
da9118fbd0
@ -7,6 +7,7 @@
|
|||||||
#include <AP_Param/AP_Param.h>
|
#include <AP_Param/AP_Param.h>
|
||||||
#include <Filter/Filter.h>
|
#include <Filter/Filter.h>
|
||||||
#include <Filter/DerivativeFilter.h>
|
#include <Filter/DerivativeFilter.h>
|
||||||
|
#include <AP_Buffer/AP_Buffer.h>
|
||||||
|
|
||||||
// maximum number of sensor instances
|
// maximum number of sensor instances
|
||||||
#define BARO_MAX_INSTANCES 3
|
#define BARO_MAX_INSTANCES 3
|
||||||
@ -109,6 +110,12 @@ public:
|
|||||||
// HIL (and SITL) interface, setting pressure and temperature
|
// HIL (and SITL) interface, setting pressure and temperature
|
||||||
void setHIL(uint8_t instance, float pressure, float temperature);
|
void setHIL(uint8_t instance, float pressure, float temperature);
|
||||||
|
|
||||||
|
// HIL variables
|
||||||
|
struct {
|
||||||
|
AP_Buffer<float,10> press_buffer;
|
||||||
|
AP_Buffer<float,10> temp_buffer;
|
||||||
|
} _hil;
|
||||||
|
|
||||||
// register a new sensor, claiming a sensor slot. If we are out of
|
// register a new sensor, claiming a sensor slot. If we are out of
|
||||||
// slots it will panic
|
// slots it will panic
|
||||||
uint8_t register_sensor(void);
|
uint8_t register_sensor(void);
|
||||||
|
@ -66,7 +66,30 @@ void AP_Baro::setHIL(uint8_t instance, float pressure, float temperature)
|
|||||||
// invalid
|
// invalid
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sensors[instance].pressure = pressure;
|
_hil.press_buffer.push_back(pressure);
|
||||||
sensors[instance].temperature = temperature;
|
_hil.temp_buffer.push_back(temperature);
|
||||||
sensors[instance].last_update_ms = hal.scheduler->millis();
|
}
|
||||||
|
|
||||||
|
// Read the sensor
|
||||||
|
void AP_Baro_HIL::update(void)
|
||||||
|
{
|
||||||
|
float pressure = 0.0;
|
||||||
|
float temperature = 0.0;
|
||||||
|
float pressure_sum = 0.0;
|
||||||
|
float temperature_sum = 0.0;
|
||||||
|
uint32_t sum_count = 0;
|
||||||
|
|
||||||
|
while (_frontend._hil.press_buffer.is_empty() == false){
|
||||||
|
_frontend._hil.press_buffer.pop_front(pressure);
|
||||||
|
pressure_sum += pressure; // Pressure in Pascals
|
||||||
|
_frontend._hil.temp_buffer.pop_front(temperature);
|
||||||
|
temperature_sum += temperature; // degrees celcius
|
||||||
|
sum_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sum_count > 0) {
|
||||||
|
pressure_sum /= (float)sum_count;
|
||||||
|
temperature_sum /= (float)sum_count;
|
||||||
|
_copy_to_frontend(0, pressure_sum, temperature_sum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ class AP_Baro_HIL : public AP_Baro_Backend
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AP_Baro_HIL(AP_Baro &baro);
|
AP_Baro_HIL(AP_Baro &baro);
|
||||||
void update() {}
|
void update(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t _instance;
|
uint8_t _instance;
|
||||||
|
Loading…
Reference in New Issue
Block a user