57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
|  | /**
 | ||
|  |  * @file corruptInitialization.h | ||
|  |  * | ||
|  |  * @brief Utilities for using noisemodels to corrupt given initialization value | ||
|  |  *  | ||
|  |  * @date Jun 22, 2012 | ||
|  |  * @author Alex Cunningham | ||
|  |  */ | ||
|  | 
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include <gtsam/linear/Sampler.h>
 | ||
|  | 
 | ||
|  | namespace gtsam { | ||
|  | 
 | ||
|  | /** given a noisemodel and a measurement, add noise to the measurement */ | ||
|  | template<typename T> | ||
|  | T corruptWithNoise(const T& init, | ||
|  |     const noiseModel::Base::shared_ptr& model, Sampler& sampler) { | ||
|  |   Vector n = zero(model->dim()); | ||
|  |   noiseModel::Diagonal::shared_ptr | ||
|  |     diag_model = boost::dynamic_pointer_cast<noiseModel::Diagonal>(model); | ||
|  |   if (diag_model) | ||
|  |     n = sampler.sampleNewModel(diag_model); | ||
|  |   return init.retract(n); | ||
|  | } | ||
|  | 
 | ||
|  | // specialization for doubles - just adds, rather than retract
 | ||
|  | template<> | ||
|  | inline double corruptWithNoise<double>(const double& init, | ||
|  |     const noiseModel::Base::shared_ptr& model, Sampler& sampler) { | ||
|  |   double n = 0.0; | ||
|  |   noiseModel::Diagonal::shared_ptr | ||
|  |     diag_model = boost::dynamic_pointer_cast<noiseModel::Diagonal>(model); | ||
|  |   if (diag_model) | ||
|  |     n = sampler.sampleNewModel(diag_model)(0); | ||
|  |   return init + n; | ||
|  | } | ||
|  | 
 | ||
|  | // specialization for doubles - just adds, rather than retract
 | ||
|  | template<> | ||
|  | inline Vector corruptWithNoise<Vector>(const Vector& init, | ||
|  |     const noiseModel::Base::shared_ptr& model, Sampler& sampler) { | ||
|  |   Vector n = zero(init.size()); | ||
|  |   noiseModel::Diagonal::shared_ptr | ||
|  |     diag_model = boost::dynamic_pointer_cast<noiseModel::Diagonal>(model); | ||
|  |   if (diag_model) | ||
|  |     n = sampler.sampleNewModel(diag_model); | ||
|  |   return init + n; | ||
|  | } | ||
|  | 
 | ||
|  | } // \namespace gtsam
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |