@@ -80,8 +80,30 @@ void QuadEstimatorEKF::UpdateFromIMU(V3F accel, V3F gyro)
80
80
81
81
// YAW -- TODO - weird that it's here..
82
82
state (6 ) = quat.Yaw ();
83
+
84
+ lastGyro = gyro;
85
+ }
86
+
87
+ void QuadEstimatorEKF::UpdateTrueError (V3F truePos, V3F trueVel, Quaternion<float > trueAtt)
88
+ {
89
+ Vector<float , 7 > trueState;
90
+ trueState (0 ) = truePos.x ;
91
+ trueState (1 ) = truePos.y ;
92
+ trueState (2 ) = truePos.z ;
93
+ trueState (3 ) = trueVel.x ;
94
+ trueState (4 ) = trueVel.y ;
95
+ trueState (5 ) = trueVel.z ;
96
+ trueState (6 ) = trueAtt.Yaw ();
97
+
98
+ trueError = state - trueState;
99
+ if (trueError (6 ) > F_PI) trueError (6 ) -= 2 .f *F_PI;
100
+ if (trueError (6 ) < -F_PI) trueError (6 ) += 2 .f *F_PI;
101
+
102
+ pitchErr = pitchEst - trueAtt.Pitch ();
103
+ rollErr = rollEst - trueAtt.Roll ();
83
104
}
84
105
106
+
85
107
void QuadEstimatorEKF::Predict (float dt, V3F accel, V3F gyro)
86
108
{
87
109
Vector<float , QUAD_EKF_NUM_STATES> newState = state;
@@ -247,6 +269,16 @@ bool QuadEstimatorEKF::GetData(const string& name, float& ret) const
247
269
GETTER_HELPER (" Est.D.ax_g" , accelG[0 ]);
248
270
GETTER_HELPER (" Est.D.ay_g" , accelG[1 ]);
249
271
GETTER_HELPER (" Est.D.az_g" , accelG[2 ]);
272
+
273
+ GETTER_HELPER (" Est.E.x" , trueError (0 ));
274
+ GETTER_HELPER (" Est.E.y" , trueError (1 ));
275
+ GETTER_HELPER (" Est.E.z" , trueError (2 ));
276
+ GETTER_HELPER (" Est.E.vx" , trueError (3 ));
277
+ GETTER_HELPER (" Est.E.vy" , trueError (4 ));
278
+ GETTER_HELPER (" Est.E.vz" , trueError (5 ));
279
+ GETTER_HELPER (" Est.E.yaw" , trueError (6 ));
280
+ GETTER_HELPER (" Est.E.pitch" , pitchErr);
281
+ GETTER_HELPER (" Est.E.roll" , rollErr);
250
282
#undef GETTER_HELPER
251
283
}
252
284
return false ;
@@ -274,6 +306,16 @@ vector<string> QuadEstimatorEKF::GetFields() const
274
306
ret.push_back (_name + " .Est.S.vz" );
275
307
ret.push_back (_name + " .Est.S.yaw" );
276
308
309
+ ret.push_back (_name + " .Est.E.x" );
310
+ ret.push_back (_name + " .Est.E.y" );
311
+ ret.push_back (_name + " .Est.E.z" );
312
+ ret.push_back (_name + " .Est.e.vx" );
313
+ ret.push_back (_name + " .Est.E.vy" );
314
+ ret.push_back (_name + " .Est.e.vz" );
315
+ ret.push_back (_name + " .Est.E.yaw" );
316
+ ret.push_back (_name + " .Est.E.pitch" );
317
+ ret.push_back (_name + " .Est.E.roll" );
318
+
277
319
// diagnostic variables
278
320
ret.push_back (_name + " .Est.D.AccelPitch" );
279
321
ret.push_back (_name + " .Est.D.AccelRoll" );
0 commit comments