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