gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
JacobianFactorSVD.h
1 /*
2  * @file JacobianFactorSVD.h
3  * @date Oct 27, 2013
4  * @uthor Frank Dellaert
5  */
6 
7 #pragma once
8 #include "gtsam/slam/JacobianSchurFactor.h"
9 
10 namespace gtsam {
14 template<size_t D>
16 
17 public:
18 
19  typedef Eigen::Matrix<double, 2, D> Matrix2D;
20  typedef std::pair<Key, Matrix2D> KeyMatrix2D;
21  typedef std::pair<Key, Matrix> KeyMatrix;
22 
25 
28  const SharedDiagonal& model = SharedDiagonal()) : JacobianSchurFactor<D>() {
29  Matrix zeroMatrix = Matrix::Zero(0,D);
30  Vector zeroVector = Vector::Zero(0);
31  std::vector<KeyMatrix> QF;
32  QF.reserve(keys.size());
33  BOOST_FOREACH(const Key& key, keys)
34  QF.push_back(KeyMatrix(key, zeroMatrix));
35  JacobianFactor::fillTerms(QF, zeroVector, model);
36  }
37 
39  JacobianFactorSVD(const std::vector<KeyMatrix2D>& Fblocks, const Matrix& Enull, const Vector& b,
40  const SharedDiagonal& model = SharedDiagonal()) : JacobianSchurFactor<D>() {
41  size_t numKeys = Enull.rows() / 2;
42  size_t j = 0, m2 = 2*numKeys-3;
43  // PLAIN NULL SPACE TRICK
44  // Matrix Q = Enull * Enull.transpose();
45  // BOOST_FOREACH(const KeyMatrix2D& it, Fblocks)
46  // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) * it.second));
47  // JacobianFactor factor(QF, Q * b);
48  std::vector<KeyMatrix> QF;
49  QF.reserve(numKeys);
50  BOOST_FOREACH(const KeyMatrix2D& it, Fblocks)
51  QF.push_back(KeyMatrix(it.first, (Enull.transpose()).block(0, 2 * j++, m2, 2) * it.second));
52  JacobianFactor::fillTerms(QF, Enull.transpose() * b, model);
53  }
54 };
55 
56 }
JacobianFactor for Schur complement that uses Q noise model.
Definition: JacobianFactorSVD.h:15
JacobianFactorSVD()
Default constructor.
Definition: JacobianFactorSVD.h:24
const FastVector< Key > & keys() const
Access the factor's involved variable keys.
Definition: Factor.h:115
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition: JacobianFactor-inl.h:60
size_t Key
Integer nonlinear key type.
Definition: types.h:59
JacobianFactorSVD(const std::vector< KeyMatrix2D > &Fblocks, const Matrix &Enull, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Constructor.
Definition: JacobianFactorSVD.h:39
JacobianFactor for Schur complement that uses Q noise model.
Definition: JacobianSchurFactor.h:22
JacobianFactorSVD(const FastVector< Key > &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition: JacobianFactorSVD.h:27