APM:Libraries
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
AP_InertialSensor_Invensense Class Reference

#include <AP_InertialSensor_Invensense.h>

Inheritance diagram for AP_InertialSensor_Invensense:
[legend]
Collaboration diagram for AP_InertialSensor_Invensense:
[legend]

Public Types

enum  Invensense_Type {
  Invensense_MPU6000 =0, Invensense_MPU6500, Invensense_MPU9250, Invensense_ICM20608,
  Invensense_ICM20602, Invensense_ICM20789, Invensense_ICM20689
}
 
- Public Types inherited from AP_InertialSensor_Backend
enum  DevTypes {
  DEVTYPE_BMI160 = 0x09, DEVTYPE_L3G4200D = 0x10, DEVTYPE_ACC_LSM303D = 0x11, DEVTYPE_ACC_BMA180 = 0x12,
  DEVTYPE_ACC_MPU6000 = 0x13, DEVTYPE_ACC_MPU9250 = 0x16, DEVTYPE_ACC_IIS328DQ = 0x17, DEVTYPE_ACC_LSM9DS1 = 0x18,
  DEVTYPE_GYR_MPU6000 = 0x21, DEVTYPE_GYR_L3GD20 = 0x22, DEVTYPE_GYR_MPU9250 = 0x24, DEVTYPE_GYR_I3G4250D = 0x25,
  DEVTYPE_GYR_LSM9DS1 = 0x26, DEVTYPE_INS_ICM20789 = 0x27, DEVTYPE_INS_ICM20689 = 0x28
}
 

Public Member Functions

virtual ~AP_InertialSensor_Invensense ()
 
bool update () override
 
void accumulate () override
 
AuxiliaryBusget_auxiliary_bus () override
 
void start () override
 
- Public Member Functions inherited from AP_InertialSensor_Backend
 AP_InertialSensor_Backend (AP_InertialSensor &imu)
 
 AP_InertialSensor_Backend (const AP_InertialSensor_Backend &that)=delete
 
virtual ~AP_InertialSensor_Backend (void)
 
int16_t get_id () const
 
void notify_fifo_reset (void)
 

Static Public Member Functions

static AP_InertialSensor_Invensensefrom (AP_InertialSensor_Backend &backend)
 
static AP_InertialSensor_Backendprobe (AP_InertialSensor &imu, AP_HAL::OwnPtr< AP_HAL::I2CDevice > dev, enum Rotation rotation=ROTATION_NONE)
 
static AP_InertialSensor_Backendprobe (AP_InertialSensor &imu, AP_HAL::OwnPtr< AP_HAL::SPIDevice > dev, enum Rotation rotation=ROTATION_NONE)
 

Public Attributes

const uint16_t multiplier_accel = INT16_MAX/(26*GRAVITY_MSS)
 
Vector3f accel
 
Vector3f gyro
 
uint8_t count
 
LowPassFilterVector3f accel_filter {4000, 188}
 
LowPassFilterVector3f gyro_filter {8000, 188}
 

Private Member Functions

 AP_InertialSensor_Invensense (AP_InertialSensor &imu, AP_HAL::OwnPtr< AP_HAL::Device > dev, enum Rotation rotation)
 
bool _init ()
 
bool _hardware_init ()
 
bool _check_whoami ()
 
void _set_filter_register (void)
 
void _fifo_reset ()
 
bool _has_auxiliary_bus ()
 
void _read_fifo ()
 
bool _data_ready ()
 
void _poll_data ()
 
bool _block_read (uint8_t reg, uint8_t *buf, uint32_t size)
 
uint8_t _register_read (uint8_t reg)
 
void _register_write (uint8_t reg, uint8_t val, bool checked=false)
 
bool _accumulate (uint8_t *samples, uint8_t n_samples)
 
bool _accumulate_sensor_rate_sampling (uint8_t *samples, uint8_t n_samples)
 
bool _check_raw_temp (int16_t t2)
 

Private Attributes

friend AP_Invensense_AuxiliaryBus
 
friend AP_Invensense_AuxiliaryBusSlave
 
int16_t _raw_temp
 
uint8_t _gyro_instance
 
uint8_t _accel_instance
 
float temp_sensitivity = 1.0/340
 
float temp_zero = 36.53
 
float _temp_filtered
 
float _accel_scale
 
float _fifo_accel_scale
 
float _fifo_gyro_scale
 
LowPassFilter2pFloat _temp_filter
 
enum Rotation _rotation
 
AP_HAL::DigitalSource_drdy_pin
 
AP_HAL::OwnPtr< AP_HAL::Device_dev
 
AP_Invensense_AuxiliaryBus_auxiliary_bus
 
enum Invensense_Type _mpu_type
 
bool _fast_sampling
 
uint8_t _fifo_downsample_rate
 
uint16_t _backend_rate_hz
 
uint8_t _last_stat_user_ctrl
 
uint8_t * _fifo_buffer
 
struct {
   Vector3f   accel
 
   Vector3f   gyro
 
   uint8_t   count
 
   LowPassFilterVector3f   accel_filter {4000, 188}
 
   LowPassFilterVector3f   gyro_filter {8000, 188}
 
_accum
 

Additional Inherited Members

- Protected Member Functions inherited from AP_InertialSensor_Backend
void _rotate_and_correct_accel (uint8_t instance, Vector3f &accel)
 
void _rotate_and_correct_gyro (uint8_t instance, Vector3f &gyro)
 
void _publish_gyro (uint8_t instance, const Vector3f &gyro)
 
void _notify_new_gyro_raw_sample (uint8_t instance, const Vector3f &accel, uint64_t sample_us=0)
 
void _publish_accel (uint8_t instance, const Vector3f &accel)
 
void _notify_new_accel_raw_sample (uint8_t instance, const Vector3f &accel, uint64_t sample_us=0, bool fsync_set=false)
 
void _set_accel_oversampling (uint8_t instance, uint8_t n)
 
void _set_gyro_oversampling (uint8_t instance, uint8_t n)
 
void _set_accel_sensor_rate_sampling_enabled (uint8_t instance, bool value)
 
void _set_gyro_sensor_rate_sampling_enabled (uint8_t instance, bool value)
 
void _set_raw_sample_accel_multiplier (uint8_t instance, uint16_t mul)
 
void _set_raw_sampl_gyro_multiplier (uint8_t instance, uint16_t mul)
 
void _update_sensor_rate (uint16_t &count, uint32_t &start_us, float &rate_hz) const
 
void _set_accel_max_abs_offset (uint8_t instance, float offset)
 
uint32_t _accel_raw_sample_rate (uint8_t instance) const
 
void _set_accel_raw_sample_rate (uint8_t instance, uint16_t rate_hz)
 
uint32_t _gyro_raw_sample_rate (uint8_t instance) const
 
void _set_gyro_raw_sample_rate (uint8_t instance, uint16_t rate_hz)
 
void _publish_temperature (uint8_t instance, float temperature)
 
void _set_accel_error_count (uint8_t instance, uint32_t error_count)
 
void _set_gyro_error_count (uint8_t instance, uint32_t error_count)
 
void _inc_accel_error_count (uint8_t instance)
 
void _inc_gyro_error_count (uint8_t instance)
 
uint8_t _accel_filter_cutoff (void) const
 
uint8_t _gyro_filter_cutoff (void) const
 
uint16_t get_sample_rate_hz (void) const
 
void update_gyro (uint8_t instance)
 
void update_accel (uint8_t instance)
 
void set_gyro_orientation (uint8_t instance, enum Rotation rotation)
 
void set_accel_orientation (uint8_t instance, enum Rotation rotation)
 
void increment_clip_count (uint8_t instance)
 
bool enable_fast_sampling (uint8_t instance)
 
void _notify_new_accel_sensor_rate_sample (uint8_t instance, const Vector3f &accel)
 
void _notify_new_gyro_sensor_rate_sample (uint8_t instance, const Vector3f &gyro)
 
void notify_accel_fifo_reset (uint8_t instance)
 
void notify_gyro_fifo_reset (uint8_t instance)
 
- Protected Attributes inherited from AP_InertialSensor_Backend
AP_InertialSensor_imu
 
AP_HAL::Semaphore_sem
 
int16_t _id = -1
 
int8_t _last_accel_filter_hz [INS_MAX_INSTANCES]
 
int8_t _last_gyro_filter_hz [INS_MAX_INSTANCES]
 

Detailed Description

Definition at line 28 of file AP_InertialSensor_Invensense.h.

Member Enumeration Documentation

◆ Invensense_Type

Enumerator
Invensense_MPU6000 
Invensense_MPU6500 
Invensense_MPU9250 
Invensense_ICM20608 
Invensense_ICM20602 
Invensense_ICM20789 
Invensense_ICM20689 

Definition at line 59 of file AP_InertialSensor_Invensense.h.

Constructor & Destructor Documentation

◆ ~AP_InertialSensor_Invensense()

AP_InertialSensor_Invensense::~AP_InertialSensor_Invensense ( )
virtual

Definition at line 88 of file AP_InertialSensor_Invensense.cpp.

Here is the call graph for this function:

◆ AP_InertialSensor_Invensense()

AP_InertialSensor_Invensense::AP_InertialSensor_Invensense ( AP_InertialSensor imu,
AP_HAL::OwnPtr< AP_HAL::Device dev,
enum Rotation  rotation 
)
private

Definition at line 78 of file AP_InertialSensor_Invensense.cpp.

Referenced by probe().

Here is the caller graph for this function:

Member Function Documentation

◆ _accumulate()

bool AP_InertialSensor_Invensense::_accumulate ( uint8_t *  samples,
uint8_t  n_samples 
)
private

Definition at line 404 of file AP_InertialSensor_Invensense.cpp.

Referenced by _read_fifo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _accumulate_sensor_rate_sampling()

bool AP_InertialSensor_Invensense::_accumulate_sensor_rate_sampling ( uint8_t *  samples,
uint8_t  n_samples 
)
private

Definition at line 452 of file AP_InertialSensor_Invensense.cpp.

Referenced by _read_fifo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _block_read()

bool AP_InertialSensor_Invensense::_block_read ( uint8_t  reg,
uint8_t *  buf,
uint32_t  size 
)
private

Definition at line 633 of file AP_InertialSensor_Invensense.cpp.

Referenced by _check_raw_temp(), and _read_fifo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _check_raw_temp()

bool AP_InertialSensor_Invensense::_check_raw_temp ( int16_t  t2)
private

Definition at line 620 of file AP_InertialSensor_Invensense.cpp.

Referenced by _accumulate(), and _accumulate_sensor_rate_sampling().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _check_whoami()

bool AP_InertialSensor_Invensense::_check_whoami ( void  )
private

Definition at line 725 of file AP_InertialSensor_Invensense.cpp.

Referenced by _hardware_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _data_ready()

bool AP_InertialSensor_Invensense::_data_ready ( )
private

Definition at line 387 of file AP_InertialSensor_Invensense.cpp.

Referenced by _hardware_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _fifo_reset()

void AP_InertialSensor_Invensense::_fifo_reset ( )
private

Definition at line 158 of file AP_InertialSensor_Invensense.cpp.

Referenced by _accumulate(), _accumulate_sensor_rate_sampling(), _read_fifo(), and start().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _hardware_init()

bool AP_InertialSensor_Invensense::_hardware_init ( void  )
private

Definition at line 758 of file AP_InertialSensor_Invensense.cpp.

Referenced by _init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _has_auxiliary_bus()

bool AP_InertialSensor_Invensense::_has_auxiliary_bus ( )
private

Definition at line 178 of file AP_InertialSensor_Invensense.cpp.

Referenced by get_auxiliary_bus().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _init()

bool AP_InertialSensor_Invensense::_init ( void  )
private

Definition at line 146 of file AP_InertialSensor_Invensense.cpp.

Referenced by probe().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _poll_data()

void AP_InertialSensor_Invensense::_poll_data ( )
private

Definition at line 399 of file AP_InertialSensor_Invensense.cpp.

Referenced by start().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _read_fifo()

void AP_InertialSensor_Invensense::_read_fifo ( )
private

Definition at line 526 of file AP_InertialSensor_Invensense.cpp.

Referenced by _poll_data().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _register_read()

uint8_t AP_InertialSensor_Invensense::_register_read ( uint8_t  reg)
private

Definition at line 639 of file AP_InertialSensor_Invensense.cpp.

Referenced by _check_whoami(), _data_ready(), _hardware_init(), and start().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _register_write()

void AP_InertialSensor_Invensense::_register_write ( uint8_t  reg,
uint8_t  val,
bool  checked = false 
)
private

Definition at line 646 of file AP_InertialSensor_Invensense.cpp.

Referenced by _fifo_reset(), _hardware_init(), _set_filter_register(), AP_Invensense_AuxiliaryBusSlave::_set_passthrough(), AP_Invensense_AuxiliaryBusSlave::passthrough_read(), AP_Invensense_AuxiliaryBusSlave::passthrough_write(), and start().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _set_filter_register()

void AP_InertialSensor_Invensense::_set_filter_register ( void  )
private

Definition at line 654 of file AP_InertialSensor_Invensense.cpp.

Referenced by start().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ accumulate()

void AP_InertialSensor_Invensense::accumulate ( void  )
overridevirtual

Reimplemented from AP_InertialSensor_Backend.

Definition at line 363 of file AP_InertialSensor_Invensense.cpp.

Referenced by from().

Here is the caller graph for this function:

◆ from()

static AP_InertialSensor_Invensense& AP_InertialSensor_Invensense::from ( AP_InertialSensor_Backend backend)
inlinestatic

Definition at line 36 of file AP_InertialSensor_Invensense.h.

Referenced by AP_Invensense_AuxiliaryBus::_configure_slaves(), AP_Invensense_AuxiliaryBusSlave::_set_passthrough(), AP_Invensense_AuxiliaryBusSlave::passthrough_read(), AP_Invensense_AuxiliaryBusSlave::passthrough_write(), AP_Invensense_AuxiliaryBusSlave::read(), and AP_Invensense_AuxiliaryBus::register_periodic_callback().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_auxiliary_bus()

AuxiliaryBus * AP_InertialSensor_Invensense::get_auxiliary_bus ( )
overridevirtual

Reimplemented from AP_InertialSensor_Backend.

Definition at line 368 of file AP_InertialSensor_Invensense.cpp.

Referenced by from().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ probe() [1/2]

AP_InertialSensor_Backend * AP_InertialSensor_Invensense::probe ( AP_InertialSensor imu,
AP_HAL::OwnPtr< AP_HAL::I2CDevice dev,
enum Rotation  rotation = ROTATION_NONE 
)
static

Definition at line 96 of file AP_InertialSensor_Invensense.cpp.

Referenced by AP_InertialSensor::detect_backends(), and from().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ probe() [2/2]

AP_InertialSensor_Backend * AP_InertialSensor_Invensense::probe ( AP_InertialSensor imu,
AP_HAL::OwnPtr< AP_HAL::SPIDevice dev,
enum Rotation  rotation = ROTATION_NONE 
)
static

Definition at line 119 of file AP_InertialSensor_Invensense.cpp.

Here is the call graph for this function:

◆ start()

void AP_InertialSensor_Invensense::start ( void  )
overridevirtual

Reimplemented from AP_InertialSensor_Backend.

Definition at line 183 of file AP_InertialSensor_Invensense.cpp.

Referenced by from().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ update()

bool AP_InertialSensor_Invensense::update ( void  )
overridevirtual

Implements AP_InertialSensor_Backend.

Definition at line 350 of file AP_InertialSensor_Invensense.cpp.

Referenced by from().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ _accel_instance

uint8_t AP_InertialSensor_Invensense::_accel_instance
private

◆ _accel_scale

float AP_InertialSensor_Invensense::_accel_scale
private

◆ _accum

struct { ... } AP_InertialSensor_Invensense::_accum

◆ _auxiliary_bus

AP_Invensense_AuxiliaryBus* AP_InertialSensor_Invensense::_auxiliary_bus
private

◆ _backend_rate_hz

uint16_t AP_InertialSensor_Invensense::_backend_rate_hz
private

Definition at line 140 of file AP_InertialSensor_Invensense.h.

Referenced by _set_filter_register(), and start().

◆ _dev

AP_HAL::OwnPtr<AP_HAL::Device> AP_InertialSensor_Invensense::_dev
private

◆ _drdy_pin

AP_HAL::DigitalSource* AP_InertialSensor_Invensense::_drdy_pin
private

Definition at line 126 of file AP_InertialSensor_Invensense.h.

Referenced by _data_ready(), and _init().

◆ _fast_sampling

bool AP_InertialSensor_Invensense::_fast_sampling
private

Definition at line 134 of file AP_InertialSensor_Invensense.h.

Referenced by _read_fifo(), _set_filter_register(), and start().

◆ _fifo_accel_scale

float AP_InertialSensor_Invensense::_fifo_accel_scale
private

Definition at line 120 of file AP_InertialSensor_Invensense.h.

Referenced by _accumulate_sensor_rate_sampling(), and start().

◆ _fifo_buffer

uint8_t* AP_InertialSensor_Invensense::_fifo_buffer
private

◆ _fifo_downsample_rate

uint8_t AP_InertialSensor_Invensense::_fifo_downsample_rate
private

◆ _fifo_gyro_scale

float AP_InertialSensor_Invensense::_fifo_gyro_scale
private

Definition at line 121 of file AP_InertialSensor_Invensense.h.

Referenced by _accumulate_sensor_rate_sampling(), and start().

◆ _gyro_instance

uint8_t AP_InertialSensor_Invensense::_gyro_instance
private

◆ _last_stat_user_ctrl

uint8_t AP_InertialSensor_Invensense::_last_stat_user_ctrl
private

Definition at line 143 of file AP_InertialSensor_Invensense.h.

Referenced by _fifo_reset(), and _hardware_init().

◆ _mpu_type

enum Invensense_Type AP_InertialSensor_Invensense::_mpu_type
private

◆ _raw_temp

int16_t AP_InertialSensor_Invensense::_raw_temp
private

◆ _rotation

enum Rotation AP_InertialSensor_Invensense::_rotation
private

Definition at line 124 of file AP_InertialSensor_Invensense.h.

Referenced by start().

◆ _temp_filter

LowPassFilter2pFloat AP_InertialSensor_Invensense::_temp_filter
private

◆ _temp_filtered

float AP_InertialSensor_Invensense::_temp_filtered
private

◆ accel

Vector3f AP_InertialSensor_Invensense::accel

◆ accel_filter

LowPassFilterVector3f AP_InertialSensor_Invensense::accel_filter {4000, 188}

Definition at line 156 of file AP_InertialSensor_Invensense.h.

◆ AP_Invensense_AuxiliaryBus

friend AP_InertialSensor_Invensense::AP_Invensense_AuxiliaryBus
private

Definition at line 30 of file AP_InertialSensor_Invensense.h.

Referenced by get_auxiliary_bus().

◆ AP_Invensense_AuxiliaryBusSlave

friend AP_InertialSensor_Invensense::AP_Invensense_AuxiliaryBusSlave
private

Definition at line 31 of file AP_InertialSensor_Invensense.h.

◆ count

uint8_t AP_InertialSensor_Invensense::count

Definition at line 155 of file AP_InertialSensor_Invensense.h.

◆ gyro

Vector3f AP_InertialSensor_Invensense::gyro

◆ gyro_filter

LowPassFilterVector3f AP_InertialSensor_Invensense::gyro_filter {8000, 188}

Definition at line 157 of file AP_InertialSensor_Invensense.h.

◆ multiplier_accel

const uint16_t AP_InertialSensor_Invensense::multiplier_accel = INT16_MAX/(26*GRAVITY_MSS)

Definition at line 72 of file AP_InertialSensor_Invensense.h.

Referenced by start().

◆ temp_sensitivity

float AP_InertialSensor_Invensense::temp_sensitivity = 1.0/340
private

◆ temp_zero

float AP_InertialSensor_Invensense::temp_zero = 36.53
private

The documentation for this class was generated from the following files: