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
27
StatusCode
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
37
struct
quaternion
{
38
float
q1;
39
float
q2;
40
float
q3;
41
float
q4;
42
};
43
44
extern
struct
quaternion
q_est;
45
46
struct
quaternion
quat_mult(struct
quaternion
q_L, struct
quaternion
q_R);
47
static
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
}
53
static
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
60
static
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
67
static
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
74
static
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
78
static
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
86
void
imu_filter(
float
ax,
float
ay,
float
az,
float
gx,
float
gy,
float
gz);
87
void
eulerAngles(
struct
quaternion
q,
float
*roll,
float
*pitch,
float
*yaw);
88
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
imu
inc
imu.h
Generated by
1.9.5