gtsam
Loading...
Searching...
No Matches
GlobalPositioner.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
23
24#include <set>
25
26namespace gtsam {
27
28// Opinionated composition of LocationRecovery for the bipartite
29// camera+landmark estimation problem (GLOMAP-style global positioning).
30// Enforces:
31// - Explicit separation of camera keys and landmark keys
32// - Validation that the anchor key is a camera
33// - BILINEAR (BATA) cost function exclusively
34// - No DSFMap handling (not applicable to camera-landmark edges)
35//
36// For custom graph configurations (mixed edges, custom gauge, etc.),
37// use LocationRecovery directly.
38//
39// Reference: Pan, L. et al., "Global Structure-from-Motion Revisited,"
40// ECCV 2024.
41class GTSAM_EXPORT GlobalPositioner : public LocationRecovery {
42 public:
43 using CameraPointDirection = BinaryMeasurement<Unit3>;
44 using CameraPointDirections = std::vector<CameraPointDirection>;
45
50 : LocationRecovery(lmParams) {}
51
55 GlobalPositioner() = default;
56
62 const std::set<Key> &cameraKeys, const std::set<Key> &landmarkKeys,
63 const CameraPointDirections &cameraPointDirections,
64 const Values &initialValues = Values()) const;
65
72 Values run(const CameraPointDirections &cameraPointDirections,
73 const std::set<Key> &cameraKeys,
74 const std::set<Key> &landmarkKeys, Key anchorCameraKey,
75 const Values &initialValues = Values()) const;
76};
77
78} // namespace gtsam
Recover absolute Point3 locations from pairwise Unit3 direction measurements, using either chordal or...
Global functions in a separate testing namespace.
Definition chartTesting.h:28
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:36
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
Definition BinaryMeasurement.h:37
Values initializeRandomly(const std::set< Key > &cameraKeys, const std::set< Key > &landmarkKeys, const CameraPointDirections &cameraPointDirections, const Values &initialValues=Values()) const
Initialize cameras, landmarks, and BATA scale variables.
Definition GlobalPositioner.cpp:27
GlobalPositioner(const LevenbergMarquardtParams &lmParams)
Construct with LM parameters.
Definition GlobalPositioner.h:49
GlobalPositioner()=default
Default constructor.
Values run(const CameraPointDirections &cameraPointDirections, const std::set< Key > &cameraKeys, const std::set< Key > &landmarkKeys, Key anchorCameraKey, const Values &initialValues=Values()) const
Build graph, fix gauge, initialize, and optimize.
Definition GlobalPositioner.cpp:37
LocationRecovery(const LevenbergMarquardtParams &lmParams)
Construct with LM parameters.
Definition LocationRecovery.h:58