dcsam
Factored inference for discrete-continuous smoothing and mapping
DCSAM.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/discrete/DiscreteKey.h>
13 #include <gtsam/discrete/DiscreteMarginals.h>
14 #include <gtsam/inference/FactorGraph.h>
15 #include <gtsam/inference/Symbol.h>
16 #include <gtsam/nonlinear/ISAM2.h>
17 #include <gtsam/nonlinear/Marginals.h>
18 #include <gtsam/nonlinear/NonlinearFactorGraph.h>
19 
20 #include <map>
21 #include <set>
22 #include <tuple>
23 #include <utility>
24 #include <vector>
25 
27 #include "dcsam/DCFactor.h"
28 #include "dcsam/DCFactorGraph.h"
29 #include "dcsam/DCSAM_types.h"
31 
32 namespace dcsam {
33 
34 class DCSAM {
35  public:
36  DCSAM();
37 
38  explicit DCSAM(const gtsam::ISAM2Params &isam_params);
39 
77  void update(const gtsam::NonlinearFactorGraph &graph,
78  const gtsam::DiscreteFactorGraph &dfg, const DCFactorGraph &dcfg,
79  const gtsam::Values &initialGuessContinuous = gtsam::Values(),
80  const DiscreteValues &initialGuessDiscrete = DiscreteValues());
81 
91  void update(const HybridFactorGraph &hfg,
92  const gtsam::Values &initialGuessContinuous = gtsam::Values(),
93  const DiscreteValues &initialGuessDiscrete = DiscreteValues());
94 
99  inline void update(const HybridFactorGraph &hfg,
100  const DiscreteValues &initialGuessDiscrete) {
101  update(hfg, gtsam::Values(), initialGuessDiscrete);
102  }
103 
108  void update();
109 
122  void updateDiscrete(const gtsam::DiscreteFactorGraph &graph,
123  const gtsam::Values &continuousVals,
124  const DiscreteValues &discreteVals);
125 
136  void updateDiscreteInfo(const gtsam::Values &continuousVals,
137  const DiscreteValues &discreteVals);
138 
149  void updateContinuous();
150 
161  void updateContinuousInfo(const DiscreteValues &discreteVals,
162  const gtsam::NonlinearFactorGraph &newFactors,
163  const gtsam::Values &initialGuess);
164 
173 
184  DCValues calculateEstimate() const;
185 
198  DCMarginals getMarginals(const gtsam::NonlinearFactorGraph &graph,
199  const gtsam::Values &continuousEst,
200  const gtsam::DiscreteFactorGraph &dfg);
201 
202  gtsam::DiscreteFactorGraph getDiscreteFactorGraph() const { return dfg_; }
203 
204  gtsam::NonlinearFactorGraph getNonlinearFactorGraph() const {
205  return isam_.getFactorsUnsafe();
206  }
207 
208  private:
209  // Global factor graph and iSAM2 instance
210  gtsam::NonlinearFactorGraph fg_; // NOTE: unused
211  gtsam::ISAM2Params isam_params_;
212  gtsam::ISAM2 isam_;
213  gtsam::DiscreteFactorGraph dfg_;
214  gtsam::Values currContinuous_;
215  DiscreteValues currDiscrete_;
216 
217 
218  std::vector<DCContinuousFactor::shared_ptr> dcContinuousFactors_;
219  gtsam::FastVector<gtsam::DiscreteFactor::shared_ptr> dcDiscreteFactors_;
220 };
221 } // namespace dcsam
Custom discrete-continuous factor.
Custom discrete-continuous factor.
Simple class for factor graphs of DCFactor type.
Some convenient types for DCSAM.
Custom hybrid factor graph for discrete + continuous factors.
Definition: DCFactorGraph.h:18
Definition: DCSAM.h:34
void updateDiscrete(const gtsam::DiscreteFactorGraph &graph, const gtsam::Values &continuousVals, const DiscreteValues &discreteVals)
Definition: DCSAM.cpp:113
void updateContinuousInfo(const DiscreteValues &discreteVals, const gtsam::NonlinearFactorGraph &newFactors, const gtsam::Values &initialGuess)
Definition: DCSAM.cpp:139
DCValues calculateEstimate() const
Definition: DCSAM.cpp:161
void update()
Definition: DCSAM.cpp:108
DCMarginals getMarginals(const gtsam::NonlinearFactorGraph &graph, const gtsam::Values &continuousEst, const gtsam::DiscreteFactorGraph &dfg)
Definition: DCSAM.cpp:171
gtsam::DiscreteFactorGraph getDiscreteFactorGraph() const
Definition: DCSAM.h:202
DiscreteValues solveDiscrete() const
Definition: DCSAM.cpp:156
DCSAM()
Definition: DCSAM.cpp:17
void updateDiscreteInfo(const gtsam::Values &continuousVals, const DiscreteValues &discreteVals)
Definition: DCSAM.cpp:123
gtsam::NonlinearFactorGraph getNonlinearFactorGraph() const
Definition: DCSAM.h:204
void updateContinuous()
Definition: DCSAM.cpp:134
void update(const HybridFactorGraph &hfg, const DiscreteValues &initialGuessDiscrete)
Definition: DCSAM.h:99
Definition: HybridFactorGraph.h:23
Definition: DCContinuousFactor.h:24
gtsam::DiscreteFactor::Values DiscreteValues
Definition: DCSAM_types.h:19
Definition: DCSAM_types.h:29
Definition: DCSAM_types.h:21