Mod Library
Sun Devil Rocketry's hardware agnostic utility library
Loading...
Searching...
No Matches
sensor.h
Go to the documentation of this file.
1
20
21/* Define to prevent recursive inclusion -------------------------------------*/
22#ifndef SENSOR_H
23#define SENSOR_H
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29#include "stm32h7xx_hal.h"
30#include "imu.h"
31#include "gps.h"
32
33/*------------------------------------------------------------------------------
34Includes
35------------------------------------------------------------------------------*/
36
37/* GCC requires stdint.h for uint_t types */
38#ifdef UNIT_TEST
39 #include <stdint.h>
40#endif
41
42typedef struct _PRESET_DATA PRESET_DATA; /* From main.h */
43
44
45/*------------------------------------------------------------------------------
46 Macros
47------------------------------------------------------------------------------*/
48
49/* Sensor subcommand codes */
50#define SENSOR_DUMP_CODE ( 0x01 )
51
52
53#if defined( A0002_REV2 )
54 #define ACCEL_G_RANGE ( 16 ) /* Accelerometer measurement range */
55 #define GYRO_RANGE ( 2000 ) /* Gyroscope sensitivity in degrees/sec */
56#endif
57
58/* General */
59#define NUM_SENSORS ( 38 )
60#define SENSOR_DATA_SIZE ( 128 )
61
62
63/*------------------------------------------------------------------------------
64 Typdefs
65------------------------------------------------------------------------------*/
66
67/* Sensor status return codes */
68typedef enum
69 {
70 SENSOR_OK = 0 ,
71 SENSOR_UNRECOGNIZED_OP ,
72 SENSOR_UNSUPPORTED_OP ,
73 SENSOR_IMU_FAIL ,
74 SENSOR_PT_ERROR ,
75 SENSOR_TC_ERROR ,
76 SENSOR_LC_ERROR ,
77 SENSOR_ACCEL_ERROR ,
78 SENSOR_GYRO_ERROR ,
79 SENSOR_MAG_ERROR ,
80 SENSOR_BARO_ERROR ,
81 SENSOR_USB_FAIL ,
82 SENSOR_UNRECOGNIZED_SENSOR_ID,
83 SENSOR_FAIL ,
84 SENSOR_IT_TIMEOUT
85 } SENSOR_STATUS;
86
87/* Mount configuration of FC */
88typedef enum
89 {
90 MOUNT_ORIENTATION_IMU_INVERTED = -1, /* Antenna pointing up */
91 MOUNT_ORIENTATION_IMU_NORMAL = 1 /* Antenna pointing down */
92 } MOUNT_ORIENTATION;
93
98typedef struct _IMU_CONVERTED
99 {
100 float accel_x;
101 float accel_y;
102 float accel_z;
103 float gyro_x ;
104 float gyro_y ;
105 float gyro_z ;
106 float mag_x ;
107 float mag_y ;
108 float mag_z ;
110
111/* State estimation from processed sensors */
112typedef struct _STATE_ESTIMATION {
113 /*
114 * Body-to-world attitude quaternion.
115 *
116 * Body-frame vector to world frame:
117 * v_world = q * v_body * conjugate(q)
118 *
119 * World-frame vector to body frame:
120 * v_body = conjugate(q) * v_world * q
121 */
122 QUAT attitude;
123 float roll_rate;
124 float velocity;
125 float velo_x;
126 float velo_y;
127 float velo_z;
128} STATE_ESTIMATION;
129
131typedef struct _IMU_DATA
132 {
133 IMU_CONVERTED imu_converted;
134 STATE_ESTIMATION state_estimate;
136
137/* Sensor Data */
138typedef struct SENSOR_DATA
139 {
140 IMU_CONVERTED imu_converted;
141 STATE_ESTIMATION state_estimate;
142 float baro_pressure;
143 float baro_temp;
144 float baro_alt;
145 float gps_altitude_ft;
146 float gps_speed_kmh;
147 float gps_utc_time;
148 float gps_dec_longitude;
149 float gps_dec_latitude;
150 char gps_ns;
151 char gps_ew;
152 char gps_gll_status;
153 char gps_rmc_status;
154 } SENSOR_DATA;
155
156/* Baro Preset data */
157typedef struct _BARO_PRESET
158 {
159 float baro_pres;
160 float baro_temp;
161 } BARO_PRESET;
162
163/*------------------------------------------------------------------------------
164 Public Function Prototypes
165------------------------------------------------------------------------------*/
166
173SENSOR_STATUS sensor_cmd_execute
174 (
175 uint8_t subcommand
176 );
177
184SENSOR_STATUS sensor_dump
185 (
186 SENSOR_DATA* sensor_data_ptr
187 );
188
194SENSOR_STATUS sensor_init
195 (
196 PRESET_DATA* preset_data
197 );
198
204MOUNT_ORIENTATION sensor_get_mount_orientation
205 (
206 void
207 );
208
215 (
216 MOUNT_ORIENTATION orientation
217 );
218
223 (
224 void
225 );
226
233SENSOR_STATUS sensor_body_state
234 (
235 const IMU_CONVERTED* imu_converted,
236 STATE_ESTIMATION* state_estimate
237 );
238
247 (
248 float* x,
249 float* y,
250 float* z
251 );
252
260 (
261 const IMU_CONVERTED* imu_converted,
262 STATE_ESTIMATION* state_estimate
263 );
264
272 (
273 IMU_CONVERTED* imu_converted,
274 IMU_RAW* imu_raw
275 );
276
283float sensor_acc_conv
284 (
285 int16_t readout
286 );
287
295 (
296 int16_t readout
297 );
298
305 (
306 SENSOR_DATA* sensor_data_ptr
307 );
308
309#ifdef A0002_REV2
316SENSOR_STATUS sensor_start_IT
317 (
318 SENSOR_DATA* sensor_data_ptr
319 );
320
324void sensor_mutex_reserve
325 (
326 void
327 );
328
332void sensor_mutex_release
333 (
334 void
335 );
336#endif
337
338#ifdef __cplusplus
339}
340#endif
341
342#endif /* SENSOR_H */
343
344/*******************************************************************************
345* END OF FILE *
346*******************************************************************************/
void sensor_conv_imu(IMU_CONVERTED *imu_converted, IMU_RAW *imu_raw)
Converts raw IMU readings into calibrated, remapped sensor data.
Definition sensor.c:405
MOUNT_ORIENTATION sensor_get_mount_orientation(void)
Get the mount orientation.
Definition sensor.c:446
void sensor_reset_velo(void)
Resets accumulated velocity values to prevent drift.
Definition sensor.c:732
void sensor_axis_remap(float *x, float *y, float *z)
Remaps sensor axes according to the flight-computer mounting orientation.
Definition sensor.c:564
void sensor_baro_alt(SENSOR_DATA *sen_data)
Calculates altitude from the current barometric pressure and temperature.
Definition sensor.c:709
SENSOR_STATUS sensor_body_state(const IMU_CONVERTED *imu_converted, STATE_ESTIMATION *state_estimate)
Integrates gyro data to update the estimated body attitude and rate.
Definition sensor.c:476
float sensor_acc_conv(int16_t readout)
Converts a raw accelerometer reading to meters per second squared.
Definition sensor.c:583
void sensor_set_mount_orientation(MOUNT_ORIENTATION orientation)
Set the mount orientation.
Definition sensor.c:461
void sensor_imu_velo(const IMU_CONVERTED *imu_converted, STATE_ESTIMATION *state_estimate)
Calculates velocity from converted accelerometer measurements.
Definition sensor.c:618
SENSOR_STATUS sensor_dump(SENSOR_DATA *sensor_data_ptr)
Reads the available sensors and fills the sensor data structure.
Definition sensor.c:244
SENSOR_STATUS sensor_cmd_execute(uint8_t subcommand)
Executes a sensor subcommand and transmits the requested readings.
Definition sensor.c:157
float sensor_gyro_conv(int16_t readout)
Converts a raw gyro reading to degrees per second.
Definition sensor.c:601
SENSOR_STATUS sensor_init(PRESET_DATA *preset_data)
Initializes sensor timing and resets velocity state.
Definition sensor.c:359
struct _IMU_DATA IMU_DATA
Aggregate struct containing converted IMU data and state estimate.
struct _IMU_CONVERTED IMU_CONVERTED
Physical-unit converted accel/gyro/mag data.
Definition sensor.h:158
Physical-unit converted accel/gyro/mag data.
Definition sensor.h:99
Aggregate struct containing converted IMU data and state estimate.
Definition sensor.h:132
Definition sensor.h:112
Definition sensor.h:139