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-12-31
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
27
StatusCode
imu_init(
Bmi323Storage
*storage,
Bmi323Settings
*settings);
28
29
StatusCode
imu_run();
30
31
#define DELTA_T 0.1f
32
#define PI 3.14159265358f
33
#define GYRO_MEAN_ERROR (PI * (5.0f / 180.0f))
34
#define BETA 0.8660254f * GYRO_MEAN_ERROR
35
36
#include <math.h>
37
#include <stdio.h>
38
39
struct
quaternion
{
40
float
q1;
41
float
q2;
42
float
q3;
43
float
q4;
44
};
45
46
extern
struct
quaternion
q_est;
47
48
struct
quaternion
quat_mult(struct
quaternion
q_L, struct
quaternion
q_R);
49
static
inline
void
quat_scalar(
struct
quaternion
*q,
float
scalar) {
50
q->q1 *= scalar;
51
q->q2 *= scalar;
52
q->q3 *= scalar;
53
q->q4 *= scalar;
54
}
55
static
inline
void
quat_add(
struct
quaternion
*Sum,
struct
quaternion
L,
struct
quaternion
R) {
56
Sum->q1 = L.q1 + R.q1;
57
Sum->q2 = L.q2 + R.q2;
58
Sum->q3 = L.q3 + R.q3;
59
Sum->q4 = L.q4 + R.q4;
60
}
61
62
static
inline
void
quat_sub(
struct
quaternion
*Sum,
struct
quaternion
L,
struct
quaternion
R) {
63
Sum->q1 = L.q1 - R.q1;
64
Sum->q2 = L.q2 - R.q2;
65
Sum->q3 = L.q3 - R.q3;
66
Sum->q4 = L.q4 - R.q4;
67
}
68
69
static
inline
struct
quaternion
quat_conjugate(struct
quaternion
q) {
70
q.q2 = -q.q2;
71
q.q3 = -q.q3;
72
q.q4 = -q.q4;
73
return
q;
74
}
75
76
static
inline
float
quat_Norm(
struct
quaternion
q) {
77
return
sqrt(q.q1 * q.q1 + q.q2 * q.q2 + q.q3 * q.q3 + q.q4 * q.q4);
78
}
79
80
static
inline
void
quat_Normalization(
struct
quaternion
*q) {
81
float
norm = quat_Norm(*q);
82
q->q1 /= norm;
83
q->q2 /= norm;
84
q->q3 /= norm;
85
q->q4 /= norm;
86
}
87
88
void
imu_filter(
float
ax,
float
ay,
float
az,
float
gx,
float
gy,
float
gz);
89
void
eulerAngles(
struct
quaternion
q,
float
*roll,
float
*pitch,
float
*yaw);
90
StatusCode
StatusCode
StatusCodes for various errors.
Definition:
status.h:27
Bmi323Settings
Definition:
bmi323.h:181
Bmi323Storage
Storage struct for bmi323.
Definition:
bmi323.h:190
quaternion
Definition:
imu.h:37
projects
telemetry
inc
imu.h
Generated by
1.9.5