MCPcopy Create free account
hub / github.com/TUC-ProAut/libRSF / main

Function main

examples/Example_FG_Range.cpp:74–133  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72#ifndef TESTMODE // only compile main if not used in test context
73
74int main(int ArgC, char** ArgV)
75{
76 (void)ArgC;
77 google::InitGoogleLogging(ArgV[0]);
78
79 libRSF::Vector1 StdDev;
80 StdDev << STDDEV_RANGE;
81
82 ceres::Solver::Options SolverOptions;
83 SolverOptions.trust_region_strategy_type = ceres::TrustRegionStrategyType::DOGLEG;
84 SolverOptions.dogleg_type = ceres::DoglegType::SUBSPACE_DOGLEG;
85 SolverOptions.num_threads = std::thread::hardware_concurrency();
86 SolverOptions.minimizer_progress_to_stdout = true;
87
88 libRSF::FactorGraph SimpleGraph;
89 libRSF::SensorDataSet RangeMeasurements;
90 libRSF::StateList PositionList;
91 libRSF::GaussianDiagonal<1> NoiseModel;
92 NoiseModel.setStdDevDiagonal(StdDev);
93
94 /** construct a set of range Measurements */
95 CreateData(RangeMeasurements);
96
97 /** add position variables to graph */
98 SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 0);
99 SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 1);
100 SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 2);
101
102 /** loop over timestamps */
103 double Time = 0.0;
104 RangeMeasurements.getTimeFirst(RANGE_MEASUREMENT, Time);
105 do
106 {
107 PositionList.add(POSITION_STATE, Time);
108 /** loop over measurements */
109 for (int nMeasurement = RangeMeasurements.countElement(RANGE_MEASUREMENT, Time); nMeasurement > 0; nMeasurement--)
110 {
111 SimpleGraph.addFactor<libRSF::FactorType::Range2>(PositionList, RangeMeasurements.getElement(RANGE_MEASUREMENT, Time, nMeasurement-1), NoiseModel);
112 }
113 PositionList.clear();
114 }
115 while(RangeMeasurements.getTimeNext(RANGE_MEASUREMENT, Time, Time));
116
117 /** output initialization */
118 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 0.0).getNameValueString() << std::endl;
119 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 1.0).getNameValueString() << std::endl;
120 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 2.0).getNameValueString() << std::endl;
121
122 /** solve graph */
123 SimpleGraph.solve(SolverOptions);
124 SimpleGraph.printReport();
125
126 /** output result */
127 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 0.0).getNameValueString() << std::endl;
128 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 1.0).getNameValueString() << std::endl;
129 std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 2.0).getNameValueString() << std::endl;
130
131

Callers

nothing calls this directly

Calls 12

addStateMethod · 0.80
addMethod · 0.80
countElementMethod · 0.80
getElementMethod · 0.80
getTimeNextMethod · 0.80
getNameValueStringMethod · 0.80
solveMethod · 0.80
printReportMethod · 0.80
CreateDataFunction · 0.70
setStdDevDiagonalMethod · 0.45
getTimeFirstMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected