the derivative for transform_from
							parent
							
								
									d894e23a06
								
							
						
					
					
						commit
						b58f7b8ea7
					
				| 
						 | 
				
			
			@ -72,6 +72,15 @@ namespace gtsam {
 | 
			
		|||
  	return eye(3);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* ************************************************************************* */
 | 
			
		||||
  Point2 transform_from(const Pose2& pose, const Point2& point,
 | 
			
		||||
  		boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) {
 | 
			
		||||
  	Point2 point_transformed = rotate(pose.r(), point, H1, H2) + pose.t();
 | 
			
		||||
  	Matrix R = pose.r().matrix();
 | 
			
		||||
  	if (H1) *H1 = collect(2, &R, &(*H1));
 | 
			
		||||
    return  point_transformed;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* ************************************************************************* */
 | 
			
		||||
  Pose2 between(const Pose2& p1, const Pose2& p2, boost::optional<Matrix&> H1,
 | 
			
		||||
			boost::optional<Matrix&> H2) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -102,8 +102,8 @@ namespace gtsam {
 | 
			
		|||
  Matrix Dtransform_to2(const Pose2& pose, const Point2& point);
 | 
			
		||||
 | 
			
		||||
  /** Return point coordinates in global frame */
 | 
			
		||||
  inline Point2 transform_from(const Pose2& pose, const Point2& point) {
 | 
			
		||||
    return rotate(pose.r(), point)+pose.t(); }
 | 
			
		||||
  Point2 transform_from(const Pose2& pose, const Point2& point,
 | 
			
		||||
  		boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 = boost::none);
 | 
			
		||||
 | 
			
		||||
  /** Return relative pose between p1 and p2, in p1 coordinate frame */
 | 
			
		||||
  Pose2 between(const Pose2& p1, const Pose2& p2,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,33 @@ TEST( Pose2, transform_to )
 | 
			
		|||
  CHECK(assert_equal(numericalH2,actualH2));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
Point2 transform_from_proxy(const Pose2& pose, const Point2& point) {
 | 
			
		||||
	return transform_from(pose, point);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST (Pose2, transform_from)
 | 
			
		||||
{
 | 
			
		||||
	Pose2 pose(1., 0., M_PI_2);
 | 
			
		||||
	Point2 pt(2., 1.);
 | 
			
		||||
	Matrix H1, H2;
 | 
			
		||||
	Point2 actual = transform_from(pose, pt, H1, H2);
 | 
			
		||||
 | 
			
		||||
	Point2 expected(0., 2.);
 | 
			
		||||
	CHECK(assert_equal(expected, actual));
 | 
			
		||||
 | 
			
		||||
	Matrix H1_expected = Matrix_(2, 3, 0., -1., -2., 1., 0., -1.);
 | 
			
		||||
	Matrix H2_expected = Matrix_(2, 2, 0., -1., 1., 0.);
 | 
			
		||||
 | 
			
		||||
	Matrix numericalH1 = numericalDerivative21(transform_from_proxy, pose, pt, 1e-5);
 | 
			
		||||
	CHECK(assert_equal(H1_expected, H1));
 | 
			
		||||
	CHECK(assert_equal(H1_expected, numericalH1));
 | 
			
		||||
 | 
			
		||||
	Matrix numericalH2 = numericalDerivative22(transform_from_proxy, pose, pt, 1e-5);
 | 
			
		||||
	CHECK(assert_equal(H2_expected, H2));
 | 
			
		||||
	CHECK(assert_equal(H2_expected, numericalH2));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
TEST(Pose2, compose_a)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue