| 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 | double Time, TimeFirst = 0.0, TimeOld = 0.0; |
| 80 | |
| 81 | libRSF::Vector1 StdDev, StdDevCCE; |
| 82 | StdDev << STDDEV_RANGE; |
| 83 | StdDevCCE << STDDEV_CCE; |
| 84 | |
| 85 | ceres::Solver::Options SolverOptions; |
| 86 | SolverOptions.trust_region_strategy_type = ceres::TrustRegionStrategyType::DOGLEG; |
| 87 | SolverOptions.dogleg_type = ceres::DoglegType::SUBSPACE_DOGLEG; |
| 88 | SolverOptions.num_threads = std::thread::hardware_concurrency(); |
| 89 | SolverOptions.minimizer_progress_to_stdout = true; |
| 90 | |
| 91 | libRSF::FactorGraph SimpleGraph; |
| 92 | libRSF::SensorDataSet RangeMeasurements; |
| 93 | libRSF::StateList RangeList, ConstValList; |
| 94 | libRSF::GaussianDiagonal<1> NoiseModelRange, NoiseModelCCE; |
| 95 | NoiseModelRange.setStdDevDiagonal(StdDev); |
| 96 | NoiseModelCCE.setStdDevDiagonal(StdDevCCE); |
| 97 | |
| 98 | /** construct a set of range Measurements */ |
| 99 | CreateData(RangeMeasurements); |
| 100 | |
| 101 | /** loop over timestamps */ |
| 102 | RangeMeasurements.getTimeFirst(PSEUDORANGE_MEASUREMENT, TimeFirst); |
| 103 | Time = TimeFirst; |
| 104 | do |
| 105 | { |
| 106 | /** add position variables to graph */ |
| 107 | SimpleGraph.addState(POSITION_STATE, libRSF::DataType::Point2, Time); |
| 108 | |
| 109 | /** add offset variables to graph */ |
| 110 | SimpleGraph.addState(OFFSET_STATE, libRSF::DataType::ClockError, Time); |
| 111 | |
| 112 | RangeList.add(POSITION_STATE, Time); |
| 113 | RangeList.add(OFFSET_STATE, Time); |
| 114 | |
| 115 | /** add constant value model*/ |
| 116 | if (Time > TimeFirst) |
| 117 | { |
| 118 | ConstValList.add(OFFSET_STATE, TimeOld); |
| 119 | ConstValList.add(OFFSET_STATE, Time); |
| 120 | SimpleGraph.addFactor<libRSF::FactorType::ConstVal1>(ConstValList, NoiseModelCCE); |
| 121 | ConstValList.clear(); |
| 122 | } |
| 123 | |
| 124 | /** loop over measurements */ |
| 125 | for (int nMeasurement = RangeMeasurements.countElement(PSEUDORANGE_MEASUREMENT, Time); nMeasurement > 0; nMeasurement--) |
| 126 | { |
| 127 | SimpleGraph.addFactor<libRSF::FactorType::Pseudorange2>(RangeList, RangeMeasurements.getElement(PSEUDORANGE_MEASUREMENT, Time, nMeasurement-1), NoiseModelRange); |
| 128 | } |
| 129 | RangeList.clear(); |
| 130 | |
| 131 | TimeOld = Time; |
nothing calls this directly
no test coverage detected