Added hemisphere continuity enforcement in the madgwick algorithm
This commit is contained in:
1 parent
5e3dd3128b
commit
5daac77a37
4 files changed
+22
-5
No files matched your search
@@ -148,6 +148,14 @@ void MadgwickAHRS_update(MadgwickAHRS_Filter* filter, float gx, float gy, float
|
|||||||
q[2] *= recipNorm;
|
q[2] *= recipNorm;
|
||||||
q[3] *= recipNorm;
|
q[3] *= recipNorm;
|
||||||
|
|
||||||
|
// enforce hemisphere continuity (because of the positive and negative doubling of output)
|
||||||
|
float dot = filter->q[0] * q[0] + filter->q[1] * q[1] + filter->q[2] * q[2] + filter->q[3] * q[3];
|
||||||
|
if (dot < 0.0f){
|
||||||
|
q[0] = -q[0];
|
||||||
|
q[1] = -q[1];
|
||||||
|
q[2] = -q[2];
|
||||||
|
q[3] = -q[3];
|
||||||
|
}
|
||||||
// Update filter state
|
// Update filter state
|
||||||
filter->q[0] = q[0];
|
filter->q[0] = q[0];
|
||||||
filter->q[1] = q[1];
|
filter->q[1] = q[1];
|
||||||
@@ -226,6 +234,15 @@ void MadgwickAHRS_update_IMU(MadgwickAHRS_Filter* filter, float gx, float gy, fl
|
|||||||
q[2] *= recipNorm;
|
q[2] *= recipNorm;
|
||||||
q[3] *= recipNorm;
|
q[3] *= recipNorm;
|
||||||
|
|
||||||
|
// enforce hemisphere continuity (because of the positive and negative doubling of output)
|
||||||
|
float dot = filter->q[0] * q[0] + filter->q[1] * q[1] + filter->q[2] * q[2] + filter->q[3] * q[3];
|
||||||
|
if (dot < 0.0f){
|
||||||
|
q[0] = -q[0];
|
||||||
|
q[1] = -q[1];
|
||||||
|
q[2] = -q[2];
|
||||||
|
q[3] = -q[3];
|
||||||
|
}
|
||||||
|
|
||||||
// Update filter state
|
// Update filter state
|
||||||
filter->q[0] = q[0];
|
filter->q[0] = q[0];
|
||||||
filter->q[1] = q[1];
|
filter->q[1] = q[1];
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
../Core/Src/MadgwickAHRS.c:42:6:MadgwickAHRS_init 1
|
../Core/Src/MadgwickAHRS.c:42:6:MadgwickAHRS_init 1
|
||||||
../Core/Src/MadgwickAHRS.c:55:6:MadgwickAHRS_update 7
|
../Core/Src/MadgwickAHRS.c:55:6:MadgwickAHRS_update 8
|
||||||
../Core/Src/MadgwickAHRS.c:161:6:MadgwickAHRS_update_IMU 4
|
../Core/Src/MadgwickAHRS.c:169:6:MadgwickAHRS_update_IMU 5
|
||||||
../Core/Src/MadgwickAHRS.c:240:7:invSqrt 1
|
../Core/Src/MadgwickAHRS.c:257:7:invSqrt 1
|
||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
../Core/Src/MadgwickAHRS.c:42:6:MadgwickAHRS_init 24 static
|
../Core/Src/MadgwickAHRS.c:42:6:MadgwickAHRS_init 24 static
|
||||||
../Core/Src/MadgwickAHRS.c:55:6:MadgwickAHRS_update 208 static
|
../Core/Src/MadgwickAHRS.c:55:6:MadgwickAHRS_update 208 static
|
||||||
../Core/Src/MadgwickAHRS.c:161:6:MadgwickAHRS_update_IMU 144 static
|
../Core/Src/MadgwickAHRS.c:169:6:MadgwickAHRS_update_IMU 152 static
|
||||||
../Core/Src/MadgwickAHRS.c:240:7:invSqrt 32 static
|
../Core/Src/MadgwickAHRS.c:257:7:invSqrt 32 static
|
||||||
Reference in new issue
Block a user