diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index daca9ba3a0a1b5d1cc69dae0f9211f77d3397a17..0e59e89a53e1c85bea2bb0a370bd30b20fcdc0c4 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -73,14 +73,19 @@ ProblemPtr Problem::create(const std::string& _frame_structure, SizeEigen _dim) p->setup(); return p->shared_from_this(); } + ProblemPtr Problem::autoSetup(paramsServer &_server) { - std::string frame_structure = _server.getParam<std::string>("problem/frame structure", "PO"); - int dim = _server.getParam<int>("problem/dimension", "2"); - auto p = Problem::create(frame_structure, dim); + // Problem structure and dimension + std::string frame_structure = _server.getParam<std::string> ("problem/frame structure", "PO"); + int dim = _server.getParam<int> ("problem/dimension", "2"); + auto problem = Problem::create(frame_structure, dim); // cout << "PRINTING SERVER MAP" << endl; // _server.print(); // cout << "-----------------------------------" << endl; + WOLF_TRACE("Setting up problem with frame structure {" + frame_structure + "} and dimension " + std::to_string(dim) + "D"); + + // Load plugins auto loaders = std::vector<Loader*>(); for(auto it : _server.getParam<std::vector<std::string>>("files")) { WOLF_TRACE("Loading file " + it) @@ -88,27 +93,37 @@ ProblemPtr Problem::autoSetup(paramsServer &_server) l->load(); loaders.push_back(l); } - WOLF_TRACE("Setting up problem with frame structure {" + frame_structure + "} and dimension {" + std::to_string(dim) + "}"); - Eigen::VectorXs prior_state = _server.getParam<Eigen::VectorXs>("problem/prior state"); - Eigen::MatrixXs prior_cov = _server.getParam<Eigen::MatrixXs>("problem/prior cov"); - Scalar time_tolerance = _server.getParam<Scalar>("problem/time tolerance"); - auto ts = TimeStamp(); - WOLF_TRACE("prior timestamp:\n",ts); - WOLF_TRACE("prior state:\n", prior_state.transpose()); - WOLF_TRACE("prior covariance:\n", prior_cov); - WOLF_TRACE("prior time tolerance:\n", time_tolerance); - p->setPrior(prior_state, prior_cov, ts, time_tolerance); + + // Install sensors and processors auto sensorMap = std::map<std::string, SensorBasePtr>(); auto procesorMap = std::map<std::string, ProcessorBasePtr>(); - for(auto s : _server.getSensors()){ - sensorMap.insert(std::pair<std::string, SensorBasePtr>(s._name,p->installSensor(s._type, s._name, _server))); + + for(auto sen : _server.getSensors()){ + sensorMap.insert(std::pair<std::string, SensorBasePtr>(sen._name, problem->installSensor(sen._type, sen._name, _server))); } - for(auto s : _server.getProcessors()){ - procesorMap.insert(std::pair<std::string, ProcessorBasePtr>(s._name,p->installProcessor(s._type, s._name, s._name_assoc_sensor, _server))); + + for(auto prc : _server.getProcessors()){ + procesorMap.insert(std::pair<std::string, ProcessorBasePtr>(prc._name, problem->installProcessor(prc._type, prc._name, prc._name_assoc_sensor, _server))); } - return p; + + // Prior + Eigen::VectorXs prior_state = _server.getParam<Eigen::VectorXs>("problem/prior state"); + Eigen::MatrixXs prior_cov = _server.getParam<Eigen::MatrixXs>("problem/prior cov"); + Scalar prior_time_tolerance = _server.getParam<Scalar>("problem/prior time tolerance"); + Scalar prior_ts = _server.getParam<Scalar>("problem/prior timestamp"); + + WOLF_TRACE("prior timestamp:\n" , prior_ts); + WOLF_TRACE("prior state:\n" , prior_state.transpose()); + WOLF_TRACE("prior covariance:\n" , prior_cov); + WOLF_TRACE("prior time tolerance:\n", prior_time_tolerance); + + problem->setPrior(prior_state, prior_cov, prior_ts, prior_time_tolerance); + + // Done + return problem; } + Problem::~Problem() { // WOLF_DEBUG("destructed -P");