Tightened thresholds in Rot3, Pose3, Rot2, Pose2, that were "correcting" numbers to zero and one with too loose tolerance. This made it necessary to specify large steps for numerical derivatives (1e-2 instead of the default 1e-5). Fixed this, and updated unit tests to use the default step size.
parent
b1922464de
commit
1a94808f57
|
|
@ -51,7 +51,7 @@ namespace gtsam {
|
|||
assert(xi.size() == 3);
|
||||
Point2 v(xi(0),xi(1));
|
||||
double w = xi(2);
|
||||
if (fabs(w) < 1e-5)
|
||||
if (fabs(w) < 1e-10)
|
||||
return Pose2(xi[0], xi[1], xi[2]);
|
||||
else {
|
||||
Rot2 R(Rot2::fromAngle(w));
|
||||
|
|
@ -66,7 +66,7 @@ namespace gtsam {
|
|||
const Rot2& R = p.r();
|
||||
const Point2& t = p.t();
|
||||
double w = R.theta();
|
||||
if (fabs(w) < 1e-5)
|
||||
if (fabs(w) < 1e-10)
|
||||
return Vector_(3, t.x(), t.y(), w);
|
||||
else {
|
||||
double c_1 = R.c()-1.0, s = R.s();
|
||||
|
|
@ -216,7 +216,7 @@ namespace gtsam {
|
|||
Point2 d = transform_to(point, H1, H2);
|
||||
double x = d.x(), y = d.y(), d2 = x * x + y * y, n = sqrt(d2);
|
||||
Matrix D_result_d;
|
||||
if(fabs(n) > 1e-5)
|
||||
if(fabs(n) > 1e-10)
|
||||
D_result_d = Matrix_(1, 2, x / n, y / n);
|
||||
else {
|
||||
D_result_d = Matrix_(1,2, 1.0, 1.0);
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ namespace gtsam {
|
|||
Point3 w(xi(0),xi(1),xi(2)), v(xi(3),xi(4),xi(5));
|
||||
|
||||
double theta = w.norm();
|
||||
if (theta < 1e-5) {
|
||||
if (theta < 1e-10) {
|
||||
static const Rot3 I;
|
||||
return Pose3(I, v);
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ namespace gtsam {
|
|||
Vector Pose3::LogmapFull(const Pose3& p) {
|
||||
Vector w = Rot3::Logmap(p.rotation()), T = p.translation().vector();
|
||||
double t = norm_2(w);
|
||||
if (t < 1e-5)
|
||||
if (t < 1e-10)
|
||||
return concatVectors(2, &w, &T);
|
||||
else {
|
||||
Matrix W = skewSymmetric(w/t);
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ bool Rot2::equals(const Rot2& R, double tol) const {
|
|||
/* ************************************************************************* */
|
||||
Rot2& Rot2::normalize() {
|
||||
double scale = c_*c_ + s_*s_;
|
||||
if(fabs(scale-1.0)>1e-9) {
|
||||
if(fabs(scale-1.0)>1e-10) {
|
||||
scale = pow(scale, -0.5);
|
||||
c_ *= scale;
|
||||
s_ *= scale;
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ namespace gtsam {
|
|||
/* ************************************************************************* */
|
||||
Rot3 Rot3::rodriguez(const Vector& w) {
|
||||
double t = norm_2(w);
|
||||
if (t < 1e-5) return Rot3();
|
||||
if (t < 1e-10) return Rot3();
|
||||
return rodriguez(w/t, t);
|
||||
}
|
||||
|
||||
|
|
@ -156,16 +156,16 @@ namespace gtsam {
|
|||
// Log map at identity - return the canonical coordinates of this rotation
|
||||
Vector Rot3::Logmap(const Rot3& R) {
|
||||
double tr = R.r1().x()+R.r2().y()+R.r3().z();
|
||||
if (fabs(tr-3.0) < 1e-5) { // when theta = 0, +-2pi, +-4pi, etc.
|
||||
if (fabs(tr-3.0) < 1e-10) { // when theta = 0, +-2pi, +-4pi, etc.
|
||||
return zero(3);
|
||||
} else if (fabs(tr - -1.0) < 1e-5) { // when theta = +-pi, +-3pi, +-5pi, etc.
|
||||
if(R.r3().z() != -1.0)
|
||||
} else if (fabs(tr - -1.0) < 1e-10) { // when theta = +-pi, +-3pi, +-5pi, etc.
|
||||
if(fabs(R.r3().z() - -1.0) > 1e-10)
|
||||
return (boost::math::constants::pi<double>() / sqrt(2.0+2.0*R.r3().z())) *
|
||||
Vector_(3, R.r3().x(), R.r3().y(), 1.0+R.r3().z());
|
||||
else if(R.r2().y() != -1.0)
|
||||
else if(fabs(R.r2().y() - -1.0) > 1e-10)
|
||||
return (boost::math::constants::pi<double>() / sqrt(2.0+2.0*R.r2().y())) *
|
||||
Vector_(3, R.r2().x(), 1.0+R.r2().y(), R.r2().z());
|
||||
else // if(R.r1().x() != -1.0) TODO: fix this?
|
||||
else // if(fabs(R.r1().x() - -1.0) > 1e-10) This is implicit
|
||||
return (boost::math::constants::pi<double>() / sqrt(2.0+2.0*R.r1().x())) *
|
||||
Vector_(3, 1.0+R.r1().x(), R.r1().y(), R.r1().z());
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -204,11 +204,11 @@ TEST( Pose2, transform_to )
|
|||
EXPECT(assert_equal(expected,actual));
|
||||
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
Matrix numericalH1 = numericalDerivative21(transform_to_proxy, pose, point, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21(transform_to_proxy, pose, point);
|
||||
EXPECT(assert_equal(numericalH1,actualH1));
|
||||
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
Matrix numericalH2 = numericalDerivative22(transform_to_proxy, pose, point, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(transform_to_proxy, pose, point);
|
||||
EXPECT(assert_equal(numericalH2,actualH2));
|
||||
}
|
||||
|
||||
|
|
@ -230,11 +230,11 @@ TEST (Pose2, transform_from)
|
|||
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);
|
||||
Matrix numericalH1 = numericalDerivative21(transform_from_proxy, pose, pt);
|
||||
EXPECT(assert_equal(H1_expected, H1));
|
||||
EXPECT(assert_equal(H1_expected, numericalH1));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(transform_from_proxy, pose, pt, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(transform_from_proxy, pose, pt);
|
||||
EXPECT(assert_equal(H2_expected, H2));
|
||||
EXPECT(assert_equal(H2_expected, numericalH2));
|
||||
}
|
||||
|
|
@ -258,8 +258,8 @@ TEST(Pose2, compose_a)
|
|||
0.0, 0.0, 1.0
|
||||
);
|
||||
Matrix expectedH2 = eye(3);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
EXPECT(assert_equal(expectedH1,actualDcompose1));
|
||||
EXPECT(assert_equal(numericalH1,actualDcompose1));
|
||||
EXPECT(assert_equal(expectedH2,actualDcompose2));
|
||||
|
|
@ -285,8 +285,8 @@ TEST(Pose2, compose_b)
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
Pose2 pose_actual_fcn = pose1.compose(pose2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
EXPECT(assert_equal(numericalH1,actualDcompose1,1e-5));
|
||||
EXPECT(assert_equal(numericalH2,actualDcompose2));
|
||||
|
||||
|
|
@ -306,8 +306,8 @@ TEST(Pose2, compose_c)
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
Pose2 pose_actual_fcn = pose1.compose(pose2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2, Pose2, Pose2>(testing::compose, pose1, pose2);
|
||||
EXPECT(assert_equal(numericalH1,actualDcompose1,1e-5));
|
||||
EXPECT(assert_equal(numericalH2,actualDcompose2));
|
||||
|
||||
|
|
@ -330,7 +330,7 @@ TEST(Pose2, inverse )
|
|||
EXPECT(assert_equal(l,lTg*g));
|
||||
|
||||
// Check derivative
|
||||
Matrix numericalH = numericalDerivative11<Pose2,Pose2>(testing::inverse, lTg, 1e-5);
|
||||
Matrix numericalH = numericalDerivative11<Pose2,Pose2>(testing::inverse, lTg);
|
||||
Matrix actualDinverse;
|
||||
lTg.inverse(actualDinverse);
|
||||
EXPECT(assert_equal(numericalH,actualDinverse));
|
||||
|
|
@ -415,7 +415,7 @@ TEST( Pose2, between )
|
|||
1.0, 0.0,-2.0,
|
||||
0.0, 0.0,-1.0
|
||||
);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2,Pose2,Pose2>(testing::between, gT1, gT2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2,Pose2,Pose2>(testing::between, gT1, gT2);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(numericalH1,actualH1));
|
||||
// Assert H1 = -AdjointMap(between(p2,p1)) as in doc/math.lyx
|
||||
|
|
@ -426,7 +426,7 @@ TEST( Pose2, between )
|
|||
0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 1.0
|
||||
);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2,Pose2,Pose2>(testing::between, gT1, gT2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2,Pose2,Pose2>(testing::between, gT1, gT2);
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
EXPECT(assert_equal(numericalH2,actualH2));
|
||||
|
||||
|
|
@ -441,9 +441,9 @@ TEST( Pose2, between2 )
|
|||
|
||||
Matrix actualH1,actualH2;
|
||||
p1.between(p2,actualH1,actualH2);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2,Pose2,Pose2>(testing::between, p1, p2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21<Pose2,Pose2,Pose2>(testing::between, p1, p2);
|
||||
EXPECT(assert_equal(numericalH1,actualH1));
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2,Pose2,Pose2>(testing::between, p1, p2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22<Pose2,Pose2,Pose2>(testing::between, p1, p2);
|
||||
EXPECT(assert_equal(numericalH2,actualH2));
|
||||
}
|
||||
|
||||
|
|
@ -488,9 +488,9 @@ TEST( Pose2, bearing )
|
|||
EXPECT(assert_equal(Rot2::fromAngle(M_PI_4),actual23));
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(bearing_proxy, x2, l3, 1e-5);
|
||||
expectedH1 = numericalDerivative21(bearing_proxy, x2, l3);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
expectedH2 = numericalDerivative22(bearing_proxy, x2, l3, 1e-5);
|
||||
expectedH2 = numericalDerivative22(bearing_proxy, x2, l3);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
|
||||
// establish bearing is indeed 45 degrees even if rotated
|
||||
|
|
@ -498,8 +498,8 @@ TEST( Pose2, bearing )
|
|||
EXPECT(assert_equal(Rot2::fromAngle(M_PI_4),actual34));
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(bearing_proxy, x3, l4, 1e-5);
|
||||
expectedH2 = numericalDerivative22(bearing_proxy, x3, l4, 1e-5);
|
||||
expectedH1 = numericalDerivative21(bearing_proxy, x3, l4);
|
||||
expectedH2 = numericalDerivative22(bearing_proxy, x3, l4);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
}
|
||||
|
|
@ -523,8 +523,8 @@ TEST( Pose2, range )
|
|||
EXPECT_DOUBLES_EQUAL(sqrt(2),actual23,1e-9);
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(range_proxy, x2, l3, 1e-5);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x2, l3, 1e-5);
|
||||
expectedH1 = numericalDerivative21(range_proxy, x2, l3);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x2, l3);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
|
||||
|
|
@ -533,8 +533,8 @@ TEST( Pose2, range )
|
|||
EXPECT_DOUBLES_EQUAL(2,actual34,1e-9);
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(range_proxy, x3, l4, 1e-5);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x3, l4, 1e-5);
|
||||
expectedH1 = numericalDerivative21(range_proxy, x3, l4);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x3, l4);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -275,10 +275,10 @@ TEST( Pose3, compose )
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
T2.compose(T2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T2, T2, 1e-2);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T2, T2);
|
||||
CHECK(assert_equal(numericalH1,actualDcompose1,5e-3));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T2, T2, 1e-2);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T2, T2);
|
||||
CHECK(assert_equal(numericalH2,actualDcompose2));
|
||||
}
|
||||
|
||||
|
|
@ -293,10 +293,10 @@ TEST( Pose3, compose2 )
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
T1.compose(T2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T1, T2, 1e-2);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T1, T2);
|
||||
CHECK(assert_equal(numericalH1,actualDcompose1,5e-3));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T1, T2, 1e-2);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T1, T2);
|
||||
CHECK(assert_equal(numericalH2,actualDcompose2));
|
||||
}
|
||||
|
||||
|
|
@ -308,7 +308,7 @@ TEST( Pose3, inverse)
|
|||
Matrix expected = inverse(T.matrix());
|
||||
CHECK(assert_equal(actual,expected,1e-8));
|
||||
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Pose3>, T, 1e-2);
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Pose3>, T);
|
||||
CHECK(assert_equal(numericalH,actualDinverse,5e-3));
|
||||
}
|
||||
|
||||
|
|
@ -319,7 +319,7 @@ TEST( Pose3, inverseDerivatives2)
|
|||
Point3 t(3.5,-8.2,4.2);
|
||||
Pose3 T(R,t);
|
||||
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Pose3>, T, 1e-2);
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Pose3>, T);
|
||||
Matrix actualDinverse;
|
||||
T.inverse(actualDinverse);
|
||||
CHECK(assert_equal(numericalH,actualDinverse,5e-3));
|
||||
|
|
@ -564,10 +564,10 @@ TEST( Pose3, between )
|
|||
Pose3 actual = T2.between(T3, actualDBetween1,actualDBetween2);
|
||||
CHECK(assert_equal(expected,actual));
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Pose3> , T2, T3, 1e-2);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Pose3> , T2, T3);
|
||||
CHECK(assert_equal(numericalH1,actualDBetween1,5e-3));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Pose3> , T2, T3, 1e-2);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Pose3> , T2, T3);
|
||||
CHECK(assert_equal(numericalH2,actualDBetween2));
|
||||
}
|
||||
|
||||
|
|
@ -595,8 +595,8 @@ TEST( Pose3, range )
|
|||
EXPECT_DOUBLES_EQUAL(sqrt(2),actual23,1e-9);
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(range_proxy, x2, l3, 1e-5);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x2, l3, 1e-5);
|
||||
expectedH1 = numericalDerivative21(range_proxy, x2, l3);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x2, l3);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
|
||||
|
|
@ -605,8 +605,8 @@ TEST( Pose3, range )
|
|||
EXPECT_DOUBLES_EQUAL(5,actual34,1e-9);
|
||||
|
||||
// Check numerical derivatives
|
||||
expectedH1 = numericalDerivative21(range_proxy, x3, l4, 1e-5);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x3, l4, 1e-5);
|
||||
expectedH1 = numericalDerivative21(range_proxy, x3, l4);
|
||||
expectedH2 = numericalDerivative22(range_proxy, x3, l4);
|
||||
EXPECT(assert_equal(expectedH1,actualH1));
|
||||
EXPECT(assert_equal(expectedH2,actualH2));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ TEST( Rot2, relativeBearing )
|
|||
CHECK(assert_equal(Rot2(),actual1));
|
||||
|
||||
// Check numerical derivative
|
||||
expectedH = numericalDerivative11(relativeBearing_, l1, 1e-5);
|
||||
expectedH = numericalDerivative11(relativeBearing_, l1);
|
||||
CHECK(assert_equal(expectedH,actualH));
|
||||
|
||||
// establish relativeBearing is indeed 45 degrees
|
||||
|
|
@ -119,7 +119,7 @@ TEST( Rot2, relativeBearing )
|
|||
CHECK(assert_equal(Rot2::fromAngle(M_PI_4),actual2));
|
||||
|
||||
// Check numerical derivative
|
||||
expectedH = numericalDerivative11(relativeBearing_, l2, 1e-5);
|
||||
expectedH = numericalDerivative11(relativeBearing_, l2);
|
||||
CHECK(assert_equal(expectedH,actualH));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ TEST( Rot3, inverse )
|
|||
CHECK(assert_equal(I,R*R.inverse(actualH)));
|
||||
CHECK(assert_equal(I,R.inverse()*R));
|
||||
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Rot3>, R, 1e-2);
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Rot3>, R);
|
||||
CHECK(assert_equal(numericalH,actualH));
|
||||
}
|
||||
|
||||
|
|
@ -314,10 +314,10 @@ TEST( Rot3, between )
|
|||
Rot3 actual = R1.between(R2, actualH1, actualH2);
|
||||
CHECK(assert_equal(expected,actual));
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Rot3> , R1, R2, 1e-2);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Rot3> , R1, R2);
|
||||
CHECK(assert_equal(numericalH1,actualH1));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Rot3> , R1, R2, 1e-2);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Rot3> , R1, R2);
|
||||
CHECK(assert_equal(numericalH2,actualH2));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,9 +138,9 @@ TEST( Pose2Factor, linearize )
|
|||
CHECK(assert_equal(expected,*actual));
|
||||
|
||||
// Numerical do not work out because BetweenFactor is approximate ?
|
||||
Matrix numericalH1 = numericalDerivative21(h, p1, p2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21(h, p1, p2);
|
||||
CHECK(assert_equal(expectedH1,numericalH1));
|
||||
Matrix numericalH2 = numericalDerivative22(h, p1, p2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(h, p1, p2);
|
||||
CHECK(assert_equal(expectedH2,numericalH2));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ TEST( Pose2Prior, linearize )
|
|||
boost::shared_ptr<JacobianFactor> actual = factor.linearize(x0, ordering);
|
||||
|
||||
// Test with numerical derivative
|
||||
Matrix numericalH = numericalDerivative11(h, prior, 1e-5);
|
||||
Matrix numericalH = numericalDerivative11(h, prior);
|
||||
CHECK(assert_equal(numericalH,actual->getA(actual->find(ordering["x1"]))));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue