diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index a4b0e723afdeb6686323aa47d4099398db6d5b51..c14e06fe5941303ff76f69d5b4c2a32ab4c1f29e 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -113,35 +113,37 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) #else std::string lib_extension = ".so"; #endif + // Problem structure and dimension std::string frame_structure = _server.getParam<std::string> ("problem/frame_structure"); - int dim = _server.getParam<int> ("problem/dimension"); - auto problem = Problem::create(frame_structure, dim); - // - // cout << "PRINTING SERVER MAP" << endl; - // _server.print(); - // cout << "-----------------------------------" << endl; + int dim = _server.getParam<int> ("problem/dimension"); + auto problem = Problem::create(frame_structure, dim); + WOLF_TRACE("Setting up problem with frame structure {" + frame_structure + "} and dimension " + std::to_string(dim) + "D"); // Load plugins - auto loaders = std::vector<Loader *>(); + auto loaders = std::vector<std::shared_ptr<Loader>>(); std::string plugins_path; try{ plugins_path = _server.getParam<std::string>("plugins_path"); } catch(MissingValueException& e){ WOLF_WARN(e.what()); - WOLF_WARN("Setting '/usr/local/lib/iri-algorithms/' as plugins path..."); - plugins_path="/usr/local/lib/iri-algorithms/"; + WOLF_WARN("Setting '/usr/local/lib/' as plugins path..."); + plugins_path="/usr/local/lib/"; } - for (auto plugin_name : _server.getParam<std::vector<std::string>>("plugins")) { + for (auto plugin_name : _server.getParam<std::vector<std::string>>("plugins")) + { if (plugin_name == "core" or plugin_name == "wolf" or plugin_name == "") continue; // ignore plugin "core" + std::string plugin = plugins_path + "libwolf" + plugin_name + lib_extension; - WOLF_TRACE("Loading plugin " + plugin); - auto l = new LoaderRaw(plugin); + WOLF_TRACE("Loading plugin " + plugin_name + " via " + plugin); + auto l = std::make_shared<LoaderRaw>(plugin); l->load(); loaders.push_back(l); } + + // load Packages for subscribers and publishers std::string packages_path; try { packages_path = _server.getParam<std::string>("packages_path"); @@ -149,20 +151,22 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) WOLF_WARN(e.what()); WOLF_WARN("Support for subscribers disabled..."); } - for (auto it : _server.getParam<std::vector<std::string>>("packages_subscriber")) { - std::string subscriber = packages_path + "/libsubscriber_" + it + lib_extension; - WOLF_TRACE("Loading subscriber " + subscriber); - auto l = new LoaderRaw(subscriber); + for (auto subscriber_name : _server.getParam<std::vector<std::string>>("packages_subscriber")) { + std::string subscriber = packages_path + "/libsubscriber_" + subscriber_name + lib_extension; + WOLF_TRACE("Loading subscriber " + subscriber_name + " via " + subscriber); + auto l = std::make_shared<LoaderRaw>(subscriber); l->load(); loaders.push_back(l); } - for (auto it : _server.getParam<std::vector<std::string>>("packages_publisher")) { - std::string subscriber = packages_path + "/libpublisher_" + it + lib_extension; - WOLF_TRACE("Loading publisher " + subscriber); - auto l = new LoaderRaw(subscriber); + for (auto publisher_name : _server.getParam<std::vector<std::string>>("packages_publisher")) { + std::string publisher = packages_path + "/libpublisher_" + publisher_name + lib_extension; + WOLF_TRACE("Loading publisher " + publisher_name + " via " + publisher); + auto l = std::make_shared<LoaderRaw>(publisher); l->load(); loaders.push_back(l); } + + // load raw libs std::vector<std::string> raw_libs; try { raw_libs = _server.getParam<std::vector<std::string>>("raw_libs"); @@ -172,22 +176,25 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) } for (auto lib : raw_libs) { WOLF_TRACE("Loading raw lib " + lib); - auto l = new LoaderRaw(lib); + auto l = std::make_shared<LoaderRaw>(lib); l->load(); loaders.push_back(l); } // Install sensors and processors - auto sensorMap = std::map<std::string, SensorBasePtr>(); - auto procesorMap = std::map<std::string, ProcessorBasePtr>(); - auto sensors = _server.getParam<std::vector<std::map<std::string, std::string>>>("sensors"); - for(auto sen : sensors){ - sensorMap.insert(std::pair<std::string, SensorBasePtr>(sen["name"], problem->installSensor(sen["type"], sen["name"], _server))); - } - auto processors = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors"); - for(auto prc : processors){ - procesorMap.insert(std::pair<std::string, ProcessorBasePtr>(prc["name"], problem->installProcessor(prc["type"], prc["name"], prc["sensor_name"], _server))); - } + auto sensors = _server.getParam<std::vector<std::map<std::string, std::string>>>("sensors"); + for(auto sen : sensors) + problem->installSensor(sen["type"], + sen["name"], + _server); + + auto processors = _server.getParam<std::vector<std::map<std::string, std::string>>>("processors"); + for(auto prc : processors) + problem->installProcessor(prc["type"], + prc["name"], + prc["sensor_name"], + _server); + // Tree manager std::string tree_manager_type = _server.getParam<std::string>("problem/tree_manager/type"); @@ -195,7 +202,7 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) if (tree_manager_type != "None" and tree_manager_type != "none") problem->setTreeManager(AutoConfFactoryTreeManager::create(tree_manager_type, "tree manager", _server)); - // Prior + // Set problem prior -- first keyframe std::string prior_mode = _server.getParam<std::string>("problem/prior/mode"); assert((prior_mode == "nothing" || prior_mode == "initial_guess" || prior_mode == "fix" || prior_mode == "factor") && "wrong _mode value, it should be: 'nothing', 'initial_guess', 'fix' or 'factor'"); WOLF_TRACE("Prior mode: ", prior_mode); @@ -214,7 +221,6 @@ ProblemPtr Problem::autoSetup(ParamsServer &_server) } else { - WOLF_TRACE("Prior mode: ", prior_mode); problem->setPriorOptions(prior_mode, _server.getParam<VectorComposite>("problem/prior/state")); }