improve dynamic outlier rejection test
parent
fcc9ac2669
commit
b5a978c534
|
@ -436,8 +436,6 @@ TEST( SmartStereoProjectionPoseFactor, landmarkDistance ) {
|
||||||
/* *************************************************************************/
|
/* *************************************************************************/
|
||||||
TEST( SmartStereoProjectionPoseFactor, dynamicOutlierRejection ) {
|
TEST( SmartStereoProjectionPoseFactor, dynamicOutlierRejection ) {
|
||||||
|
|
||||||
double dynamicOutlierRejectionThreshold = 1; // max 1 pixel of average reprojection error
|
|
||||||
|
|
||||||
vector<Key> views;
|
vector<Key> views;
|
||||||
views.push_back(x1);
|
views.push_back(x1);
|
||||||
views.push_back(x2);
|
views.push_back(x2);
|
||||||
|
@ -473,7 +471,7 @@ TEST( SmartStereoProjectionPoseFactor, dynamicOutlierRejection ) {
|
||||||
|
|
||||||
SmartStereoProjectionParams params;
|
SmartStereoProjectionParams params;
|
||||||
params.setLinearizationMode(JACOBIAN_SVD);
|
params.setLinearizationMode(JACOBIAN_SVD);
|
||||||
params.setDynamicOutlierRejectionThreshold(dynamicOutlierRejectionThreshold);
|
params.setDynamicOutlierRejectionThreshold(1);
|
||||||
|
|
||||||
|
|
||||||
SmartFactor::shared_ptr smartFactor1(new SmartFactor(params));
|
SmartFactor::shared_ptr smartFactor1(new SmartFactor(params));
|
||||||
|
@ -488,6 +486,10 @@ TEST( SmartStereoProjectionPoseFactor, dynamicOutlierRejection ) {
|
||||||
SmartFactor::shared_ptr smartFactor4(new SmartFactor(params));
|
SmartFactor::shared_ptr smartFactor4(new SmartFactor(params));
|
||||||
smartFactor4->add(measurements_cam4, views, model, K);
|
smartFactor4->add(measurements_cam4, views, model, K);
|
||||||
|
|
||||||
|
// same as factor 4, but dynamic outlier rejection is off
|
||||||
|
SmartFactor::shared_ptr smartFactor4b(new SmartFactor());
|
||||||
|
smartFactor4b->add(measurements_cam4, views, model, K);
|
||||||
|
|
||||||
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
const SharedDiagonal noisePrior = noiseModel::Isotropic::Sigma(6, 0.10);
|
||||||
|
|
||||||
NonlinearFactorGraph graph;
|
NonlinearFactorGraph graph;
|
||||||
|
@ -505,7 +507,23 @@ TEST( SmartStereoProjectionPoseFactor, dynamicOutlierRejection ) {
|
||||||
values.insert(x2, pose2);
|
values.insert(x2, pose2);
|
||||||
values.insert(x3, pose3);
|
values.insert(x3, pose3);
|
||||||
|
|
||||||
// All factors are disabled and pose should remain where it is
|
EXPECT_DOUBLES_EQUAL(0, smartFactor1->error(values), 1e-9);
|
||||||
|
EXPECT_DOUBLES_EQUAL(0, smartFactor2->error(values), 1e-9);
|
||||||
|
EXPECT_DOUBLES_EQUAL(0, smartFactor3->error(values), 1e-9);
|
||||||
|
// zero error due to dynamic outlier rejection
|
||||||
|
EXPECT_DOUBLES_EQUAL(0, smartFactor4->error(values), 1e-9);
|
||||||
|
|
||||||
|
// dynamic outlier rejection is off
|
||||||
|
EXPECT_DOUBLES_EQUAL(6700, smartFactor4b->error(values), 1e-9);
|
||||||
|
|
||||||
|
// Factors 1-3 should have valid point, factor 4 should not
|
||||||
|
EXPECT(smartFactor1->point());
|
||||||
|
EXPECT(smartFactor2->point());
|
||||||
|
EXPECT(smartFactor3->point());
|
||||||
|
EXPECT(smartFactor4->point().degenerate());
|
||||||
|
EXPECT(smartFactor4b->point());
|
||||||
|
|
||||||
|
// Factor 4 is disabled, pose 3 stays put
|
||||||
Values result;
|
Values result;
|
||||||
LevenbergMarquardtOptimizer optimizer(graph, values, lm_params);
|
LevenbergMarquardtOptimizer optimizer(graph, values, lm_params);
|
||||||
result = optimizer.optimize();
|
result = optimizer.optimize();
|
||||||
|
|
Loading…
Reference in New Issue