Skip to content

Commit 5e749a1

Browse files
committed
AP_InertialSensor: enable fast rate logic on Invensense v1 IMUs
1 parent ee12af3 commit 5e749a1

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

libraries/AP_InertialSensor/AP_InertialSensor_Invensense.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <AP_InternalError/AP_InternalError.h>
2727
#include <AP_Logger/AP_Logger.h>
2828

29+
#include "AP_InertialSensor_rate_config.h"
2930
#include "AP_InertialSensor_Invensense.h"
3031
#include <GCS_MAVLink/GCS.h>
3132

@@ -487,6 +488,21 @@ bool AP_InertialSensor_Invensense::update() /* front end */
487488
return true;
488489
}
489490

491+
void AP_InertialSensor_Invensense::set_primary(bool _is_primary)
492+
{
493+
#if AP_INERTIALSENSOR_FAST_SAMPLE_WINDOW_ENABLED
494+
if (_imu.is_dynamic_fifo_enabled(gyro_instance)) {
495+
if (_is_primary) {
496+
_dev->adjust_periodic_callback(periodic_handle, 1000000UL / _gyro_backend_rate_hz);
497+
} else {
498+
// scale down non-primary to 2x loop rate, but no greater than the default sampling rate
499+
_dev->adjust_periodic_callback(periodic_handle,
500+
1000000UL / constrain_int16(get_loop_rate_hz() * 2, 400, 1000));
501+
}
502+
}
503+
#endif
504+
}
505+
490506
/*
491507
accumulate new samples
492508
*/

libraries/AP_InertialSensor/AP_InertialSensor_Invensense.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class AP_InertialSensor_Invensense : public AP_InertialSensor_Backend
7373
// 24G, but they are not guaranteed to be remotely linear past
7474
// 16G
7575
const uint16_t multiplier_accel = INT16_MAX/(26*GRAVITY_MSS);
76+
protected:
77+
void set_primary(bool _is_primary) override;
7678

7779
private:
7880
AP_InertialSensor_Invensense(AP_InertialSensor &imu,

0 commit comments

Comments
 (0)