| 72 | #ifndef TESTMODE // only compile main if not used in test context |
| 73 | |
| 74 | int 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 |
nothing calls this directly
no test coverage detected