EKF: RingBuffer minor improvements

- allocate IMU and output buffers on construction according to defaults
 - determine buffer max time delay based on configuration parameters
 - reorder flowSample and extVisionSample to minimize padding
 - adjust parameter defaults to match PX4-Autopilot
This commit is contained in:
Daniel Agar
2020-12-03 20:48:51 -05:00
committed by GitHub
parent 67f13f7ede
commit 03cfcb903e
12 changed files with 85 additions and 111 deletions
+1 -2
View File
@@ -15,8 +15,7 @@ Baro::~Baro()
void Baro::send(uint64_t time)
{
const baroSample baro_sample {_baro_data, time};
_ekf->setBaroData(baro_sample);
_ekf->setBaroData(baroSample{time, _baro_data});
}
void Baro::setData(float baro)
+4 -12
View File
@@ -17,9 +17,7 @@ void EkfWrapper::setBaroHeight()
bool EkfWrapper::isIntendingBaroHeightFusion() const
{
filter_control_status_u control_status;
_ekf->get_control_mode(&control_status.value);
return control_status.flags.baro_hgt;
return _ekf->control_status_flags().baro_hgt;
}
void EkfWrapper::setGpsHeight()
@@ -29,9 +27,7 @@ void EkfWrapper::setGpsHeight()
bool EkfWrapper::isIntendingGpsHeightFusion() const
{
filter_control_status_u control_status;
_ekf->get_control_mode(&control_status.value);
return control_status.flags.gps_hgt;
return _ekf->control_status_flags().gps_hgt;
}
void EkfWrapper::setRangeHeight()
@@ -41,9 +37,7 @@ void EkfWrapper::setRangeHeight()
bool EkfWrapper::isIntendingRangeHeightFusion() const
{
filter_control_status_u control_status;
_ekf->get_control_mode(&control_status.value);
return control_status.flags.rng_hgt;
return _ekf->control_status_flags().rng_hgt;
}
void EkfWrapper::setVisionHeight()
@@ -53,9 +47,7 @@ void EkfWrapper::setVisionHeight()
bool EkfWrapper::isIntendingVisionHeightFusion() const
{
filter_control_status_u control_status;
_ekf->get_control_mode(&control_status.value);
return control_status.flags.ev_hgt;
return _ekf->control_status_flags().ev_hgt;
}
void EkfWrapper::enableGpsFusion()
+1 -2
View File
@@ -15,8 +15,7 @@ Mag::~Mag()
void Mag::send(uint64_t time)
{
const magSample mag_sample {_mag_data, time};
_ekf->setMagData(mag_sample);
_ekf->setMagData(magSample{time, _mag_data});
}
void Mag::setData(const Vector3f& mag)
+3 -4
View File
@@ -61,15 +61,14 @@ void Vio::setOrientation(const Quatf& quat)
void Vio::setVelocityFrameToBody()
{
_vio_data.vel_frame = BODY_FRAME_FRD;
_vio_data.vel_frame = velocity_frame_t::BODY_FRAME_FRD;
}
void Vio::setVelocityFrameToLocal()
{
_vio_data.vel_frame = LOCAL_FRAME_FRD;
_vio_data.vel_frame = velocity_frame_t::LOCAL_FRAME_FRD;
}
extVisionSample Vio::dataAtRest()
{
extVisionSample vio_data;
@@ -79,7 +78,7 @@ extVisionSample Vio::dataAtRest()
vio_data.posVar = Vector3f{0.1f, 0.1f, 0.1f};
vio_data.velCov = matrix::eye<float ,3>() * 0.1f;
vio_data.angVar = 0.05f;
vio_data.vel_frame = LOCAL_FRAME_FRD;
vio_data.vel_frame = velocity_frame_t::LOCAL_FRAME_FRD;
return vio_data;
}
+1 -2
View File
@@ -66,8 +66,7 @@ TEST_F(EkfMeasurementSamplingTest, baroDownSampling)
imu_sample.time_us = time;
_ekf->setIMUData(imu_sample);
}
const baroSample baro_sample {baro_data, time};
_ekf->setBaroData(baro_sample);
_ekf->setBaroData(baroSample{time, baro_data});
baro_data *= -1.0f;
time += 1000000 / baro_rate_Hz;
}
-1
View File
@@ -62,7 +62,6 @@ class EkfRingBufferTest : public ::testing::Test {
void TearDown() override
{
_buffer->unallocate();
delete _buffer;
}
};
+1 -1
View File
@@ -59,7 +59,7 @@ public:
protected:
SensorRangeFinder _range_finder{};
const rangeSample _good_sample{1.f, (uint64_t)2e6, 100}; // {range, time_us, quality}
const rangeSample _good_sample{(uint64_t)2e6, 1.f, 100}; // {time_us, range, quality}
const float _min_range{0.5f};
const float _max_range{10.f};