67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
/**
 | 
						|
 * @file DummyFactor.cpp
 | 
						|
 *
 | 
						|
 * @date Sep 10, 2012
 | 
						|
 * @author Alex Cunningham
 | 
						|
 */
 | 
						|
 | 
						|
#include <gtsam_unstable/slam/DummyFactor.h>
 | 
						|
 | 
						|
#include <boost/assign/list_of.hpp>
 | 
						|
 | 
						|
using namespace boost::assign;
 | 
						|
 | 
						|
namespace gtsam {
 | 
						|
 | 
						|
/* ************************************************************************* */
 | 
						|
DummyFactor::DummyFactor(const Key& key1, size_t dim1, const Key& key2, size_t dim2)
 | 
						|
: NonlinearFactor(cref_list_of<2>(key1)(key2))
 | 
						|
{
 | 
						|
  dims_.push_back(dim1);
 | 
						|
  dims_.push_back(dim2);
 | 
						|
  if (dim1 > dim2)
 | 
						|
    rowDim_ = dim1;
 | 
						|
  else
 | 
						|
    rowDim_ = dim2;
 | 
						|
}
 | 
						|
 | 
						|
/* ************************************************************************* */
 | 
						|
void DummyFactor::print(const std::string& s, const KeyFormatter& keyFormatter) const {
 | 
						|
  std::cout << s << "  DummyFactor dim = " << rowDim_ << ", keys = { ";
 | 
						|
  for(Key key: this->keys()) { std::cout << keyFormatter(key) << " "; }
 | 
						|
  std::cout << "}" << std::endl;
 | 
						|
}
 | 
						|
 | 
						|
/* ************************************************************************* */
 | 
						|
bool DummyFactor::equals(const NonlinearFactor& f, double tol) const {
 | 
						|
  const DummyFactor* e = dynamic_cast<const DummyFactor*>(&f);
 | 
						|
  return e && Base::equals(f, tol) && dims_ == e->dims_ && rowDim_ == e->rowDim_;
 | 
						|
}
 | 
						|
 | 
						|
/* ************************************************************************* */
 | 
						|
boost::shared_ptr<GaussianFactor>
 | 
						|
DummyFactor::linearize(const Values& c) const {
 | 
						|
  // Only linearize if the factor is active
 | 
						|
  if (!this->active(c))
 | 
						|
    return boost::shared_ptr<JacobianFactor>();
 | 
						|
 | 
						|
   // Fill in terms with zero matrices
 | 
						|
  std::vector<std::pair<Key, Matrix> > terms(this->size());
 | 
						|
  for(size_t j=0; j<this->size(); ++j) {
 | 
						|
    terms[j].first = keys()[j];
 | 
						|
    terms[j].second = Matrix::Zero(rowDim_, dims_[j]);
 | 
						|
  }
 | 
						|
 | 
						|
  noiseModel::Diagonal::shared_ptr model = noiseModel::Unit::Create(rowDim_);
 | 
						|
  return GaussianFactor::shared_ptr(
 | 
						|
      new JacobianFactor(terms, Vector::Zero(rowDim_), model));
 | 
						|
}
 | 
						|
 | 
						|
/* ************************************************************************* */
 | 
						|
 | 
						|
} // \namespace gtsam
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |