Changed to Point3, which makes much more sense
							parent
							
								
									a24d4ad3d1
								
							
						
					
					
						commit
						1d5da1c35e
					
				|  | @ -48,26 +48,26 @@ Vector GPSFactor::evaluateError(const Pose3& p, | |||
| } | ||||
| 
 | ||||
| //***************************************************************************
 | ||||
| pair<Pose3, Vector3> GPSFactor::EstimateState(double t1, const Vector3& NED1, | ||||
|     double t2, const Vector3& NED2, double timestamp) { | ||||
| pair<Pose3, Vector3> GPSFactor::EstimateState(double t1, const Point3& NED1, | ||||
|     double t2, const Point3& NED2, double timestamp) { | ||||
|   // Estimate initial velocity as difference in NED frame
 | ||||
|   double dt = t2 - t1; | ||||
|   Vector3 nV = (NED2 - NED1) / dt; | ||||
|   Point3 nV = (NED2 - NED1) / dt; | ||||
| 
 | ||||
|   // Estimate initial position as linear interpolation
 | ||||
|   Vector3 nT = NED1 + nV * (timestamp - t1); | ||||
|   Point3 nT = NED1 + nV * (timestamp - t1); | ||||
| 
 | ||||
|   // Estimate Rotation
 | ||||
|   double yaw = atan2(nV[1], nV[0]); | ||||
|   double yaw = atan2(nV.y(), nV.x()); | ||||
|   Rot3 nRy = Rot3::yaw(yaw); // yaw frame
 | ||||
|   Vector3 yV = nRy.transpose() * nV; // velocity in yaw frame
 | ||||
|   double pitch = -atan2(yV[2], yV[0]), roll = 0; | ||||
|   Point3 yV = nRy.inverse() * nV; // velocity in yaw frame
 | ||||
|   double pitch = -atan2(yV.z(), yV.x()), roll = 0; | ||||
|   Rot3 nRb = Rot3::ypr(yaw, pitch, roll); | ||||
| 
 | ||||
|   // Construct initial pose
 | ||||
|   Pose3 nTb(nRb, Point3(nT[0], nT[1], nT[2])); // nTb
 | ||||
|   Pose3 nTb(nRb, nT); // nTb
 | ||||
| 
 | ||||
|   return make_pair(nTb, nV); | ||||
|   return make_pair(nTb, nV.vector()); | ||||
| } | ||||
| //***************************************************************************
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -95,8 +95,8 @@ public: | |||
|    *  readings (in local NED Cartesian frame) bracketing t | ||||
|    *  Assumes roll is zero, calculates yaw and pitch from NED1->NED2 vector. | ||||
|    */ | ||||
|   static std::pair<Pose3, Vector3> EstimateState(double t1, const Vector3& NED1, | ||||
|       double t2, const Vector3& NED2, double timestamp); | ||||
|   static std::pair<Pose3, Vector3> EstimateState(double t1, const Point3& NED1, | ||||
|       double t2, const Point3& NED2, double timestamp); | ||||
| 
 | ||||
| private: | ||||
| 
 | ||||
|  |  | |||
|  | @ -72,7 +72,7 @@ TEST(GPSData, init) { | |||
| 
 | ||||
|   // GPS Reading 1 will be ENU origin
 | ||||
|   double t1 = 84831; | ||||
|   Vector3 NED1(0, 0, 0); | ||||
|   Point3 NED1(0, 0, 0); | ||||
|   LocalCartesian enu(35.4393283333333, -119.062986666667, 275.54, | ||||
|       Geocentric::WGS84); | ||||
| 
 | ||||
|  | @ -80,7 +80,7 @@ TEST(GPSData, init) { | |||
|   double t2 = 84831.5; | ||||
|   double E, N, U; | ||||
|   enu.Forward(35.4394633333333, -119.063146666667, 276.52, E, N, U); | ||||
|   Vector3 NED2(N, E, -U); | ||||
|   Point3 NED2(N, E, -U); | ||||
| 
 | ||||
|   // Estimate initial state
 | ||||
|   Pose3 T; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue