gtsam
Loading...
Searching...
No Matches
LinearContainerFactor.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include <gtsam/base/std_optional_serialization.h>
14
15#include <optional>
16
17namespace gtsam {
18
19 // Forward declarations
20 class JacobianFactor;
21 class HessianFactor;
22
29class GTSAM_EXPORT LinearContainerFactor : public NonlinearFactor {
30protected:
31
33 std::optional<Values> linearizationPoint_;
34
36 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const std::optional<Values>& linearizationPoint);
37
38 // Some handy typedefs
39 typedef NonlinearFactor Base;
40 typedef LinearContainerFactor This;
41
42public:
43
44 typedef std::shared_ptr<This> shared_ptr;
45
48
50 LinearContainerFactor(const JacobianFactor& factor, const Values& linearizationPoint = Values());
51
53 LinearContainerFactor(const HessianFactor& factor, const Values& linearizationPoint = Values());
54
56 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const Values& linearizationPoint = Values());
57
58 // Access
59
60 const GaussianFactor::shared_ptr& factor() const { return factor_; }
61
62 // Testable
63
65 void print(const std::string& s = "", const KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
66
68 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
69
70 // NonlinearFactor
71
80 double error(const Values& c) const override;
81
83 size_t dim() const override;
84
86 const std::optional<Values>& linearizationPoint() const { return linearizationPoint_; }
87
104 GaussianFactor::shared_ptr linearize(const Values& c) const override;
105
109 GaussianFactor::shared_ptr negateToGaussian() const;
110
114 NonlinearFactor::shared_ptr negateToNonlinear() const;
115
122 NonlinearFactor::shared_ptr clone() const override {
123 return NonlinearFactor::shared_ptr(new LinearContainerFactor(factor_,linearizationPoint_));
124 }
125
131 NonlinearFactor::shared_ptr rekey(
132 const std::map<Key, Key>& rekey_mapping) const override;
133
138 NonlinearFactor::shared_ptr rekey(const KeyVector& new_keys) const override;
139
141 inline bool hasLinearizationPoint() const { return linearizationPoint_.has_value(); }
142
146 bool isJacobian() const;
147 bool isHessian() const;
148
150 std::shared_ptr<JacobianFactor> toJacobian() const;
151
153 std::shared_ptr<HessianFactor> toHessian() const;
154
159 static NonlinearFactorGraph ConvertLinearGraph(const GaussianFactorGraph& linear_graph,
160 const Values& linearizationPoint = Values());
161
162 protected:
163 void initializeLinearizationPoint(const Values& linearizationPoint);
164
165 private:
166#if GTSAM_ENABLE_BOOST_SERIALIZATION
168 friend class boost::serialization::access;
169 template<class ARCHIVE>
170 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
171 ar & boost::serialization::make_nvp("NonlinearFactor",
172 boost::serialization::base_object<Base>(*this));
173 ar & BOOST_SERIALIZATION_NVP(factor_);
174 ar & BOOST_SERIALIZATION_NVP(linearizationPoint_);
175 }
176#endif
177
178}; // \class LinearContainerFactor
179
180template<> struct traits<LinearContainerFactor> : public Testable<LinearContainerFactor> {};
181
182} // \namespace gtsam
183
Factor Graph consisting of non-linear factors.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:91
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
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
A Gaussian factor using the canonical parameters (information form).
Definition HessianFactor.h:101
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:92
Dummy version of a generic linear factor to be injected into a nonlinear factor graph.
Definition LinearContainerFactor.h:29
NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition LinearContainerFactor.h:122
LinearContainerFactor()
Default constructor - necessary for serialization.
Definition LinearContainerFactor.h:47
const std::optional< Values > & linearizationPoint() const
Extract the linearization point used in recalculating error.
Definition LinearContainerFactor.h:86
bool hasLinearizationPoint() const
Casting syntactic sugar.
Definition LinearContainerFactor.h:141
LinearContainerFactor(const GaussianFactor::shared_ptr &factor, const std::optional< Values > &linearizationPoint)
direct copy constructor
Definition LinearContainerFactor.cpp:29
NonlinearFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:86
Definition NonlinearFactorGraph.h:57
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...