Midnight Sun Firmware
Loading...
Searching...
No Matches
imu.h
1#pragma once
2
3/************************************************************************************************
4 * @file imu.h
5 *
6 * @brief Header file for imu
7 *
8 * @date 2025-03-06
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13
14/* Inter-component Headers */
15#include "can.h"
16#include "spi.h"
17
18/* Intra-component Headers */
19#include "bmi323.h"
20
27StatusCode imu_init(Bmi323Storage *storage, Bmi323Settings *settings);
28
29#define DELTA_T 0.1f
30#define PI 3.14159265358f
31#define GYRO_MEAN_ERROR (PI * (5.0f / 180.0f))
32#define BETA 0.8660254f * GYRO_MEAN_ERROR
33
34#include <math.h>
35#include <stdio.h>
36
37struct quaternion {
38 float q1;
39 float q2;
40 float q3;
41 float q4;
42};
43
44extern struct quaternion q_est;
45
46struct quaternion quat_mult(struct quaternion q_L, struct quaternion q_R);
47static inline void quat_scalar(struct quaternion *q, float scalar) {
48 q->q1 *= scalar;
49 q->q2 *= scalar;
50 q->q3 *= scalar;
51 q->q4 *= scalar;
52}
53static inline void quat_add(struct quaternion *Sum, struct quaternion L, struct quaternion R) {
54 Sum->q1 = L.q1 + R.q1;
55 Sum->q2 = L.q2 + R.q2;
56 Sum->q3 = L.q3 + R.q3;
57 Sum->q4 = L.q4 + R.q4;
58}
59
60static inline void quat_sub(struct quaternion *Sum, struct quaternion L, struct quaternion R) {
61 Sum->q1 = L.q1 - R.q1;
62 Sum->q2 = L.q2 - R.q2;
63 Sum->q3 = L.q3 - R.q3;
64 Sum->q4 = L.q4 - R.q4;
65}
66
67static inline struct quaternion quat_conjugate(struct quaternion q) {
68 q.q2 = -q.q2;
69 q.q3 = -q.q3;
70 q.q4 = -q.q4;
71 return q;
72}
73
74static inline float quat_Norm(struct quaternion q) {
75 return sqrt(q.q1 * q.q1 + q.q2 * q.q2 + q.q3 * q.q3 + q.q4 * q.q4);
76}
77
78static inline void quat_Normalization(struct quaternion *q) {
79 float norm = quat_Norm(*q);
80 q->q1 /= norm;
81 q->q2 /= norm;
82 q->q3 /= norm;
83 q->q4 /= norm;
84}
85
86void imu_filter(float ax, float ay, float az, float gx, float gy, float gz);
87void eulerAngles(struct quaternion q, float *roll, float *pitch, float *yaw);
88
StatusCode
StatusCodes for various errors.
Definition: status.h:27
Definition: bmi323.h:181
Storage struct for bmi323.
Definition: bmi323.h:190
Definition: imu.h:37