Cleaned up commented code
							parent
							
								
									f77c479dec
								
							
						
					
					
						commit
						af9320e468
					
				|  | @ -95,46 +95,23 @@ namespace gtsam { | |||
|   } | ||||
| 
 | ||||
| #ifdef CORRECT_POSE3_EXMAP | ||||
| //  /* ************************************************************************* */
 | ||||
| //  // Changes default to use the full verions of expmap/logmap
 | ||||
| //  /* ************************************************************************* */
 | ||||
| //  Pose3 Retract(const Vector& xi) {
 | ||||
| //  	return Pose3::Expmap(xi);
 | ||||
| //  }
 | ||||
| //
 | ||||
| //  /* ************************************************************************* */
 | ||||
| //  Vector Unretract(const Pose3& p) {
 | ||||
| //  	return Pose3::Logmap(p);
 | ||||
| //  }
 | ||||
|   /* ************************************************************************* */ | ||||
|   // Changes default to use the full verions of expmap/logmap
 | ||||
|   /* ************************************************************************* */ | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   Pose3 retract(const Vector& d) { | ||||
|   	return retract(d); | ||||
|   Pose3 Pose3::retract(const Vector& d) { | ||||
|   	return compose(Expmap(d)); | ||||
|   } | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   Vector localCoordinates(const Pose3& T1, const Pose3& T2) { | ||||
|   	return localCoordinates(T2); | ||||
|   Vector Pose3::localCoordinates(const Pose3& T1, const Pose3& T2) { | ||||
|   	return Logmap(T1.between(T2)); | ||||
|   } | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| //  /* ************************************************************************* */
 | ||||
| //  /* incorrect versions for which we know how to compute derivatives */
 | ||||
| //  Pose3 Pose3::Retract(const Vector& d) {
 | ||||
| //    Vector w = sub(d, 0,3);
 | ||||
| //    Vector u = sub(d, 3,6);
 | ||||
| //    return Pose3(Rot3::Retract(w), Point3::Retract(u));
 | ||||
| //  }
 | ||||
| //
 | ||||
| //  /* ************************************************************************* */
 | ||||
| //  // Log map at identity - return the translation and canonical rotation
 | ||||
| //  // coordinates of a pose.
 | ||||
| //  Vector Pose3::Unretract(const Pose3& p) {
 | ||||
| //    const Vector w = Rot3::Unretract(p.rotation()), u = Point3::Unretract(p.translation());
 | ||||
| //    return concatVectors(2, &w, &u);
 | ||||
| //  }
 | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   /** These are the "old-style" expmap and logmap about the specified
 | ||||
|    * pose. Increments the offset and rotation independently given a translation and | ||||
|    * canonical rotation coordinates. Created to match ML derivatives, but | ||||
|  | @ -144,6 +121,7 @@ namespace gtsam { | |||
|     		         t_.retract(sub(d, 3, 6))); | ||||
|   } | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   /** Independently computes the logmap of the translation and rotation. */ | ||||
|   Vector Pose3::localCoordinates(const Pose3& pp) const { | ||||
|     const Vector r(R_.localCoordinates(pp.rotation())), | ||||
|  |  | |||
|  | @ -150,8 +150,8 @@ namespace screw { | |||
| TEST(Pose3, expmap_c) | ||||
| { | ||||
|   EXPECT(assert_equal(screw::expected, expm<Pose2>(screw::xi),1e-6)); | ||||
|   EXPECT(assert_equal(screw::expected, Pose2::Retract(screw::xi),1e-6)); | ||||
|   EXPECT(assert_equal(screw::xi, Pose2::Unretract(screw::expected),1e-6)); | ||||
|   EXPECT(assert_equal(screw::expected, Pose2::Expmap(screw::xi),1e-6)); | ||||
|   EXPECT(assert_equal(screw::xi, Pose2::Logmap(screw::expected),1e-6)); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
|  | @ -105,24 +105,24 @@ namespace screw { | |||
| TEST(Pose3, expmap_c) | ||||
| { | ||||
|   EXPECT(assert_equal(screw::expected, expm<Pose3>(screw::xi),1e-6)); | ||||
|   EXPECT(assert_equal(screw::expected, Pose3::Retract(screw::xi),1e-6)); | ||||
|   EXPECT(assert_equal(screw::expected, Pose3::Expmap(screw::xi),1e-6)); | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| // assert that T*exp(xi)*T^-1 is equal to exp(Ad_T(xi))
 | ||||
| TEST(Pose3, Adjoint) | ||||
| { | ||||
| 	Pose3 expected = T * Pose3::Retract(screw::xi) * inverse(T); | ||||
| 	Pose3 expected = T * Pose3::Expmap(screw::xi) * inverse(T); | ||||
| 	Vector xiprime = Adjoint(T, screw::xi); | ||||
| 	EXPECT(assert_equal(expected, Pose3::Retract(xiprime), 1e-6)); | ||||
| 	EXPECT(assert_equal(expected, Pose3::Expmap(xiprime), 1e-6)); | ||||
| 
 | ||||
| 	Pose3 expected2 = T2 * Pose3::Retract(screw::xi) * inverse(T2); | ||||
| 	Pose3 expected2 = T2 * Pose3::Expmap(screw::xi) * inverse(T2); | ||||
| 	Vector xiprime2 = Adjoint(T2, screw::xi); | ||||
| 	EXPECT(assert_equal(expected2, Pose3::Retract(xiprime2), 1e-6)); | ||||
| 	EXPECT(assert_equal(expected2, Pose3::Expmap(xiprime2), 1e-6)); | ||||
| 
 | ||||
| 	Pose3 expected3 = T3 * Pose3::Retract(screw::xi) * inverse(T3); | ||||
| 	Pose3 expected3 = T3 * Pose3::Expmap(screw::xi) * inverse(T3); | ||||
| 	Vector xiprime3 = Adjoint(T3, screw::xi); | ||||
| 	EXPECT(assert_equal(expected3, Pose3::Retract(xiprime3), 1e-6)); | ||||
| 	EXPECT(assert_equal(expected3, Pose3::Expmap(xiprime3), 1e-6)); | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
|  | @ -145,7 +145,7 @@ TEST(Pose3, expmaps_galore) | |||
| { | ||||
| 	Vector xi; Pose3 actual; | ||||
| 	xi = Vector_(6,0.1,0.2,0.3,0.4,0.5,0.6); | ||||
| 	actual = Pose3::Retract(xi); | ||||
| 	actual = Pose3::Expmap(xi); | ||||
|   EXPECT(assert_equal(expm<Pose3>(xi), actual,1e-6)); | ||||
|   EXPECT(assert_equal(Agrawal06iros(xi), actual,1e-6)); | ||||
|   EXPECT(assert_equal(xi, localCoordinates(actual),1e-6)); | ||||
|  | @ -153,17 +153,17 @@ TEST(Pose3, expmaps_galore) | |||
| 	xi = Vector_(6,0.1,-0.2,0.3,-0.4,0.5,-0.6); | ||||
| 	for (double theta=1.0;0.3*theta<=M_PI;theta*=2) { | ||||
| 		Vector txi = xi*theta; | ||||
| 		actual = Pose3::Retract(txi); | ||||
| 		actual = Pose3::Expmap(txi); | ||||
| 		EXPECT(assert_equal(expm<Pose3>(txi,30), actual,1e-6)); | ||||
| 		EXPECT(assert_equal(Agrawal06iros(txi), actual,1e-6)); | ||||
| 		Vector log = localCoordinates(actual); | ||||
| 		EXPECT(assert_equal(actual, Pose3::Retract(log),1e-6)); | ||||
| 		EXPECT(assert_equal(actual, Pose3::Expmap(log),1e-6)); | ||||
| 		EXPECT(assert_equal(txi,log,1e-6)); // not true once wraps
 | ||||
| 	} | ||||
| 
 | ||||
|   // Works with large v as well, but expm needs 10 iterations!
 | ||||
| 	xi = Vector_(6,0.2,0.3,-0.8,100.0,120.0,-60.0); | ||||
| 	actual = Pose3::Retract(xi); | ||||
| 	actual = Pose3::Expmap(xi); | ||||
|   EXPECT(assert_equal(expm<Pose3>(xi,10), actual,1e-5)); | ||||
|   EXPECT(assert_equal(Agrawal06iros(xi), actual,1e-6)); | ||||
|   EXPECT(assert_equal(xi, localCoordinates(actual),1e-6)); | ||||
|  | @ -176,9 +176,9 @@ TEST(Pose3, Adjoint_compose) | |||
| 	// T1*T2*exp(Adjoint(inv(T2),x) = T1*exp(x)*T2
 | ||||
| 	const Pose3& T1 = T; | ||||
| 	Vector x = Vector_(6,0.1,0.1,0.1,0.4,0.2,0.8); | ||||
| 	Pose3 expected = T1 * Pose3::Retract(x) * T2; | ||||
| 	Pose3 expected = T1 * Pose3::Expmap(x) * T2; | ||||
| 	Vector y = Adjoint(inverse(T2), x); | ||||
| 	Pose3 actual = T1 * T2 * Pose3::Retract(y); | ||||
| 	Pose3 actual = T1 * T2 * Pose3::Expmap(y); | ||||
| 	EXPECT(assert_equal(expected, actual, 1e-6)); | ||||
| } | ||||
| #endif // SLOW_BUT_CORRECT_EXMAP
 | ||||
|  | @ -544,11 +544,11 @@ TEST(Pose3, manifold) | |||
| 	// lines in canonical coordinates correspond to Abelian subgroups in SE(3)
 | ||||
| 	 Vector d = Vector_(6,0.1,0.2,0.3,0.4,0.5,0.6); | ||||
| 	// exp(-d)=inverse(exp(d))
 | ||||
| 	 EXPECT(assert_equal(Pose3::Retract(-d),inverse(Pose3::Retract(d)))); | ||||
| 	 EXPECT(assert_equal(Pose3::Expmap(-d),inverse(Pose3::Expmap(d)))); | ||||
| 	// exp(5d)=exp(2*d+3*d)=exp(2*d)exp(3*d)=exp(3*d)exp(2*d)
 | ||||
| 	 Pose3 T2 = Pose3::Retract(2*d); | ||||
| 	 Pose3 T3 = Pose3::Retract(3*d); | ||||
| 	 Pose3 T5 = Pose3::Retract(5*d); | ||||
| 	 Pose3 T2 = Pose3::Expmap(2*d); | ||||
| 	 Pose3 T3 = Pose3::Expmap(3*d); | ||||
| 	 Pose3 T5 = Pose3::Expmap(5*d); | ||||
| 	 EXPECT(assert_equal(T5,T2*T3)); | ||||
| 	 EXPECT(assert_equal(T5,T3*T2)); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue