Check explicit poses rather than printing them
parent
d1efff938b
commit
3ab4c329e8
|
@ -296,8 +296,12 @@ TEST( SmartProjectionPoseFactor, 3poses_smart_projection_factor ) {
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0, -0.0314107591, 0.99950656, -0.99950656, -0.0313952598,
|
||||
-0.000986635786, 0.0314107591, -0.999013364, -0.0313952598),
|
||||
Point3(0.1, -0.1, 1.9)), values.at<Pose3>(x3)));
|
||||
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
|
@ -306,7 +310,7 @@ TEST( SmartProjectionPoseFactor, 3poses_smart_projection_factor ) {
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
|
@ -316,8 +320,6 @@ TEST( SmartProjectionPoseFactor, 3poses_smart_projection_factor ) {
|
|||
// VectorValues delta = GFG->optimize();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
EXPECT(assert_equal(pose3, result.at<Pose3>(x3), 1e-8));
|
||||
if (isDebugTest)
|
||||
tictoc_print_();
|
||||
|
@ -416,8 +418,6 @@ TEST( SmartProjectionPoseFactor, smartFactorWithSensorBodyTransform ) {
|
|||
result = optimizer.optimize();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
EXPECT(assert_equal(bodyPose3, result.at<Pose3>(x3)));
|
||||
|
||||
// Check derivatives
|
||||
|
@ -447,15 +447,16 @@ TEST( SmartProjectionPoseFactor, smartFactorWithSensorBodyTransform ) {
|
|||
}
|
||||
|
||||
/* *************************************************************************/
|
||||
TEST( SmartProjectionPoseFactor, Factors ){
|
||||
TEST( SmartProjectionPoseFactor, Factors ) {
|
||||
|
||||
// Default cameras for simple derivatives
|
||||
Rot3 R;
|
||||
static Cal3_S2::shared_ptr K(new Cal3_S2(100, 100, 0, 0, 0));
|
||||
SimpleCamera cam1(Pose3(R,Point3(0,0,0)),*K), cam2(Pose3(R,Point3(1,0,0)),*K);
|
||||
SimpleCamera cam1(Pose3(R, Point3(0, 0, 0)), *K), cam2(
|
||||
Pose3(R, Point3(1, 0, 0)), *K);
|
||||
|
||||
// one landmarks 1m in front of camera
|
||||
Point3 landmark1(0,0,10);
|
||||
Point3 landmark1(0, 0, 10);
|
||||
|
||||
vector<Point2> measurements_cam1;
|
||||
|
||||
|
@ -476,12 +477,12 @@ TEST( SmartProjectionPoseFactor, Factors ){
|
|||
cameras.push_back(cam2);
|
||||
|
||||
// Make sure triangulation works
|
||||
LONGS_EQUAL(2,smartFactor1->triangulateSafe(cameras));
|
||||
LONGS_EQUAL(2, smartFactor1->triangulateSafe(cameras));
|
||||
CHECK(!smartFactor1->isDegenerate());
|
||||
CHECK(!smartFactor1->isPointBehindCamera());
|
||||
boost::optional<Point3> p = smartFactor1->point();
|
||||
CHECK(p);
|
||||
EXPECT(assert_equal(landmark1,*p));
|
||||
EXPECT(assert_equal(landmark1, *p));
|
||||
|
||||
// After eliminating the point, A1 and A2 contain 2-rank information on cameras:
|
||||
Matrix16 A1, A2;
|
||||
|
@ -489,12 +490,14 @@ TEST( SmartProjectionPoseFactor, Factors ){
|
|||
A2 << 1000, 0, 100, 0, -100, 0;
|
||||
{
|
||||
// createHessianFactor
|
||||
Matrix66 G11 = 0.5*A1.transpose()*A1;
|
||||
Matrix66 G12 = 0.5*A1.transpose()*A2;
|
||||
Matrix66 G22 = 0.5*A2.transpose()*A2;
|
||||
Matrix66 G11 = 0.5 * A1.transpose() * A1;
|
||||
Matrix66 G12 = 0.5 * A1.transpose() * A2;
|
||||
Matrix66 G22 = 0.5 * A2.transpose() * A2;
|
||||
|
||||
Vector6 g1; g1.setZero();
|
||||
Vector6 g2; g2.setZero();
|
||||
Vector6 g1;
|
||||
g1.setZero();
|
||||
Vector6 g2;
|
||||
g2.setZero();
|
||||
|
||||
double f = 0;
|
||||
|
||||
|
@ -507,13 +510,32 @@ TEST( SmartProjectionPoseFactor, Factors ){
|
|||
}
|
||||
|
||||
{
|
||||
Matrix26 F1; F1.setZero(); F1(0,1)=-100; F1(0,3)=-10; F1(1,0)=100; F1(1,4)=-10;
|
||||
Matrix26 F2; F2.setZero(); F2(0,1)=-101; F2(0,3)=-10; F2(0,5)=-1; F2(1,0)=100; F2(1,2)=10; F2(1,4)=-10;
|
||||
Matrix43 E; E.setZero(); E(0,0)=100; E(1,1)=100; E(2,0)=100; E(2,2)=10;E(3,1)=100;
|
||||
Matrix26 F1;
|
||||
F1.setZero();
|
||||
F1(0, 1) = -100;
|
||||
F1(0, 3) = -10;
|
||||
F1(1, 0) = 100;
|
||||
F1(1, 4) = -10;
|
||||
Matrix26 F2;
|
||||
F2.setZero();
|
||||
F2(0, 1) = -101;
|
||||
F2(0, 3) = -10;
|
||||
F2(0, 5) = -1;
|
||||
F2(1, 0) = 100;
|
||||
F2(1, 2) = 10;
|
||||
F2(1, 4) = -10;
|
||||
Matrix43 E;
|
||||
E.setZero();
|
||||
E(0, 0) = 100;
|
||||
E(1, 1) = 100;
|
||||
E(2, 0) = 100;
|
||||
E(2, 2) = 10;
|
||||
E(3, 1) = 100;
|
||||
const vector<pair<Key, Matrix26> > Fblocks = list_of<pair<Key, Matrix> > //
|
||||
(make_pair(x1, 10*F1))(make_pair(x2, 10*F2));
|
||||
(make_pair(x1, 10 * F1))(make_pair(x2, 10 * F2));
|
||||
Matrix3 P = (E.transpose() * E).inverse();
|
||||
Vector4 b; b.setZero();
|
||||
Vector4 b;
|
||||
b.setZero();
|
||||
|
||||
// createRegularImplicitSchurFactor
|
||||
RegularImplicitSchurFactor<6> expected(Fblocks, E, P, b);
|
||||
|
@ -524,7 +546,7 @@ TEST( SmartProjectionPoseFactor, Factors ){
|
|||
CHECK(assert_equal(expected, *actual));
|
||||
|
||||
// createJacobianQFactor
|
||||
JacobianFactorQ < 6, 2 > expectedQ(Fblocks, E, P, b);
|
||||
JacobianFactorQ<6, 2> expectedQ(Fblocks, E, P, b);
|
||||
|
||||
boost::shared_ptr<JacobianFactorQ<6, 2> > actualQ =
|
||||
smartFactor1->createJacobianQFactor(cameras, 0.0);
|
||||
|
@ -534,9 +556,10 @@ TEST( SmartProjectionPoseFactor, Factors ){
|
|||
|
||||
{
|
||||
// createJacobianSVDFactor
|
||||
Vector1 b; b.setZero();
|
||||
Vector1 b;
|
||||
b.setZero();
|
||||
double s = sin(M_PI_4);
|
||||
JacobianFactor expected(x1, s*A1, x2, s*A2, b);
|
||||
JacobianFactor expected(x1, s * A1, x2, s * A2, b);
|
||||
|
||||
boost::shared_ptr<JacobianFactor> actual =
|
||||
smartFactor1->createJacobianSVDFactor(cameras, 0.0);
|
||||
|
@ -604,8 +627,13 @@ TEST( SmartProjectionPoseFactor, 3poses_iterative_smart_projection_factor ) {
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(1.11022302e-16, -0.0314107591, 0.99950656, -0.99950656,
|
||||
-0.0313952598, -0.000986635786, 0.0314107591, -0.999013364,
|
||||
-0.0313952598), Point3(0.1, -0.1, 1.9)),
|
||||
values.at<Pose3>(x3)));
|
||||
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
|
@ -614,15 +642,13 @@ TEST( SmartProjectionPoseFactor, 3poses_iterative_smart_projection_factor ) {
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
tictoc_finishedIteration_();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
EXPECT(assert_equal(pose3, result.at<Pose3>(x3), 1e-7));
|
||||
if (isDebugTest)
|
||||
tictoc_print_();
|
||||
|
@ -1050,8 +1076,14 @@ TEST( SmartProjectionPoseFactor, CheckHessian) {
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.00563056869, -0.130848107, 0.991386438, -0.991390265,
|
||||
-0.130426831, -0.0115837907, 0.130819108, -0.98278564,
|
||||
-0.130455917),
|
||||
Point3(0.0897734171, -0.110201006, 0.901022872)),
|
||||
values.at<Pose3>(x3)));
|
||||
|
||||
boost::shared_ptr<GaussianFactor> hessianFactor1 = smartFactor1->linearize(
|
||||
values);
|
||||
|
@ -1143,8 +1175,14 @@ TEST( SmartProjectionPoseFactor, 3poses_2land_rotation_only_smart_projection_fac
|
|||
values.insert(x2, pose2 * noise_pose);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.154256096, -0.632754061, 0.75883289, -0.753276814,
|
||||
-0.572308662, -0.324093872, 0.639358349, -0.521617766,
|
||||
-0.564921063),
|
||||
Point3(0.145118171, -0.252907438, 0.819956033)),
|
||||
values.at<Pose3>(x3)));
|
||||
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
|
@ -1153,19 +1191,24 @@ TEST( SmartProjectionPoseFactor, 3poses_2land_rotation_only_smart_projection_fac
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
tictoc_finishedIteration_();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
cout
|
||||
<< "TEST COMMENTED: rotation only version of smart factors has been deprecated "
|
||||
<< endl;
|
||||
// EXPECT(assert_equal(pose3,result.at<Pose3>(x3)));
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.154256096, -0.632754061, 0.75883289, -0.753276814,
|
||||
-0.572308662, -0.324093872, 0.639358349, -0.521617766,
|
||||
-0.564921063),
|
||||
Point3(0.145118171, -0.252907438, 0.819956033)),
|
||||
result.at<Pose3>(x3)));
|
||||
if (isDebugTest)
|
||||
tictoc_print_();
|
||||
}
|
||||
|
@ -1240,8 +1283,14 @@ TEST( SmartProjectionPoseFactor, 3poses_rotation_only_smart_projection_factor )
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.00563056869, -0.130848107, 0.991386438, -0.991390265,
|
||||
-0.130426831, -0.0115837907, 0.130819108, -0.98278564,
|
||||
-0.130455917),
|
||||
Point3(0.0897734171, -0.110201006, 0.901022872)),
|
||||
values.at<Pose3>(x3)));
|
||||
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
|
@ -1250,19 +1299,24 @@ TEST( SmartProjectionPoseFactor, 3poses_rotation_only_smart_projection_factor )
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
tictoc_finishedIteration_();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
cout
|
||||
<< "TEST COMMENTED: rotation only version of smart factors has been deprecated "
|
||||
<< endl;
|
||||
// EXPECT(assert_equal(pose3,result.at<Pose3>(x3)));
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.00563056869, -0.130848107, 0.991386438, -0.991390265,
|
||||
-0.130426831, -0.0115837907, 0.130819108, -0.98278564,
|
||||
-0.130455917),
|
||||
Point3(0.0897734171, -0.110201006, 0.901022872)),
|
||||
result.at<Pose3>(x3)));
|
||||
if (isDebugTest)
|
||||
tictoc_print_();
|
||||
}
|
||||
|
@ -1543,9 +1597,12 @@ TEST( SmartProjectionPoseFactor, Cal3Bundler ) {
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0, -0.0314107591, 0.99950656, -0.99950656, -0.0313952598,
|
||||
-0.000986635786, 0.0314107591, -0.999013364, -0.0313952598),
|
||||
Point3(0.1, -0.1, 1.9)), values.at<Pose3>(x3)));
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
params.verbosityLM = LevenbergMarquardtParams::TRYLAMBDA;
|
||||
|
@ -1553,15 +1610,12 @@ TEST( SmartProjectionPoseFactor, Cal3Bundler ) {
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
tictoc_finishedIteration_();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
EXPECT(assert_equal(pose3, result.at<Pose3>(x3), 1e-6));
|
||||
if (isDebugTest)
|
||||
tictoc_print_();
|
||||
|
@ -1653,8 +1707,14 @@ TEST( SmartProjectionPoseFactor, Cal3BundlerRotationOnly ) {
|
|||
values.insert(x2, pose2);
|
||||
// initialize third pose with some noise, we expect it to move back to original pose3
|
||||
values.insert(x3, pose3 * noise_pose);
|
||||
if (isDebugTest)
|
||||
values.at<Pose3>(x3).print("Smart: Pose3 before optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.00563056869, -0.130848107, 0.991386438, -0.991390265,
|
||||
-0.130426831, -0.0115837907, 0.130819108, -0.98278564,
|
||||
-0.130455917),
|
||||
Point3(0.0897734171, -0.110201006, 0.901022872)),
|
||||
values.at<Pose3>(x3)));
|
||||
|
||||
LevenbergMarquardtParams params;
|
||||
if (isDebugTest)
|
||||
|
@ -1663,15 +1723,21 @@ TEST( SmartProjectionPoseFactor, Cal3BundlerRotationOnly ) {
|
|||
params.verbosity = NonlinearOptimizerParams::ERROR;
|
||||
|
||||
Values result;
|
||||
gttic_ (SmartProjectionPoseFactor);
|
||||
gttic_(SmartProjectionPoseFactor);
|
||||
LevenbergMarquardtOptimizer optimizer(graph, values, params);
|
||||
result = optimizer.optimize();
|
||||
gttoc_(SmartProjectionPoseFactor);
|
||||
tictoc_finishedIteration_();
|
||||
|
||||
// result.print("results of 3 camera, 3 landmark optimization \n");
|
||||
if (isDebugTest)
|
||||
result.at<Pose3>(x3).print("Smart: Pose3 after optimization: ");
|
||||
EXPECT(
|
||||
assert_equal(
|
||||
Pose3(
|
||||
Rot3(0.00563056869, -0.130848107, 0.991386438, -0.991390265,
|
||||
-0.130426831, -0.0115837907, 0.130819108, -0.98278564,
|
||||
-0.130455917),
|
||||
Point3(0.0897734171, -0.110201006, 0.901022872)),
|
||||
values.at<Pose3>(x3)));
|
||||
cout
|
||||
<< "TEST COMMENTED: rotation only version of smart factors has been deprecated "
|
||||
<< endl;
|
||||
|
|
Loading…
Reference in New Issue