Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
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
35#include "generated/airframe.h"
36
37#ifndef IMU_MAX_SENSORS
38#define IMU_MAX_SENSORS 4
39#endif
40
42 bool neutral: 1;
43 bool scale: 1;
44 bool scale_f: 1;
45 bool rotation: 1;
46 bool rot_euler: 1;
47 bool current: 1;
48 bool filter: 1;
49};
50
67
84
97
98
115
117extern struct Imu imu;
118
120extern void imu_init(void);
121
122extern void imu_set_defaults_gyro(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Rates *neutral, const struct FloatRates *scale_f);
123extern void imu_set_defaults_accel(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f);
124extern void imu_set_defaults_mag(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f);
125
126extern struct imu_gyro_t *imu_get_gyro(uint8_t sender_id, bool create);
127extern struct imu_accel_t *imu_get_accel(uint8_t sender_id, bool create);
128extern struct imu_mag_t *imu_get_mag(uint8_t sender_id, bool create);
129
130extern void imu_SetBodyToImuPhi(float phi);
131extern void imu_SetBodyToImuTheta(float theta);
132extern void imu_SetBodyToImuPsi(float psi);
133extern void imu_SetBodyToImuCurrent(float set);
134extern void imu_ResetBodyToImu(float reset);
135
136#endif /* IMU_H */
static uint8_t reset[3]
euler angles
angular rates
rotation matrix
angular rates
uint32_t last_stamp
Last measurement timestamp for integration.
Definition imu.h:53
struct Int32Rates scaled
Last scaled values in body frame.
Definition imu.h:55
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:78
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:87
struct FloatVect3 current_scale
Current scaling multiplying.
Definition imu.h:93
struct imu_accel_t accels[IMU_MAX_SENSORS]
The accelerometer sensors.
Definition imu.h:103
struct FloatEulers body_to_sensor_f
Rotation from body to sensor frame (with floating points eulers)
Definition imu.h:79
uint8_t abi_id
ABI sensor ID.
Definition imu.h:52
bool scale
Scale calibrated.
Definition imu.h:43
float temperature
Temperature in degrees celcius.
Definition imu.h:57
Butterworth2LowPass filter[3]
Lowpass filter optional.
Definition imu.h:82
float filter_freq
Lowpass filter frequency (Hz)
Definition imu.h:80
void imu_set_defaults_gyro(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Rates *neutral, const struct FloatRates *scale_f)
Set the defaults for a gyro sensor WARNING: Should be called before sensor is publishing messages to ...
Definition imu.c:640
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:945
struct FloatRates scale_f
Scaling.
Definition imu.h:60
uint32_t last_stamp
Last measurement timestamp for integration.
Definition imu.h:70
float filter_sample_freq
Lowpass filter sample frequency (Hz)
Definition imu.h:64
struct FloatVect3 scale_f
Scaling.
Definition imu.h:92
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:90
uint8_t mag_abi_send_id
Filter out and send only a specific ABI id in telemetry for the magnetometer.
Definition imu.h:108
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:968
struct OrientationReps body_to_imu
Rotation from body to imu (all sensors) frame.
Definition imu.h:105
bool filter
Enable the lowpass filter.
Definition imu.h:48
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition imu.h:73
void imu_SetBodyToImuTheta(float theta)
Definition imu.c:1051
bool rot_euler
Rotation calibrated with floating point eulers.
Definition imu.h:46
float temperature
Temperature in degrees celcius.
Definition imu.h:74
struct Int32Rates neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:58
bool current
Current calibrated.
Definition imu.h:47
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:94
bool initialized
Check if the IMU is initialized.
Definition imu.h:101
void imu_set_defaults_accel(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f)
Set the defaults for a accel sensor WARNING: Should be called before sensor is publishing messages to...
Definition imu.c:669
struct FloatEulers body_to_sensor_f
Rotation from body to sensor frame (with floating points eulers)
Definition imu.h:95
Butterworth2LowPass filter[3]
Lowpass filter optional.
Definition imu.h:65
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:71
struct FloatVect3 scale_f
Scaling.
Definition imu.h:77
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition imu.h:91
bool scale_f
Scale calibrated with floating point.
Definition imu.h:44
struct Int32Rates scale[2]
Scaling, first is numerator and second denominator.
Definition imu.h:59
struct Imu imu
global IMU state
Definition imu.c:432
float filter_sample_freq
Lowpass filter sample frequency (Hz)
Definition imu.h:81
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition imu.h:72
struct imu_gyro_t gyros[IMU_MAX_SENSORS]
The gyro sensors.
Definition imu.h:102
void imu_init(void)
External functions.
Definition imu.c:439
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:61
void imu_SetBodyToImuPsi(float psi)
Definition imu.c:1059
struct Int32Rates unscaled
Last unscaled values in sensor frame.
Definition imu.h:56
uint8_t abi_id
ABI sensor ID.
Definition imu.h:86
void imu_SetBodyToImuCurrent(float set)
Definition imu.c:1067
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:992
struct imu_mag_t mags[IMU_MAX_SENSORS]
The magnetometer sensors.
Definition imu.h:104
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition imu.h:76
bool neutral
Neutral values calibrated.
Definition imu.h:42
bool b2i_set_current
flag for adjusting body_to_imu via settings.
Definition imu.h:113
struct FloatEulers body_to_sensor_f
Rotation from body to sensor frame (with floating points eulers)
Definition imu.h:62
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:75
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition imu.h:89
float filter_freq
Filter frequency.
Definition imu.h:63
void imu_SetBodyToImuPhi(float phi)
Definition imu.c:1043
#define IMU_MAX_SENSORS
Definition imu.h:38
void imu_ResetBodyToImu(float reset)
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:54
uint8_t accel_abi_send_id
Filter out and send only a specific ABI id in telemetry for the accelerometer.
Definition imu.h:107
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition imu.h:88
bool rotation
Rotation calibrated.
Definition imu.h:45
uint8_t gyro_abi_send_id
Filter out and send only a specific ABI id in telemetry for the gyro.
Definition imu.h:106
uint8_t abi_id
ABI sensor ID.
Definition imu.h:69
void imu_set_defaults_mag(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f)
Set the defaults for a mag sensor WARNING: Should be called before sensor is publishing messages to e...
Definition imu.c:698
abstract IMU interface providing fixed point interface
Definition imu.h:100
Simple first order low pass filter with bilinear transform.
Second order low pass filter structure.
uint16_t foo
Definition main_demo5.c:58
Paparazzi floating point algebra.
Paparazzi fixed point algebra.
Generic orientation representation and conversions.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.