| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * @file testAHRS.cpp | 
					
						
							|  |  |  |  * @brief Test AHRS | 
					
						
							|  |  |  |  * @author Frank Dellaert | 
					
						
							|  |  |  |  * @author Chris Beall | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-21 08:21:18 +08:00
										 |  |  | #include "../AHRS.h"
 | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | #include <gtsam/geometry/Rot3.h>
 | 
					
						
							|  |  |  | #include <gtsam/base/Vector.h>
 | 
					
						
							| 
									
										
										
										
											2013-06-21 08:21:18 +08:00
										 |  |  | #include <gtsam/base/Testable.h>
 | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | #include <CppUnitLite/TestHarness.h>
 | 
					
						
							| 
									
										
										
										
											2013-06-21 08:21:18 +08:00
										 |  |  | #include <list>
 | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // stationary interval of gyro U and acc F
 | 
					
						
							| 
									
										
										
										
											2013-12-17 05:33:12 +08:00
										 |  |  | Matrix stationaryU = trans((Matrix(3, 3) << -0.0004,-0.0002,-0.0014,0.0006,-0.0003,0.0007,0.0006,-0.0002,-0.0003)); | 
					
						
							|  |  |  | Matrix stationaryF = trans((Matrix(3, 3) << 0.1152,-0.0188,9.7419,-0.0163,0.0146,9.7753,-0.0283,-0.0428,9.9021)); | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | double g_e = 9.7963; // Atlanta
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST (AHRS, cov) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // samples stored by row
 | 
					
						
							| 
									
										
										
										
											2013-12-17 05:33:12 +08:00
										 |  |  |   Matrix A = (Matrix(4, 3) << | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  |       1.0, 2.0, 3.0, | 
					
						
							|  |  |  |       5.0, 7.0, 0.0, | 
					
						
							|  |  |  |       9.0, 4.0, 7.0, | 
					
						
							|  |  |  |       6.0, 3.0, 2.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Matrix actual = cov(trans(A)); | 
					
						
							| 
									
										
										
										
											2013-12-17 05:33:12 +08:00
										 |  |  |   Matrix expected = (Matrix(3, 3) << | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  |       10.9167,    2.3333,    5.0000, | 
					
						
							|  |  |  |           2.3333,    4.6667,   -2.6667, | 
					
						
							|  |  |  |           5.0000,   -2.6667,    8.6667); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(assert_equal(expected, actual, 1e-4)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST (AHRS, covU) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Matrix actual = cov(10000*stationaryU); | 
					
						
							| 
									
										
										
										
											2013-12-17 05:33:12 +08:00
										 |  |  |   Matrix expected = (Matrix(3, 3) << | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  |       33.3333333,    -1.66666667,    53.3333333, | 
					
						
							|  |  |  |       -1.66666667,    0.333333333,   -5.16666667, | 
					
						
							|  |  |  |       53.3333333,  -5.16666667,    110.333333); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(assert_equal(expected, actual, 1e-4)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST (AHRS, covF) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Matrix actual = cov(100*stationaryF); | 
					
						
							| 
									
										
										
										
											2013-12-17 05:33:12 +08:00
										 |  |  |   Matrix expected = (Matrix(3, 3) << | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  |       63.3808333, -0.432166667,  -48.1706667, | 
					
						
							|  |  |  |     -0.432166667,   8.31053333,  -16.6792667, | 
					
						
							|  |  |  |      -48.1706667,  -16.6792667,   71.4297333); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(assert_equal(expected, actual, 1e-4)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST (AHRS, constructor) { | 
					
						
							|  |  |  |   AHRS ahrs = AHRS(stationaryU,stationaryF,g_e); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-21 08:21:18 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | // TODO make a testMechanization_bRn2
 | 
					
						
							|  |  |  | TEST (AHRS, Mechanization_integrate) { | 
					
						
							|  |  |  |   AHRS ahrs = AHRS(stationaryU,stationaryF,g_e); | 
					
						
							|  |  |  |   Mechanization_bRn2 mech; | 
					
						
							|  |  |  |   KalmanFilter::State state; | 
					
						
							|  |  |  | //  boost::tie(mech,state) = ahrs.initialize(g_e);
 | 
					
						
							| 
									
										
										
										
											2014-01-23 15:03:12 +08:00
										 |  |  | //  Vector u = (Vector(3) << 0.05,0.0,0.0);
 | 
					
						
							| 
									
										
										
										
											2013-06-21 08:21:18 +08:00
										 |  |  | //  double dt = 2;
 | 
					
						
							|  |  |  | //  Rot3 expected;
 | 
					
						
							|  |  |  | //  Mechanization_bRn2 mech2 = mech.integrate(u,dt);
 | 
					
						
							|  |  |  | //  Rot3 actual = mech2.bRn();
 | 
					
						
							|  |  |  | //  EXPECT(assert_equal(expected, actual));
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | /* TODO: currently fails because of problem with ill-conditioned system
 | 
					
						
							|  |  |  | TEST (AHRS, init) { | 
					
						
							|  |  |  |   AHRS ahrs = AHRS(stationaryU,stationaryF,g_e); | 
					
						
							|  |  |  |   std::pair<Mechanization_bRn2, KalmanFilter::State> result =  ahrs.initialize(g_e); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main() { | 
					
						
							| 
									
										
										
										
											2013-10-11 01:52:57 +08:00
										 |  |  |   TestResult tr; | 
					
						
							|  |  |  |   return TestRegistry::runAllTests(tr); | 
					
						
							| 
									
										
										
										
											2013-05-21 07:16:44 +08:00
										 |  |  | } | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | 
 |