gtsam
Loading...
Searching...
No Matches
LocationRecovery.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010-2020, 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
12#pragma once
13
21
22#include <gtsam/geometry/Unit3.h>
26
27#include <random>
28#include <set>
29#include <vector>
30
31namespace gtsam {
32
33// Recover absolute Point3 locations from pairwise Unit3 direction
34// measurements. This base class is unopinionated about graph structure:
35// measurements can connect any pair of Point3 unknowns (cameras, landmarks,
36// sensors, etc.). Subclasses add problem-specific opinions:
37// - GlobalPositioner: bipartite camera+landmark, anchor-only gauge.
38// - TranslationRecovery: homogeneous camera-camera, DSFMap, two-key gauge.
39//
40// Supports two cost functions via the bilinear flag:
41// false — TranslationFactor: normalized(Tb-Ta) - measured (chordal)
42// true — BilinearAngleTranslationFactor: scale*(Tb-Ta) - measured (BATA)
43class GTSAM_EXPORT LocationRecovery {
44 public:
45 using DirectionEdges = std::vector<BinaryMeasurement<Unit3>>;
46
47 protected:
49
52 const SharedNoiseModel &unit3NoiseModel);
53
54 public:
59 : lmParams_(lmParams) {}
60
64 LocationRecovery() = default;
65
77 NonlinearFactorGraph buildGraph(const DirectionEdges &edges,
78 bool bilinear = true) const;
79
86 void addAnchorPrior(
87 Key anchorKey, NonlinearFactorGraph *graph,
88 const SharedNoiseModel &priorNoiseModel =
89 noiseModel::Isotropic::Sigma(3, 0.01)) const;
90
104 Values initializeRandomly(const std::set<Key> &keys, size_t numEdges,
105 bool bilinear, std::mt19937 *rng,
106 const Values &initialValues = Values()) const;
107
111 Values initializeRandomly(const std::set<Key> &keys, size_t numEdges,
112 bool bilinear,
113 const Values &initialValues = Values()) const;
114};
115
116} // namespace gtsam
A non-templated config holding any types of Manifold-group elements.
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
Global functions in a separate testing namespace.
Definition chartTesting.h:28
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:846
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)
An isotropic noise model created by specifying a standard deviation sigma.
Definition NoiseModel.cpp:706
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:36
Definition NonlinearFactorGraph.h:57
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
LocationRecovery(const LevenbergMarquardtParams &lmParams)
Construct with LM parameters.
Definition LocationRecovery.h:58
Values initializeRandomly(const std::set< Key > &keys, size_t numEdges, bool bilinear, std::mt19937 *rng, const Values &initialValues=Values()) const
Random initialization of Point3 keys and BATA scale variables.
Definition LocationRecovery.cpp:82
void addAnchorPrior(Key anchorKey, NonlinearFactorGraph *graph, const SharedNoiseModel &priorNoiseModel=noiseModel::Isotropic::Sigma(3, 0.01)) const
Add a prior pinning one key to the origin.
Definition LocationRecovery.cpp:76
LocationRecovery()=default
Default constructor.
NonlinearFactorGraph buildGraph(const DirectionEdges &edges, bool bilinear=true) const
Build factor graph from direction measurements.
Definition LocationRecovery.cpp:58
static SharedNoiseModel convertNoiseModel(const SharedNoiseModel &unit3NoiseModel)
Convert Unit3 (2D manifold) noise to Point3 (3D ambient) noise.
Definition LocationRecovery.cpp:41