20#include <gtsam/config.h>
22#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V43
25#include <gtsam_unstable/dllexport.h>
37class GTSAM_UNSTABLE_EXPORT LinearizedGaussianFactor :
public NonlinearFactor {
40 typedef NonlinearFactor Base;
41 typedef LinearizedGaussianFactor This;
44 typedef std::shared_ptr<LinearizedGaussianFactor> shared_ptr;
54 LinearizedGaussianFactor() =
default;
60 LinearizedGaussianFactor(
const GaussianFactor::shared_ptr& gaussian,
const Values& lin_points);
62 ~LinearizedGaussianFactor()
override =
default;
65 const Values& linearizationPoint()
const {
return lin_points_; }
68#if GTSAM_ENABLE_BOOST_SERIALIZATION
70 friend class boost::serialization::access;
71 template<
class ARCHIVE>
72 void serialize(ARCHIVE & ar,
const unsigned int ) {
73 ar & boost::serialization::make_nvp(
"LinearizedGaussianFactor",
74 boost::serialization::base_object<Base>(*
this));
75 ar & BOOST_SERIALIZATION_NVP(lin_points_);
86class GTSAM_UNSTABLE_EXPORT LinearizedJacobianFactor :
public LinearizedGaussianFactor {
90 typedef LinearizedGaussianFactor Base;
91 typedef LinearizedJacobianFactor This;
94 typedef std::shared_ptr<LinearizedJacobianFactor> shared_ptr;
96 typedef VerticalBlockMatrix::Block ABlock;
97 typedef VerticalBlockMatrix::constBlock constABlock;
98 typedef VerticalBlockMatrix::Block::ColXpr BVector;
99 typedef VerticalBlockMatrix::constBlock::ConstColXpr constBVector;
108 VerticalBlockMatrix Ab_;
113 LinearizedJacobianFactor();
119 LinearizedJacobianFactor(
const JacobianFactor::shared_ptr& jacobian,
const Values& lin_points);
121 ~LinearizedJacobianFactor()
override {}
124 gtsam::NonlinearFactor::shared_ptr clone()
const override {
125 return std::static_pointer_cast<gtsam::NonlinearFactor>(
126 gtsam::NonlinearFactor::shared_ptr(
new This(*
this))); }
131 void print(
const std::string& s=
"",
const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const override;
134 bool equals(
const NonlinearFactor& expected,
double tol = 1e-9)
const override;
137 const constBVector b()
const {
return Ab_(size()).col(0); }
138 const constABlock A()
const {
return Ab_.range(0, size()); }
139 const constABlock A(Key key)
const {
return Ab_(std::find(begin(), end(), key) - begin()); }
142 size_t dim()
const override {
return Ab_.rows(); }
145 double error(
const Values& c)
const override;
152 std::shared_ptr<GaussianFactor> linearize(
const Values& c)
const override;
155 Vector error_vector(
const Values& c)
const;
158#if GTSAM_ENABLE_BOOST_SERIALIZATION
159 friend class boost::serialization::access;
161 template<
class ARCHIVE>
162 void serialize(ARCHIVE & ar,
const unsigned int ) {
163 ar & boost::serialization::make_nvp(
"LinearizedJacobianFactor",
164 boost::serialization::base_object<Base>(*
this));
165 ar & BOOST_SERIALIZATION_NVP(Ab_);
172struct traits<LinearizedJacobianFactor> :
public Testable<LinearizedJacobianFactor> {
180class GTSAM_UNSTABLE_EXPORT LinearizedHessianFactor :
public LinearizedGaussianFactor {
184 typedef LinearizedGaussianFactor Base;
185 typedef LinearizedHessianFactor This;
188 typedef std::shared_ptr<LinearizedHessianFactor> shared_ptr;
191 typedef SymmetricBlockMatrix::Block Block;
192 typedef SymmetricBlockMatrix::constBlock constBlock;
194 typedef SymmetricBlockMatrix::Block::ColXpr Column;
195 typedef SymmetricBlockMatrix::constBlock::ColXpr constColumn;
199 SymmetricBlockMatrix info_;
205 LinearizedHessianFactor();
212 LinearizedHessianFactor(
const HessianFactor::shared_ptr& hessian,
const Values& lin_points);
214 ~LinearizedHessianFactor()
override {}
217 gtsam::NonlinearFactor::shared_ptr clone()
const override {
218 return std::static_pointer_cast<gtsam::NonlinearFactor>(
219 gtsam::NonlinearFactor::shared_ptr(
new This(*
this))); }
224 void print(
const std::string& s=
"",
const KeyFormatter& keyFormatter = DefaultKeyFormatter)
const override;
227 bool equals(
const NonlinearFactor& expected,
double tol = 1e-9)
const override;
232 double constantTerm()
const {
233 const auto block = info_.diagonalBlock(size());
241 constColumn linearTerm(const_iterator j)
const {
242 return info_.aboveDiagonalRange(j - begin(), size(), size(), size() + 1).col(0);
247 constColumn linearTerm()
const {
248 return info_.aboveDiagonalRange(0, size(), size(), size() + 1).col(0);
261 Matrix squaredTerm(const_iterator j1, const_iterator j2)
const {
264 return info_.block(J1, J2);
271 Eigen::SelfAdjointView<constBlock, Eigen::Upper> squaredTerm()
const {
272 return info_.selfadjointView(0, size());
276 size_t dim()
const override {
return info_.rows() - 1; }
279 double error(
const Values& c)
const override;
286 std::shared_ptr<GaussianFactor> linearize(
const Values& c)
const override;
290#if GTSAM_ENABLE_BOOST_SERIALIZATION
291 friend class boost::serialization::access;
292 template<
class ARCHIVE>
293 void serialize(ARCHIVE & ar,
const unsigned int ) {
294 ar & boost::serialization::make_nvp(
"LinearizedHessianFactor",
295 boost::serialization::base_object<Base>(*
this));
296 ar & BOOST_SERIALIZATION_NVP(info_);
303struct traits<LinearizedHessianFactor> :
public Testable<LinearizedHessianFactor> {
Contains the HessianFactor class, a general quadratic factor.
Non-linear factor base classes.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:49
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152
Nonlinear factor base class.
Definition NonlinearFactor.h:70