diff --git a/gtsam/nonlinear/ISAM2.cpp b/gtsam/nonlinear/ISAM2.cpp index 82bc67769..f86378856 100644 --- a/gtsam/nonlinear/ISAM2.cpp +++ b/gtsam/nonlinear/ISAM2.cpp @@ -781,6 +781,7 @@ void ISAM2::marginalizeLeaves(const FastList& leafKeysList) if(marginalizeEntireClique) { // Remove the whole clique and its subtree, and keep the marginal factor. GaussianFactor::shared_ptr marginalFactor = clique->cachedFactor(); + marginalFactor->print("marginalFactor: "); // We do not need the marginal factors associated with this clique // because their information is already incorporated in the new // marginal factor. So, now associate this marginal factor with the diff --git a/gtsam/nonlinear/ISAM2.h b/gtsam/nonlinear/ISAM2.h index 9de4ccf7f..9b119401a 100644 --- a/gtsam/nonlinear/ISAM2.h +++ b/gtsam/nonlinear/ISAM2.h @@ -399,7 +399,7 @@ private: */ class GTSAM_EXPORT ISAM2: public BayesTree { -protected: +public: /** The current linearization point */ Values theta_; diff --git a/tests/testGaussianISAM2.cpp b/tests/testGaussianISAM2.cpp index 3c8b5ce71..30f8d08bf 100644 --- a/tests/testGaussianISAM2.cpp +++ b/tests/testGaussianISAM2.cpp @@ -623,16 +623,15 @@ namespace { toKeep.push_back(j); // Calculate expected marginal from iSAM2 tree - expectedAugmentedHessian = GaussianFactorGraph(isam).marginal(toKeep)->augmentedHessian(); + expectedAugmentedHessian = GaussianFactorGraph(isam).marginal(toKeep, EliminateQR)->augmentedHessian(); - //// Calculate expected marginal from cached linear factors - //assert(isam.params().cacheLinearizedFactors); - //GaussianSequentialSolver solver2(isam.linearFactors_, isam.params().factorization == ISAM2Params::QR); - //expected2AugmentedHessian = solver2.jointFactorGraph(toKeep)->augmentedHessian(); + // Calculate expected marginal from cached linear factors + assert(isam.params().cacheLinearizedFactors); + Matrix expected2AugmentedHessian = isam.linearFactors_.marginal(toKeep, EliminateQR)->augmentedHessian(); // Calculate expected marginal from original nonlinear factors expected3AugmentedHessian = isam.getFactorsUnsafe().linearize(isam.getLinearizationPoint()) - ->marginal(toKeep)->augmentedHessian(); + ->marginal(toKeep, EliminateQR)->augmentedHessian(); // Do marginalization isam.marginalizeLeaves(leafKeys); @@ -648,7 +647,7 @@ namespace { // Check full marginalization //cout << "treeEqual" << endl; bool treeEqual = assert_equal(expectedAugmentedHessian, actualAugmentedHessian, 1e-6); - //bool linEqual = assert_equal(expected2AugmentedHessian, actualAugmentedHessian, 1e-6); + bool linEqual = assert_equal(expected2AugmentedHessian, actualAugmentedHessian, 1e-6); //cout << "nonlinEqual" << endl; bool nonlinEqual = assert_equal(expected3AugmentedHessian, actualAugmentedHessian, 1e-6); //bool linCorrect = assert_equal(expected3AugmentedHessian, expected2AugmentedHessian, 1e-6); @@ -656,7 +655,7 @@ namespace { //cout << "nonlinCorrect" << endl; actual3AugmentedHessian.bottomRightCorner(1,1) = expected3AugmentedHessian.bottomRightCorner(1,1); bool afterNonlinCorrect = assert_equal(expected3AugmentedHessian, actual3AugmentedHessian, 1e-6); - bool ok = treeEqual && /*linEqual &&*/ nonlinEqual && /*linCorrect &&*/ /*afterLinCorrect &&*/ afterNonlinCorrect; + bool ok = treeEqual && linEqual && nonlinEqual && /*linCorrect &&*/ /*afterLinCorrect &&*/ afterNonlinCorrect; return ok; } }