Added ISAM2::marginalCovariance function.
parent
e1b24acc96
commit
77a1e9a485
|
@ -1018,6 +1018,13 @@ Values ISAM2::calculateEstimate() const {
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Matrix ISAM2::marginalCovariance(Index key) const {
|
||||
return marginalFactor(ordering_[key],
|
||||
params_.factorization == ISAM2Params::QR ? EliminateQR : EliminatePreferCholesky)
|
||||
->information().inverse();
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Values ISAM2::calculateBestEstimate() const {
|
||||
VectorValues delta(theta_.dims(ordering_));
|
||||
|
|
|
@ -585,6 +585,9 @@ public:
|
|||
template<class VALUE>
|
||||
VALUE calculateEstimate(Key key) const;
|
||||
|
||||
/** Return marginal on any variable as a covariance matrix */
|
||||
GTSAM_EXPORT Matrix marginalCovariance(Index key) const;
|
||||
|
||||
/// @name Public members for non-typical usage
|
||||
/// @{
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include <gtsam/nonlinear/Values.h>
|
||||
#include <gtsam/nonlinear/NonlinearFactorGraph.h>
|
||||
#include <gtsam/nonlinear/ISAM2.h>
|
||||
#include <gtsam/nonlinear/Marginals.h>
|
||||
#include <gtsam/slam/PriorFactor.h>
|
||||
#include <gtsam/slam/BetweenFactor.h>
|
||||
#include <gtsam/slam/BearingRangeFactor.h>
|
||||
|
@ -1027,6 +1028,18 @@ TEST_UNSAFE(ISAM2, marginalizeLeaves5)
|
|||
EXPECT(checkMarginalizeLeaves(isam, marginalizeKeys));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
TEST(ISAM2, marginalCovariance)
|
||||
{
|
||||
// Create isam2
|
||||
ISAM2 isam = createSlamlikeISAM2();
|
||||
|
||||
// Check marginal
|
||||
Matrix expected = Marginals(isam.getFactorsUnsafe(), isam.getLinearizationPoint()).marginalCovariance(5);
|
||||
Matrix actual = isam.marginalCovariance(5);
|
||||
EXPECT(assert_equal(expected, actual));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
int main() { TestResult tr; return TestRegistry::runAllTests(tr);}
|
||||
/* ************************************************************************* */
|
||||
|
|
Loading…
Reference in New Issue