Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
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 current: 1;
47 bool filter: 1;
48};
49
65
81
93
94
111
113extern struct Imu imu;
114
116extern void imu_init(void);
117
118extern void imu_set_defaults_gyro(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Rates *neutral, const struct FloatRates *scale_f);
119extern void imu_set_defaults_accel(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f);
120extern void imu_set_defaults_mag(uint8_t abi_id, const struct Int32RMat *imu_to_sensor, const struct Int32Vect3 *neutral, const struct FloatVect3 *scale_f);
121
122extern struct imu_gyro_t *imu_get_gyro(uint8_t sender_id, bool create);
123extern struct imu_accel_t *imu_get_accel(uint8_t sender_id, bool create);
124extern struct imu_mag_t *imu_get_mag(uint8_t sender_id, bool create);
125
126extern void imu_SetBodyToImuPhi(float phi);
127extern void imu_SetBodyToImuTheta(float theta);
128extern void imu_SetBodyToImuPsi(float psi);
129extern void imu_SetBodyToImuCurrent(float set);
130extern void imu_ResetBodyToImu(float reset);
131
132#endif /* IMU_H */
static uint8_t reset[3]
angular rates
rotation matrix
angular rates
uint32_t last_stamp
Last measurement timestamp for integration.
Definition imu.h:52
struct Int32Rates scaled
Last scaled values in body frame.
Definition imu.h:54
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:76
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:84
struct FloatVect3 current_scale
Current scaling multiplying.
Definition imu.h:90
struct imu_accel_t accels[IMU_MAX_SENSORS]
The accelerometer sensors.
Definition imu.h:99
uint8_t abi_id
ABI sensor ID.
Definition imu.h:51
bool scale
Scale calibrated.
Definition imu.h:43
float temperature
Temperature in degrees celcius.
Definition imu.h:56
Butterworth2LowPass filter[3]
Lowpass filter optional.
Definition imu.h:79
float filter_freq
Lowpass filter frequency (Hz)
Definition imu.h:77
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:612
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:917
struct FloatRates scale_f
Scaling.
Definition imu.h:59
uint32_t last_stamp
Last measurement timestamp for integration.
Definition imu.h:68
float filter_sample_freq
Lowpass filter sample frequency (Hz)
Definition imu.h:62
struct FloatVect3 scale_f
Scaling.
Definition imu.h:89
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:87
uint8_t mag_abi_send_id
Filter out and send only a specific ABI id in telemetry for the magnetometer.
Definition imu.h:104
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:940
struct OrientationReps body_to_imu
Rotation from body to imu (all sensors) frame.
Definition imu.h:101
bool filter
Enable the lowpass filter.
Definition imu.h:47
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition imu.h:71
void imu_SetBodyToImuTheta(float theta)
Definition imu.c:1023
float temperature
Temperature in degrees celcius.
Definition imu.h:72
struct Int32Rates neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:57
bool current
Current calibrated.
Definition imu.h:46
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:91
bool initialized
Check if the IMU is initialized.
Definition imu.h:97
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:641
Butterworth2LowPass filter[3]
Lowpass filter optional.
Definition imu.h:63
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:69
struct FloatVect3 scale_f
Scaling.
Definition imu.h:75
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition imu.h:88
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:58
struct Imu imu
global IMU state
Definition imu.c:428
float filter_sample_freq
Lowpass filter sample frequency (Hz)
Definition imu.h:78
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition imu.h:70
struct imu_gyro_t gyros[IMU_MAX_SENSORS]
The gyro sensors.
Definition imu.h:98
void imu_init(void)
External functions.
Definition imu.c:435
struct Int32RMat body_to_sensor
Rotation from body to sensor frame (body to imu combined with imu to sensor)
Definition imu.h:60
void imu_SetBodyToImuPsi(float psi)
Definition imu.c:1031
struct Int32Rates unscaled
Last unscaled values in sensor frame.
Definition imu.h:55
uint8_t abi_id
ABI sensor ID.
Definition imu.h:83
void imu_SetBodyToImuCurrent(float set)
Definition imu.c:1039
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:964
struct imu_mag_t mags[IMU_MAX_SENSORS]
The magnetometer sensors.
Definition imu.h:100
struct Int32Vect3 scale[2]
Scaling, first is numerator and second denominator.
Definition imu.h:74
bool neutral
Neutral values calibrated.
Definition imu.h:42
bool b2i_set_current
flag for adjusting body_to_imu via settings.
Definition imu.h:109
struct Int32Vect3 neutral
Neutral values, compensation on unscaled->scaled.
Definition imu.h:73
struct Int32Vect3 unscaled
Last unscaled values in sensor frame.
Definition imu.h:86
float filter_freq
Filter frequency.
Definition imu.h:61
void imu_SetBodyToImuPhi(float phi)
Definition imu.c:1015
#define IMU_MAX_SENSORS
Definition imu.h:38
void imu_ResetBodyToImu(float reset)
struct imu_calib_t calibrated
Calibration bitmask.
Definition imu.h:53
uint8_t accel_abi_send_id
Filter out and send only a specific ABI id in telemetry for the accelerometer.
Definition imu.h:103
struct Int32Vect3 scaled
Last scaled values in body frame.
Definition imu.h:85
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:102
uint8_t abi_id
ABI sensor ID.
Definition imu.h:67
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:670
abstract IMU interface providing fixed point interface
Definition imu.h:96
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.