gtsam 4.1.1
gtsam
JacobianFactorSVD.h
1/*
2 * @file JacobianFactorSVD.h
3 * @date Oct 27, 2013
4 * @uthor Frank Dellaert
5 */
6
7#pragma once
9
10namespace gtsam {
28template<size_t D, size_t ZDim>
30
32 typedef Eigen::Matrix<double, ZDim, D> MatrixZD; // e.g 2 x 6 with Z=Point2
33 typedef std::pair<Key, Matrix> KeyMatrix;
34
35public:
36
39 }
40
43 const SharedDiagonal& model = SharedDiagonal())
44 : Base() {
45 Matrix zeroMatrix = Matrix::Zero(0, D);
46 Vector zeroVector = Vector::Zero(0);
47 std::vector<KeyMatrix> QF;
48 QF.reserve(keys.size());
49 for(const Key& key: keys)
50 QF.push_back(KeyMatrix(key, zeroMatrix));
51 JacobianFactor::fillTerms(QF, zeroVector, model);
52 }
53
65 const KeyVector& keys,
66 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& Fblocks,
67 const Matrix& Enull, const Vector& b,
68 const SharedDiagonal& model = SharedDiagonal())
69 : Base() {
70 size_t numKeys = Enull.rows() / ZDim;
71 size_t m2 = ZDim * numKeys - 3; // TODO: is this not just Enull.rows()?
72 // PLAIN nullptr SPACE TRICK
73 // Matrix Q = Enull * Enull.transpose();
74 // for(const KeyMatrixZD& it: Fblocks)
75 // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) * it.second));
76 // JacobianFactor factor(QF, Q * b);
77 std::vector<KeyMatrix> QF;
78 QF.reserve(numKeys);
79 for (size_t k = 0; k < Fblocks.size(); ++k) {
80 Key key = keys[k];
81 QF.emplace_back(
82 key, (Enull.transpose()).block(0, ZDim * k, m2, ZDim) * Fblocks[k]);
83 }
84 JacobianFactor::fillTerms(QF, Enull.transpose() * b, model);
85 }
86};
87
88}
JacobianFactor class with fixed sized blcoks.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:69
This is the base class for all factor types.
Definition: Factor.h:56
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition: Factor.h:125
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition: JacobianFactor-inl.h:60
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition: RegularJacobianFactor.h:32
JacobianFactor for Schur complement that uses the "Nullspace Trick" by Mourikis et al.
Definition: JacobianFactorSVD.h:29
JacobianFactorSVD()
Default constructor.
Definition: JacobianFactorSVD.h:38
JacobianFactorSVD(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &Fblocks, const Matrix &Enull, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Construct a new JacobianFactorSVD object, createing a reduced-rank Jacobian factor on the CameraSet.
Definition: JacobianFactorSVD.h:64
JacobianFactorSVD(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition: JacobianFactorSVD.h:42