testGradientDescentOptimizer.cpp
Go to the documentation of this file.
1 
18 #include <gtsam/nonlinear/Values.h>
19 #include <gtsam/geometry/Pose2.h>
20 
22 
23 
24 using namespace std;
25 using namespace gtsam;
26 
27 // Generate a small PoseSLAM problem
28 std::tuple<NonlinearFactorGraph, Values> generateProblem() {
29 
30  // 1. Create graph container and add factors to it
32 
33  // 2a. Add Gaussian prior
34  Pose2 priorMean(0.0, 0.0, 0.0); // prior at origin
35  SharedDiagonal priorNoise = noiseModel::Diagonal::Sigmas(
36  Vector3(0.3, 0.3, 0.1));
38 
39  // 2b. Add odometry factors
40  SharedDiagonal odometryNoise = noiseModel::Diagonal::Sigmas(
41  Vector3(0.2, 0.2, 0.1));
46 
47  // 2c. Add pose constraint
48  SharedDiagonal constraintUncertainty = noiseModel::Diagonal::Sigmas(
49  Vector3(0.2, 0.2, 0.1));
51  constraintUncertainty);
52 
53  // 3. Create the data structure to hold the initialEstimate estimate to the solution
54  Values initialEstimate;
55  Pose2 x1(0.5, 0.0, 0.2);
56  initialEstimate.insert(1, x1);
57  Pose2 x2(2.3, 0.1, -0.2);
58  initialEstimate.insert(2, x2);
59  Pose2 x3(4.1, 0.1, M_PI_2);
60  initialEstimate.insert(3, x3);
61  Pose2 x4(4.0, 2.0, M_PI);
62  initialEstimate.insert(4, x4);
63  Pose2 x5(2.1, 2.1, -M_PI_2);
64  initialEstimate.insert(5, x5);
65 
66  return {graph, initialEstimate};
67 }
68 
69 /* ************************************************************************* */
71 const auto [graph, initialEstimate] = generateProblem();
72 // cout << "initial error = " << graph.error(initialEstimate) << endl;
73 
75  param.maxIterations = 500; /* requires a larger number of iterations to converge */
76  param.verbosity = NonlinearOptimizerParams::SILENT;
77 
78  NonlinearConjugateGradientOptimizer optimizer(graph, initialEstimate, param);
79  Values result = optimizer.optimize();
80 // cout << "cg final error = " << graph.error(result) << endl;
81 
83 }
84 
85 /* ************************************************************************* */
86 int main() {
87  TestResult tr;
88  return TestRegistry::runAllTests(tr);
89 }
90 /* ************************************************************************* */
TestRegistry::runAllTests
static int runAllTests(TestResult &result)
Definition: TestRegistry.cpp:27
NonlinearConjugateGradientOptimizer.h
Simple non-linear optimizer that solves using non-preconditioned CG.
Pose2.h
2D Pose
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
TestHarness.h
x4
static string x4("x4")
priorMean
Pose2 priorMean(0.0, 0.0, 0.0)
gtsam::NonlinearOptimizerParams::verbosity
Verbosity verbosity
The printing verbosity during optimization (default SILENT)
Definition: NonlinearOptimizerParams.h:46
gtsam::Vector3
Eigen::Vector3d Vector3
Definition: Vector.h:43
result
Values result
Definition: OdometryOptimize.cpp:8
x3
Pose3 x3(Rot3::Ypr(M_PI/4.0, 0.0, 0.0), l2)
gtsam::NonlinearFactorGraph::error
double error(const Values &values) const
Definition: NonlinearFactorGraph.cpp:170
gtsam::NonlinearOptimizerParams
Definition: NonlinearOptimizerParams.h:35
BetweenFactor.h
x1
Pose3 x1
Definition: testPose3.cpp:663
gtsam::NonlinearFactorGraph
Definition: NonlinearFactorGraph.h:55
gtsam::SharedDiagonal
noiseModel::Diagonal::shared_ptr SharedDiagonal
Definition: NoiseModel.h:743
gtsam::NonlinearFactorGraph::addPrior
void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)
Definition: NonlinearFactorGraph.h:199
TEST
TEST(NonlinearConjugateGradientOptimizer, Optimize)
Definition: testGradientDescentOptimizer.cpp:70
x5
static string x5("x5")
priorNoise
auto priorNoise
Definition: doc/Code/OdometryExample.cpp:6
EXPECT_DOUBLES_EQUAL
#define EXPECT_DOUBLES_EQUAL(expected, actual, threshold)
Definition: Test.h:161
TestResult
Definition: TestResult.h:26
M_PI_2
#define M_PI_2
Definition: mconf.h:118
gtsam::NonlinearConjugateGradientOptimizer::optimize
const Values & optimize() override
Definition: NonlinearConjugateGradientOptimizer.cpp:74
gtsam::NonlinearConjugateGradientOptimizer
Definition: NonlinearConjugateGradientOptimizer.h:27
gtsam
traits
Definition: chartTesting.h:28
NonlinearFactorGraph.h
Factor Graph consisting of non-linear factors.
gtsam::Values
Definition: Values.h:65
std
Definition: BFloat16.h:88
odometryNoise
auto odometryNoise
Definition: doc/Code/OdometryExample.cpp:11
gtsam::NonlinearOptimizerParams::maxIterations
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition: NonlinearOptimizerParams.h:42
M_PI
#define M_PI
Definition: mconf.h:117
graph
NonlinearFactorGraph graph
Definition: doc/Code/OdometryExample.cpp:2
generateProblem
std::tuple< NonlinearFactorGraph, Values > generateProblem()
Definition: testGradientDescentOptimizer.cpp:28
x2
Pose3 x2(Rot3::Ypr(0.0, 0.0, 0.0), l2)
main
int main()
Definition: testGradientDescentOptimizer.cpp:86
Values.h
A non-templated config holding any types of Manifold-group elements.
gtsam::FactorGraph::emplace_shared
IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)
Emplace a shared pointer to factor of given type.
Definition: FactorGraph.h:153
gtsam::Pose2
Definition: Pose2.h:39
gtsam::BetweenFactor
Definition: BetweenFactor.h:40


gtsam
Author(s):
autogenerated on Thu Jun 13 2024 03:09:25