Fixed testVisualSLAM so that it now passes
parent
1bf3ae51a9
commit
2be56fa84e
|
@ -73,10 +73,10 @@ visualSLAM::Graph testGraph() {
|
||||||
g.addMeasurement(z12, sigma, X(1), L(2), sK);
|
g.addMeasurement(z12, sigma, X(1), L(2), sK);
|
||||||
g.addMeasurement(z13, sigma, X(1), L(3), sK);
|
g.addMeasurement(z13, sigma, X(1), L(3), sK);
|
||||||
g.addMeasurement(z14, sigma, X(1), L(4), sK);
|
g.addMeasurement(z14, sigma, X(1), L(4), sK);
|
||||||
g.addMeasurement(z21, sigma, X(1), L(1), sK);
|
g.addMeasurement(z21, sigma, X(2), L(1), sK);
|
||||||
g.addMeasurement(z22, sigma, X(1), L(2), sK);
|
g.addMeasurement(z22, sigma, X(2), L(2), sK);
|
||||||
g.addMeasurement(z23, sigma, X(1), L(3), sK);
|
g.addMeasurement(z23, sigma, X(2), L(3), sK);
|
||||||
g.addMeasurement(z24, sigma, X(1), L(4), sK);
|
g.addMeasurement(z24, sigma, X(2), L(4), sK);
|
||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ TEST( VisualSLAM, optimizeLM)
|
||||||
// Create an initial values structure corresponding to the ground truth
|
// Create an initial values structure corresponding to the ground truth
|
||||||
Values initialEstimate;
|
Values initialEstimate;
|
||||||
initialEstimate.insert(X(1), camera1);
|
initialEstimate.insert(X(1), camera1);
|
||||||
initialEstimate.insert(X(1), camera2);
|
initialEstimate.insert(X(2), camera2);
|
||||||
initialEstimate.insert(L(1), landmark1);
|
initialEstimate.insert(L(1), landmark1);
|
||||||
initialEstimate.insert(L(2), landmark2);
|
initialEstimate.insert(L(2), landmark2);
|
||||||
initialEstimate.insert(L(3), landmark3);
|
initialEstimate.insert(L(3), landmark3);
|
||||||
|
@ -101,7 +101,7 @@ TEST( VisualSLAM, optimizeLM)
|
||||||
|
|
||||||
// Create an ordering of the variables
|
// Create an ordering of the variables
|
||||||
Ordering ordering;
|
Ordering ordering;
|
||||||
ordering += L(1),L(2),L(3),L(4),X(1),X(1);
|
ordering += L(1),L(2),L(3),L(4),X(1),X(2);
|
||||||
|
|
||||||
// Create an optimizer and check its error
|
// Create an optimizer and check its error
|
||||||
// We expect the initial to be zero because config is the ground truth
|
// We expect the initial to be zero because config is the ground truth
|
||||||
|
@ -125,12 +125,12 @@ TEST( VisualSLAM, optimizeLM2)
|
||||||
visualSLAM::Graph graph(testGraph());
|
visualSLAM::Graph graph(testGraph());
|
||||||
// add 2 camera constraints
|
// add 2 camera constraints
|
||||||
graph.addPoseConstraint(X(1), camera1);
|
graph.addPoseConstraint(X(1), camera1);
|
||||||
graph.addPoseConstraint(X(1), camera2);
|
graph.addPoseConstraint(X(2), camera2);
|
||||||
|
|
||||||
// Create an initial values structure corresponding to the ground truth
|
// Create an initial values structure corresponding to the ground truth
|
||||||
Values initialEstimate;
|
Values initialEstimate;
|
||||||
initialEstimate.insert(X(1), camera1);
|
initialEstimate.insert(X(1), camera1);
|
||||||
initialEstimate.insert(X(1), camera2);
|
initialEstimate.insert(X(2), camera2);
|
||||||
initialEstimate.insert(L(1), landmark1);
|
initialEstimate.insert(L(1), landmark1);
|
||||||
initialEstimate.insert(L(2), landmark2);
|
initialEstimate.insert(L(2), landmark2);
|
||||||
initialEstimate.insert(L(3), landmark3);
|
initialEstimate.insert(L(3), landmark3);
|
||||||
|
@ -138,17 +138,17 @@ TEST( VisualSLAM, optimizeLM2)
|
||||||
|
|
||||||
// Create an ordering of the variables
|
// Create an ordering of the variables
|
||||||
Ordering ordering;
|
Ordering ordering;
|
||||||
ordering += L(1),L(2),L(3),L(4),X(1),X(1);
|
ordering += L(1),L(2),L(3),L(4),X(1),X(2);
|
||||||
|
|
||||||
// Create an optimizer and check its error
|
// Create an optimizer and check its error
|
||||||
// We expect the initial to be zero because config is the ground truth
|
// We expect the initial to be zero because config is the ground truth
|
||||||
LevenbergMarquardtOptimizer optimizer(graph, initialEstimate, ordering);
|
LevenbergMarquardtOptimizer optimizer(graph, initialEstimate, ordering);
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// Iterate once, and the config should not have changed because we started
|
// Iterate once, and the config should not have changed because we started
|
||||||
// with the ground truth
|
// with the ground truth
|
||||||
optimizer.iterate();
|
optimizer.iterate();
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// check if correct
|
// check if correct
|
||||||
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
||||||
|
@ -161,12 +161,12 @@ TEST( VisualSLAM, LMoptimizer)
|
||||||
visualSLAM::Graph graph(testGraph());
|
visualSLAM::Graph graph(testGraph());
|
||||||
// add 2 camera constraints
|
// add 2 camera constraints
|
||||||
graph.addPoseConstraint(X(1), camera1);
|
graph.addPoseConstraint(X(1), camera1);
|
||||||
graph.addPoseConstraint(X(1), camera2);
|
graph.addPoseConstraint(X(2), camera2);
|
||||||
|
|
||||||
// Create an initial values structure corresponding to the ground truth
|
// Create an initial values structure corresponding to the ground truth
|
||||||
Values initialEstimate;
|
Values initialEstimate;
|
||||||
initialEstimate.insert(X(1), camera1);
|
initialEstimate.insert(X(1), camera1);
|
||||||
initialEstimate.insert(X(1), camera2);
|
initialEstimate.insert(X(2), camera2);
|
||||||
initialEstimate.insert(L(1), landmark1);
|
initialEstimate.insert(L(1), landmark1);
|
||||||
initialEstimate.insert(L(2), landmark2);
|
initialEstimate.insert(L(2), landmark2);
|
||||||
initialEstimate.insert(L(3), landmark3);
|
initialEstimate.insert(L(3), landmark3);
|
||||||
|
@ -175,12 +175,12 @@ TEST( VisualSLAM, LMoptimizer)
|
||||||
// Create an optimizer and check its error
|
// Create an optimizer and check its error
|
||||||
// We expect the initial to be zero because config is the ground truth
|
// We expect the initial to be zero because config is the ground truth
|
||||||
LevenbergMarquardtOptimizer optimizer = graph.optimizer(initialEstimate);
|
LevenbergMarquardtOptimizer optimizer = graph.optimizer(initialEstimate);
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// Iterate once, and the config should not have changed because we started
|
// Iterate once, and the config should not have changed because we started
|
||||||
// with the ground truth
|
// with the ground truth
|
||||||
optimizer.iterate();
|
optimizer.iterate();
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// check if correct
|
// check if correct
|
||||||
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
||||||
|
@ -194,12 +194,12 @@ TEST( VisualSLAM, CHECK_ORDERING)
|
||||||
visualSLAM::Graph graph = testGraph();
|
visualSLAM::Graph graph = testGraph();
|
||||||
// add 2 camera constraints
|
// add 2 camera constraints
|
||||||
graph.addPoseConstraint(X(1), camera1);
|
graph.addPoseConstraint(X(1), camera1);
|
||||||
graph.addPoseConstraint(X(1), camera2);
|
graph.addPoseConstraint(X(2), camera2);
|
||||||
|
|
||||||
// Create an initial values structure corresponding to the ground truth
|
// Create an initial values structure corresponding to the ground truth
|
||||||
Values initialEstimate;
|
Values initialEstimate;
|
||||||
initialEstimate.insert(X(1), camera1);
|
initialEstimate.insert(X(1), camera1);
|
||||||
initialEstimate.insert(X(1), camera2);
|
initialEstimate.insert(X(2), camera2);
|
||||||
initialEstimate.insert(L(1), landmark1);
|
initialEstimate.insert(L(1), landmark1);
|
||||||
initialEstimate.insert(L(2), landmark2);
|
initialEstimate.insert(L(2), landmark2);
|
||||||
initialEstimate.insert(L(3), landmark3);
|
initialEstimate.insert(L(3), landmark3);
|
||||||
|
@ -208,12 +208,12 @@ TEST( VisualSLAM, CHECK_ORDERING)
|
||||||
// Create an optimizer and check its error
|
// Create an optimizer and check its error
|
||||||
// We expect the initial to be zero because config is the ground truth
|
// We expect the initial to be zero because config is the ground truth
|
||||||
LevenbergMarquardtOptimizer optimizer(graph, initialEstimate);
|
LevenbergMarquardtOptimizer optimizer(graph, initialEstimate);
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// Iterate once, and the config should not have changed because we started
|
// Iterate once, and the config should not have changed because we started
|
||||||
// with the ground truth
|
// with the ground truth
|
||||||
optimizer.iterate();
|
optimizer.iterate();
|
||||||
DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
EXPECT_DOUBLES_EQUAL(0.0, optimizer.error(), 1e-9);
|
||||||
|
|
||||||
// check if correct
|
// check if correct
|
||||||
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
CHECK(assert_equal(initialEstimate, optimizer.values()));
|
||||||
|
@ -233,12 +233,12 @@ TEST( VisualSLAM, update_with_large_delta) {
|
||||||
|
|
||||||
Ordering largeOrdering;
|
Ordering largeOrdering;
|
||||||
Values largeValues = init;
|
Values largeValues = init;
|
||||||
largeValues.insert(X(1), Pose3());
|
largeValues.insert(X(2), Pose3());
|
||||||
largeOrdering += X(1),L(1),X(1);
|
largeOrdering += X(1),L(1),X(2);
|
||||||
VectorValues delta(largeValues.dims(largeOrdering));
|
VectorValues delta(largeValues.dims(largeOrdering));
|
||||||
delta[largeOrdering[X(1)]] = Vector_(6, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1);
|
delta[largeOrdering[X(1)]] = Vector_(6, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1);
|
||||||
delta[largeOrdering[L(1)]] = Vector_(3, 0.1, 0.1, 0.1);
|
delta[largeOrdering[L(1)]] = Vector_(3, 0.1, 0.1, 0.1);
|
||||||
delta[largeOrdering[X(1)]] = Vector_(6, 0.0, 0.0, 0.0, 100.1, 4.1, 9.1);
|
delta[largeOrdering[X(2)]] = Vector_(6, 0.0, 0.0, 0.0, 100.1, 4.1, 9.1);
|
||||||
Values actual = init.retract(delta, largeOrdering);
|
Values actual = init.retract(delta, largeOrdering);
|
||||||
|
|
||||||
CHECK(assert_equal(expected,actual));
|
CHECK(assert_equal(expected,actual));
|
||||||
|
|
Loading…
Reference in New Issue