Fix round-off errors that fail testRot3 and testPose3 in Linux-32bit.
For delta=1e-5, numericalDerivative2x(...) returns Jacobian with all 0 entries. Use delta=1e-4! testTrifocal still fails with sign inversion problem. Don't know why.release/4.3a0
parent
c4df80df55
commit
7307a5c8d7
|
|
@ -199,7 +199,7 @@ namespace gtsam {
|
|||
/* ************************************************************************* */
|
||||
Rot3 Rot3::compose (const Rot3& R2,
|
||||
boost::optional<Matrix&> H1, boost::optional<Matrix&> H2) const {
|
||||
if (H1) *H1 = R2.transpose();
|
||||
if (H1) *H1 = R2.transpose();
|
||||
if (H2) *H2 = I3;
|
||||
return *this * R2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ namespace gtsam {
|
|||
/** Exponential map at identity - create a rotation from canonical coordinates
|
||||
* using Rodriguez' formula
|
||||
*/
|
||||
static Rot3 Expmap(const Vector& v) {
|
||||
static Rot3 Expmap(const Vector& v) {
|
||||
if(zero(v)) return Rot3();
|
||||
else return rodriguez(v);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -168,10 +168,10 @@ TEST( Pose3, compose )
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
T2.compose(T2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T2, T2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T2, T2, 1e-4);
|
||||
CHECK(assert_equal(numericalH1,actualDcompose1,5e-5));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T2, T2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T2, T2, 1e-4);
|
||||
CHECK(assert_equal(numericalH2,actualDcompose2));
|
||||
}
|
||||
|
||||
|
|
@ -186,10 +186,10 @@ TEST( Pose3, compose2 )
|
|||
Matrix actualDcompose1, actualDcompose2;
|
||||
T1.compose(T2, actualDcompose1, actualDcompose2);
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T1, T2, 1e-5);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Pose3>, T1, T2, 1e-4);
|
||||
CHECK(assert_equal(numericalH1,actualDcompose1,5e-5));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T1, T2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Pose3>, T1, T2, 1e-4);
|
||||
CHECK(assert_equal(numericalH2,actualDcompose2));
|
||||
}
|
||||
|
||||
|
|
@ -457,10 +457,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-5);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Pose3> , T2, T3, 1e-4);
|
||||
CHECK(assert_equal(numericalH1,actualDBetween1,5e-5));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Pose3> , T2, T3, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Pose3> , T2, T3, 1e-4);
|
||||
CHECK(assert_equal(numericalH2,actualDBetween2));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -276,11 +276,11 @@ TEST( Rot3, compose )
|
|||
CHECK(assert_equal(expected,actual));
|
||||
|
||||
Matrix numericalH1 = numericalDerivative21(testing::compose<Rot3>, R1,
|
||||
R2, 1e-5);
|
||||
R2, 1e-4);
|
||||
CHECK(assert_equal(numericalH1,actualH1));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::compose<Rot3>, R1,
|
||||
R2, 1e-5);
|
||||
R2, 1e-4);
|
||||
CHECK(assert_equal(numericalH2,actualH2));
|
||||
}
|
||||
|
||||
|
|
@ -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-5);
|
||||
Matrix numericalH = numericalDerivative11(testing::inverse<Rot3>, R, 1e-4);
|
||||
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-5);
|
||||
Matrix numericalH1 = numericalDerivative21(testing::between<Rot3> , R1, R2, 1e-4);
|
||||
CHECK(assert_equal(numericalH1,actualH1));
|
||||
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Rot3> , R1, R2, 1e-5);
|
||||
Matrix numericalH2 = numericalDerivative22(testing::between<Rot3> , R1, R2, 1e-4);
|
||||
CHECK(assert_equal(numericalH2,actualH2));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue