gtsam
Loading...
Searching...
No Matches
NonlinearFactorGraph.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
19
20// \callgraph
21
22#pragma once
23
31
32#include <memory>
33#include <functional>
34
35namespace gtsam {
36
37 // Forward declarations
38 class Values;
39 class Ordering;
42 template<typename T>
43 class Expression;
44 template<typename T>
45 class ExpressionFactor;
46
57 class GTSAM_EXPORT NonlinearFactorGraph: public FactorGraph<NonlinearFactor> {
58
59 public:
60
62 typedef NonlinearFactorGraph This;
63 typedef std::shared_ptr<This> shared_ptr;
64
67
70
72 template<typename ITERATOR>
73 NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
74
76 template<class CONTAINER>
77 explicit NonlinearFactorGraph(const CONTAINER& factors) : Base(factors) {}
78
80 template<class DERIVEDFACTOR>
81 NonlinearFactorGraph(const FactorGraph<DERIVEDFACTOR>& graph) : Base(graph) {}
82
86
88 void print(
89 const std::string& str = "NonlinearFactorGraph: ",
90 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
91
93 void printErrors(const Values& values, const std::string& str = "NonlinearFactorGraph: ",
94 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
96 printCondition = FactorErrorPredicate{
97 [](const Factor*, double, size_t) { return true; }}) const;
98
100 bool equals(const NonlinearFactorGraph& other, double tol = 1e-9) const;
101
105
107 virtual double error(const Values& values) const;
108
110 double probPrime(const Values& values) const;
111
115 std::shared_ptr<SymbolicFactorGraph> symbolic() const;
116
120 Ordering orderingCOLAMD() const;
121
130 Ordering orderingCOLAMDConstrained(const FastMap<Key, int>& constraints) const;
131
133 virtual std::shared_ptr<GaussianFactorGraph> linearize(const Values& linearizationPoint) const;
134
136 virtual std::shared_ptr<const NonlinearFactorGraph> cloneShared() const {
137 return std::make_shared<NonlinearFactorGraph>(*this);
138 }
139
141 typedef std::function<void(const std::shared_ptr<HessianFactor>& hessianFactor)> Dampen;
142
150 std::shared_ptr<HessianFactor> linearizeToHessianFactor(
151 const Values& values, const Dampen& dampen = nullptr) const;
152
161 std::shared_ptr<HessianFactor> linearizeToHessianFactor(
162 const Values& values, const Ordering& ordering, const Dampen& dampen = nullptr) const;
163
166 Values updateCholesky(const Values& values,
167 const Dampen& dampen = nullptr) const;
168
171 Values updateCholesky(const Values& values, const Ordering& ordering,
172 const Dampen& dampen = nullptr) const;
173
176
186 NonlinearFactorGraph rekey(const std::map<Key,Key>& rekey_mapping) const;
187
194 template<typename T>
195 void addExpressionFactor(const SharedNoiseModel& R, const T& z,
196 const Expression<T>& h) {
198 }
199
206 template<typename T>
207 void addPrior(Key key, const T& prior,
208 const SharedNoiseModel& model = nullptr) {
209 emplace_shared<PriorFactor<T>>(key, prior, model);
210 }
211
222 template<typename T>
223 void addPrior(Key key, const T& prior, const Matrix& covariance) {
224 emplace_shared<PriorFactor<T>>(key, prior, covariance);
225 }
226
230
231 using FactorGraph::dot;
233
235 void dot(std::ostream& os, const Values& values,
236 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
237 const GraphvizFormatting& writer = GraphvizFormatting()) const;
238
240 std::string dot(
241 const Values& values,
242 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
243 const GraphvizFormatting& writer = GraphvizFormatting()) const;
244
246 void saveGraph(
247 const std::string& filename, const Values& values,
248 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
249 const GraphvizFormatting& writer = GraphvizFormatting()) const;
251
252 private:
253
258 std::shared_ptr<HessianFactor> linearizeToHessianFactor(
259 const Values& values, const Scatter& scatter, const Dampen& dampen = nullptr) const;
260
261#if GTSAM_ENABLE_BOOST_SERIALIZATION
263 friend class boost::serialization::access;
264 template<class ARCHIVE>
265 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
266 ar & boost::serialization::make_nvp("NonlinearFactorGraph",
267 boost::serialization::base_object<Base>(*this));
268 }
269#endif
270 };
271
273template<>
274struct traits<NonlinearFactorGraph> : public Testable<NonlinearFactorGraph> {
275};
276
277} //\ namespace gtsam
2D Point
Factor Graph Base Class.
Predicate used to filter factor-graph error output.
Graphviz formatter for NonlinearFactorGraph.
Base class for noise model factors with N variables.
Non-linear factor base classes.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
std::function< bool(const Factor *, double, std::size_t)> FactorErrorPredicate
Predicate used to select factor errors for graph diagnostics.
Definition FactorErrorPredicate.h:27
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:846
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:191
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
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
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition FactorGraph-inst.h:141
FactorGraph()
Definition FactorGraph.h:103
IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)
Definition FactorGraph.h:153
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition FactorGraph-inst.h:177
Definition Factor.h:71
Definition Ordering.h:33
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:77
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:46
Expression class that supports automatic differentiation.
Definition Expression.h:49
Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format.
Definition GraphvizFormatting.h:32
Definition NonlinearFactorGraph.h:57
NonlinearFactorGraph()
Default constructor.
Definition NonlinearFactorGraph.h:69
void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:207
virtual std::shared_ptr< const NonlinearFactorGraph > cloneShared() const
Clone into a shared pointer while preserving derived graph behavior.
Definition NonlinearFactorGraph.h:136
NonlinearFactorGraph rekey(const std::map< Key, Key > &rekey_mapping) const
Rekey() performs a deep-copy of all of the factors, and changes keys according to a mapping.
Definition NonlinearFactorGraph.cpp:414
NonlinearFactorGraph clone() const
Clone() performs a deep-copy of the graph, including all of the factors.
Definition NonlinearFactorGraph.cpp:402
NonlinearFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects).
Definition NonlinearFactorGraph.h:77
std::function< void(const std::shared_ptr< HessianFactor > &hessianFactor)> Dampen
typdef for dampen functions used below
Definition NonlinearFactorGraph.h:141
Values updateCholesky(const Values &values, const Dampen &dampen=nullptr) const
Linearize and solve in one pass.
Definition NonlinearFactorGraph.cpp:383
void addExpressionFactor(const SharedNoiseModel &R, const T &z, const Expression< T > &h)
Directly add ExpressionFactor that implements |h(x)-z|^2_R.
Definition NonlinearFactorGraph.h:195
void addPrior(Key key, const T &prior, const Matrix &covariance)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:223
NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition NonlinearFactorGraph.h:73
NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition NonlinearFactorGraph.h:81
std::shared_ptr< HessianFactor > linearizeToHessianFactor(const Values &values, const Dampen &dampen=nullptr) const
Instead of producing a GaussianFactorGraph, pre-allocate and linearize directly into a HessianFactor.
Definition NonlinearFactorGraph.cpp:374
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
Symbolic Factor Graph.
Definition SymbolicFactorGraph.h:64