dcsam
Factored inference for discrete-continuous smoothing and mapping
HybridFactorGraph.h
Go to the documentation of this file.
1 
8 #pragma once
9 
10 #include <gtsam/discrete/DiscreteFactor.h>
11 #include <gtsam/discrete/DiscreteFactorGraph.h>
12 #include <gtsam/nonlinear/NonlinearFactor.h>
13 #include <gtsam/nonlinear/NonlinearFactorGraph.h>
14 
15 #include <string>
16 
17 #include "DCSAM_types.h"
18 #include "dcsam/DCFactor.h"
19 #include "dcsam/DCFactorGraph.h"
20 
21 namespace dcsam {
22 
24  protected:
25  // Separate internal factor graphs for different types of factors
26  gtsam::NonlinearFactorGraph nonlinearGraph_;
27  gtsam::DiscreteFactorGraph discreteGraph_;
29 
30  public:
32 
37  template <typename NonlinearFactorType>
38  void push_nonlinear(const NonlinearFactorType &nonlinearFactor) {
39  nonlinearGraph_.push_back(
40  boost::make_shared<NonlinearFactorType>(nonlinearFactor));
41  }
42 
47  void push_nonlinear(
48  boost::shared_ptr<gtsam::NonlinearFactor> nonlinearFactor);
49 
54  template <typename DiscreteFactorType>
55  void push_discrete(const DiscreteFactorType &discreteFactor) {
56  discreteGraph_.push_back(
57  boost::make_shared<DiscreteFactorType>(discreteFactor));
58  }
59 
64  void push_discrete(boost::shared_ptr<gtsam::DiscreteFactor> discreteFactor);
65 
70  template <typename DCFactorType>
71  void push_dc(const DCFactorType &dcFactor) {
72  dcGraph_.push_back(boost::make_shared<DCFactorType>(dcFactor));
73  }
74 
79  void push_dc(boost::shared_ptr<DCFactor> dcFactor);
80 
84  void print(const std::string &str = "HybridFactorGraph",
85  const gtsam::KeyFormatter &keyFormatter =
86  gtsam::DefaultKeyFormatter) const;
87 
95  gtsam::FastSet<gtsam::Key> keys() const;
96 
101  gtsam::NonlinearFactorGraph nonlinearGraph() const;
102 
107  gtsam::DiscreteFactorGraph discreteGraph() const;
108 
113  DCFactorGraph dcGraph() const;
114 
118  bool empty() const;
119 
123  bool equals(const HybridFactorGraph &other, double tol = 1e-9) const;
124 
128  size_t size() const;
129 
133  size_t size_nonlinear() const;
134 
138  size_t size_discrete() const;
139 
143  size_t size_dc() const;
144 
148  void clear();
149 };
150 
151 } // namespace dcsam
Custom discrete-continuous factor.
Simple class for factor graphs of DCFactor type.
Some convenient types for DCSAM.
Definition: DCFactorGraph.h:18
Definition: HybridFactorGraph.h:23
size_t size() const
Definition: HybridFactorGraph.cpp:69
void push_nonlinear(const NonlinearFactorType &nonlinearFactor)
Definition: HybridFactorGraph.h:38
gtsam::DiscreteFactorGraph discreteGraph_
Definition: HybridFactorGraph.h:27
size_t size_nonlinear() const
Definition: HybridFactorGraph.cpp:73
DCFactorGraph dcGraph() const
Definition: HybridFactorGraph.cpp:56
size_t size_dc() const
Definition: HybridFactorGraph.cpp:81
bool empty() const
Definition: HybridFactorGraph.cpp:58
gtsam::FastSet< gtsam::Key > keys() const
Definition: HybridFactorGraph.cpp:39
void clear()
Definition: HybridFactorGraph.cpp:83
gtsam::DiscreteFactorGraph discreteGraph() const
Definition: HybridFactorGraph.cpp:52
size_t size_discrete() const
Definition: HybridFactorGraph.cpp:77
gtsam::NonlinearFactorGraph nonlinearGraph_
Definition: HybridFactorGraph.h:26
HybridFactorGraph()
Definition: HybridFactorGraph.cpp:12
void push_discrete(const DiscreteFactorType &discreteFactor)
Definition: HybridFactorGraph.h:55
void push_dc(const DCFactorType &dcFactor)
Definition: HybridFactorGraph.h:71
bool equals(const HybridFactorGraph &other, double tol=1e-9) const
Definition: HybridFactorGraph.cpp:62
void print(const std::string &str="HybridFactorGraph", const gtsam::KeyFormatter &keyFormatter=gtsam::DefaultKeyFormatter) const
Definition: HybridFactorGraph.cpp:28
gtsam::NonlinearFactorGraph nonlinearGraph() const
Definition: HybridFactorGraph.cpp:48
DCFactorGraph dcGraph_
Definition: HybridFactorGraph.h:28
Definition: DCContinuousFactor.h:24
const double tol
Definition: testDCSAM.cpp:40