Paparazzi UAS  v6.3_unstable
Paparazzi is a free software Unmanned Aircraft System.
imu.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2022 The Paparazzi Team
3  * Freek van Tienen <freek.v.tienen@gmail.com>
4  *
5  * This file is part of paparazzi.
6  *
7  * paparazzi is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  *
12  * paparazzi is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with paparazzi; see the file COPYING. If not, write to
19  * the Free Software Foundation, 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22 
28 #ifndef IMU_H
29 #define IMU_H
30 
31 #include "math/pprz_algebra_int.h"
34 #include "generated/airframe.h"
35 
36 #ifndef IMU_MAX_SENSORS
37 #define IMU_MAX_SENSORS 3
38 #endif
39 
40 struct imu_calib_t {
41  bool neutral: 1;
42  bool scale: 1;
43  bool rotation: 1;
44  bool current: 1;
45 };
46 
47 struct imu_gyro_t {
50  struct imu_calib_t calibrated;
51  struct Int32Rates scaled;
52  struct Int32Rates unscaled;
53  float temperature;
54  struct Int32Rates neutral;
55  struct Int32Rates scale[2];
56  struct Int32RMat body_to_sensor;
57 };
58 
59 struct imu_accel_t {
62  struct imu_calib_t calibrated;
63  struct Int32Vect3 scaled;
64  struct Int32Vect3 unscaled;
65  float temperature;
66  struct Int32Vect3 neutral;
67  struct Int32Vect3 scale[2];
68  struct Int32RMat body_to_sensor;
69 };
70 
71 struct imu_mag_t {
73  struct imu_calib_t calibrated;
74  struct Int32Vect3 scaled;
75  struct Int32Vect3 unscaled;
76  struct Int32Vect3 neutral;
77  struct Int32Vect3 scale[2];
78  struct FloatVect3 current_scale;
79  struct Int32RMat body_to_sensor;
80 };
81 
82 
84 struct Imu {
85  bool initialized;
90 
95 };
96 
98 extern struct Imu imu;
99 
101 extern void imu_init(void);
102 
103 extern void imu_set_defaults_gyro(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Rates *neutral, const struct Int32Rates *scale);
104 extern void imu_set_defaults_accel(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct Int32Vect3 *scale);
105 extern void imu_set_defaults_mag(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct Int32Vect3 *scale);
106 
107 extern struct imu_gyro_t *imu_get_gyro(uint8_t sender_id, bool create);
108 extern struct imu_accel_t *imu_get_accel(uint8_t sender_id, bool create);
109 extern struct imu_mag_t *imu_get_mag(uint8_t sender_id, bool create);
110 
111 extern void imu_SetBodyToImuPhi(float phi);
112 extern void imu_SetBodyToImuTheta(float theta);
113 extern void imu_SetBodyToImuPsi(float psi);
114 extern void imu_SetBodyToImuCurrent(float set);
115 extern void imu_ResetBodyToImu(float reset);
116 
117 #endif /* IMU_H */
static uint8_t reset[3]
Definition: baro_MS5534A.c:83
static const float scale[]
rotation matrix
angular rates
uint32_t last_stamp
Last measurement timestamp for integration.
Definition: imu.h:49
struct Int32Rates scaled
Last scaled values in body frame.
Definition: imu.h:51
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition: imu.h:68
struct imu_calib_t calibrated
Calibration bitmask.
Definition: imu.h:73
struct imu_accel_t * imu_get_accel(uint8_t sender_id, bool create)
Find or create the accel in the imu structure.
Definition: imu.c:681
struct FloatVect3 current_scale
Current scaling multiplying.
Definition: imu.h:78
struct imu_accel_t accels[IMU_MAX_SENSORS]
The accelerometer sensors.
Definition: imu.h:87
uint8_t abi_id
ABI sensor ID.
Definition: imu.h:48
bool scale
Scale calibrated.
Definition: imu.h:42
float temperature
Temperature in degrees celcius.
Definition: imu.h:53
struct imu_gyro_t * imu_get_gyro(uint8_t sender_id, bool create)
Find or create the gyro in the imu structure.
Definition: imu.c:658
uint32_t last_stamp
Last measurement timestamp for integration.
Definition: imu.h:61
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition: imu.h:76
void imu_set_defaults_mag(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct Int32Vect3 *scale)
Set the defaults for a mag sensor WARNING: Should be called before sensor is publishing messages to e...
Definition: imu.c:470
struct OrientationReps body_to_imu
Rotation from body to imu (all sensors) frame.
Definition: imu.h:89
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition: imu.h:64
void imu_SetBodyToImuTheta(float theta)
Definition: imu.c:764
float temperature
Temperature in degrees celcius.
Definition: imu.h:65
struct Int32Rates neutral
Neutral values, compensation on unscaled->scaled.
Definition: imu.h:54
bool current
Current calibrated.
Definition: imu.h:44
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition: imu.h:79
bool initialized
Check if the IMU is initialized.
Definition: imu.h:85
void imu_set_defaults_accel(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct Int32Vect3 *scale)
Set the defaults for a accel sensor WARNING: Should be called before sensor is publishing messages to...
Definition: imu.c:440
struct imu_calib_t calibrated
Calibration bitmask.
Definition: imu.h:62
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition: imu.h:77
struct Int32Rates scale[2]
Scaling, first is numerator and second denominator.
Definition: imu.h:55
struct Imu imu
global IMU state
Definition: imu.c:274
void imu_set_defaults_gyro(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Rates *neutral, const struct Int32Rates *scale)
Set the defaults for a gyro sensor WARNING: Should be called before sensor is publishing messages to ...
Definition: imu.c:410
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition: imu.h:63
struct imu_gyro_t gyros[IMU_MAX_SENSORS]
The gyro sensors.
Definition: imu.h:86
void imu_init(void)
External functions.
Definition: imu.c:281
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition: imu.h:56
void imu_SetBodyToImuPsi(float psi)
Definition: imu.c:772
struct Int32Rates unscaled
Last unscaled values in sensor frame.
Definition: imu.h:52
uint8_t abi_id
ABI sensor ID.
Definition: imu.h:72
void imu_SetBodyToImuCurrent(float set)
Definition: imu.c:780
struct imu_mag_t mags[IMU_MAX_SENSORS]
The magnetometer sensors.
Definition: imu.h:88
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition: imu.h:67
bool neutral
Neutral values calibrated.
Definition: imu.h:41
bool b2i_set_current
flag for adjusting body_to_imu via settings.
Definition: imu.h:94
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition: imu.h:66
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition: imu.h:75
void imu_SetBodyToImuPhi(float phi)
Definition: imu.c:756
#define IMU_MAX_SENSORS
Definition: imu.h:37
void imu_ResetBodyToImu(float reset)
struct imu_calib_t calibrated
Calibration bitmask.
Definition: imu.h:50
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition: imu.h:74
bool rotation
Rotation calibrated.
Definition: imu.h:43
struct imu_mag_t * imu_get_mag(uint8_t sender_id, bool create)
Find or create the mag in the imu structure.
Definition: imu.c:705
uint8_t abi_id
ABI sensor ID.
Definition: imu.h:60
abstract IMU interface providing fixed point interface
Definition: imu.h:84
Definition: imu.h:47
Definition: imu.h:71
Paparazzi floating point algebra.
Paparazzi fixed point algebra.
Generic orientation representation and conversions.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
Definition: vl53l1_types.h:78
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
Definition: vl53l1_types.h:98