SkyPulse UAV V0.1
Loading...
Searching...
No Matches
MahonyFilter.h
Go to the documentation of this file.
1#ifndef __MAHONY_FILTER_H__
2#define __MAHONY_FILTER_H__
3
4#include <atomic>
5#include <functional>
6
7#include "CppThread.hpp"
8#include "MPU6050.h"
9
10#define sampleFreq 200.0f // sample frequency in Hz
11#define twoKpDef (2.0f * 0.05f) // 2 * proportional gain
12#define twoKiDef (2.0f * 0.001f) // 2 * integral gain
13
15
16public:
17
18 using CallbackFunction = std::function<void(float, float, float, float[3])>;
19
21
22 MahonyFilter(float filterSample, float twoPropGain, float twoInteGain);
23
24 void getAngle(float* roll, float* pitch, float* yaw, float g[3]);
25
26 void getAngleRate(float g[3]);
27
28 //void getQuaternion(float q_new[4]);
29
30 void setFrequency(float f);
31
32 void readRawData(float a[3], float g[3], float m[3]);
33
34 void MahonyAHRSupdate();
35
37
38 bool isDataReady();
39
40 // bool checkFilterReady_A();
41
42 // bool checkFilterReady_B();
43
44 // void resetFilterReady();
45
46 void setCallbackA(CallbackFunction callback);
47
48 void setCallbackB(CallbackFunction callback);
49
50 std::array<float, 3> getAngleTest();
51
52protected:
53
54 float invSqrt(float x);
55
56 void setKi(float twokiSet);
57
58 void setKp(float twokpSet);
59
60private:
61
62 CallbackFunction callbackA_;
63 CallbackFunction callbackB_;
64
65 float twoKp;
66 float twoKi;
67
68 float q[4];
69 float ax, ay, az;
70 float gx, gy, gz;
71 float mx, my, mz;
72
73 std::atomic<float> gx_out;
74 std::atomic<float> gy_out;
75 std::atomic<float> gz_out;
76
77 float frequency;
78 float integralFBx;
79 float integralFBy;
80 float integralFBz;
81
82 std::atomic<float> roll;
83 std::atomic<float> pitch;
84 std::atomic<float> yaw;
85
86 bool mpu_data_ready;
87
88 // Two flags for two interfaces with different frequencies.
89 bool filter_ready_A;
90 bool filter_ready_B;
91
92};
93
95
96public:
97
98 MahonyFilterThread(MahonyFilter& MahonyFilterIns_, MPU6050& MPU6050Ins_) :
99 MahonyFilterIns(MahonyFilterIns_),
100 MPU6050Ins(MPU6050Ins_) {};
101
102protected:
103
104 void run() override;
105
106private:
107
108 MahonyFilter& MahonyFilterIns;
109 MPU6050& MPU6050Ins;
110
111};
112
113#endif
Definition CppThread.hpp:20
Definition MPU6050.h:21
Definition MahonyFilter.h:94
MahonyFilterThread(MahonyFilter &MahonyFilterIns_, MPU6050 &MPU6050Ins_)
Definition MahonyFilter.h:98
void run() override
Definition MahonyFilterThread.cpp:8
Definition MahonyFilter.h:14
void getAngle(float *roll, float *pitch, float *yaw, float g[3])
Definition MahonyFilter.cpp:331
void MahonyAHRSupdateIMU()
Definition MahonyFilter.cpp:242
void MahonyAHRSupdate()
Definition MahonyFilter.cpp:134
void readRawData(float a[3], float g[3], float m[3])
Definition MahonyFilter.cpp:40
MahonyFilter()
Definition MahonyFilter.cpp:8
void setKi(float twokiSet)
Definition MahonyFilter.cpp:73
float invSqrt(float x)
Definition MahonyFilter.cpp:320
std::array< float, 3 > getAngleTest()
Definition MahonyFilter.cpp:106
void setFrequency(float f)
Definition MahonyFilter.cpp:67
std::function< void(float, float, float, float[3])> CallbackFunction
Definition MahonyFilter.h:18
bool isDataReady()
Definition MahonyFilter.cpp:86
void setCallbackB(CallbackFunction callback)
Definition MahonyFilter.cpp:99
void getAngleRate(float g[3])
void setCallbackA(CallbackFunction callback)
Definition MahonyFilter.cpp:93
void setKp(float twokpSet)
Definition MahonyFilter.cpp:79