| 34 | #ifndef TESTMODE // only compile main if not used in test context |
| 35 | |
| 36 | int main(int ArgC, char** ArgV) |
| 37 | { |
| 38 | (void)ArgC; |
| 39 | google::InitGoogleLogging(ArgV[0]); |
| 40 | |
| 41 | /** create our own graph object */ |
| 42 | libRSF::FactorGraph SimpleGraph; |
| 43 | |
| 44 | /** set the solver options for Ceres */ |
| 45 | ceres::Solver::Options SolverOptions; |
| 46 | SolverOptions.trust_region_strategy_type = ceres::TrustRegionStrategyType::DOGLEG; |
| 47 | SolverOptions.dogleg_type = ceres::DoglegType::SUBSPACE_DOGLEG; |
| 48 | SolverOptions.num_threads = std::thread::hardware_concurrency(); |
| 49 | SolverOptions.minimizer_progress_to_stdout = true; |
| 50 | |
| 51 | /** add states to graph */ |
| 52 | SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 0); |
| 53 | SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 1); |
| 54 | SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 2); |
| 55 | SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, 3); |
| 56 | |
| 57 | /** set initial values values */ |
| 58 | libRSF::Vector2 StateVect; |
| 59 | StateVect << 10, 10; |
| 60 | SimpleGraph.getStateData().getElement(POSITION_STATE, 0.0).setMean(StateVect * 1); |
| 61 | SimpleGraph.getStateData().getElement(POSITION_STATE, 1.0).setMean(StateVect * 2); |
| 62 | SimpleGraph.getStateData().getElement(POSITION_STATE, 2.0).setMean(StateVect * 3); |
| 63 | SimpleGraph.getStateData().getElement(POSITION_STATE, 3.0).setMean(StateVect * 4); |
| 64 | |
| 65 | /** output initialization */ |
| 66 | std::cout << std::endl << "Initial Values:" << std::endl; |
| 67 | std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 0.0).getNameValueString() << std::endl; |
| 68 | std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 1.0).getNameValueString() << std::endl; |
| 69 | std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 2.0).getNameValueString() << std::endl; |
| 70 | std::cout << SimpleGraph.getStateData().getElement(POSITION_STATE, 3.0).getNameValueString() << std::endl; |
| 71 | |
| 72 | /** construct relative noise model */ |
| 73 | libRSF::Vector2 NoiseVect; |
| 74 | NoiseVect << 1.0, 1.0; |
| 75 | libRSF::GaussianDiagonal<2> NoiseRelative; |
| 76 | NoiseRelative.setStdDevDiagonal(NoiseVect); |
| 77 | |
| 78 | /** add constant value factors to graph */ |
| 79 | SimpleGraph.addFactor<libRSF::FactorType::ConstVal2>(libRSF::StateID(POSITION_STATE, 0.0), libRSF::StateID(POSITION_STATE, 1.0), NoiseRelative); |
| 80 | SimpleGraph.addFactor<libRSF::FactorType::ConstVal2>(libRSF::StateID(POSITION_STATE, 1.0), libRSF::StateID(POSITION_STATE, 2.0), NoiseRelative); |
| 81 | SimpleGraph.addFactor<libRSF::FactorType::ConstVal2>(libRSF::StateID(POSITION_STATE, 2.0), libRSF::StateID(POSITION_STATE, 3.0), NoiseRelative); |
| 82 | |
| 83 | /** construct absolute noise model */ |
| 84 | libRSF::Matrix22 CovMat; |
| 85 | CovMat << 1.0, 0.25, |
| 86 | 0.25, 4.0; |
| 87 | libRSF::GaussianFull<2> NoisePrior; |
| 88 | NoisePrior.setCovarianceMatrix(CovMat); |
| 89 | |
| 90 | /** add absolute measurement factor*/ |
| 91 | libRSF::Data AbsoluteMeasurement(libRSF::DataType::Point2, 1.0); |
| 92 | AbsoluteMeasurement.setMean(StateVect * 4.2); |
| 93 | SimpleGraph.addFactor<libRSF::FactorType::Prior2>(libRSF::StateID(POSITION_STATE, 1.0), AbsoluteMeasurement, NoisePrior); |
nothing calls this directly
no test coverage detected