diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b44aa9a1e1c984009d1678124e4407eb7dd0963..3f01f3a66f94d788656f3b1f47356e9d5c3f686a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -216,6 +216,7 @@ SET(SRCS_DTASSC SET(SRCS_SOLVER ) SET(SRCS_YAML + src/yaml/processor_odom_ICP_yaml.cpp src/yaml/sensor_laser_2D_yaml.cpp ) #OPTIONALS diff --git a/demos/processor_odom_ICP.yaml b/demos/processor_odom_ICP.yaml deleted file mode 100644 index eb285cccdf416654f0d6c6f7d7bd639262b58cd6..0000000000000000000000000000000000000000 --- a/demos/processor_odom_ICP.yaml +++ /dev/null @@ -1,24 +0,0 @@ -type : "ODOM ICP" - -# from processor base -time_tolerance : 0.1 -voting_active : true -voting_aux_active : false - -# from processor tracker -min_features_for_keyframe : 0 -max_new_features : 0 - -# from processor odom ICP -use_point_to_line_distance : true -max_correspondence_dist : 1 -max_iterations : 5 -use_corr_tricks : 1 -outliers_maxPerc : 1 -outliers_adaptive_order : 1 -outliers_adaptive_mult : 1 -vfk_min_dist : 1 -vfk_min_angle : 1 -vfk_min_time : 1 -vfk_min_error : 1 -vfk_max_points : 1 diff --git a/src/yaml/processor_odom_ICP_yaml.cpp b/src/yaml/processor_odom_ICP_yaml.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9a5557abad838122c9239b038e964f2cc66faa0d --- /dev/null +++ b/src/yaml/processor_odom_ICP_yaml.cpp @@ -0,0 +1,64 @@ +/** + * \file processor_odom_ICP_yaml.cpp + * + * Created on: Aug 6, 2019 + * \author: jsola + */ + + +// wolf +#include "laser/processor/processor_odom_icp.h" +#include "core/common/factory.h" + +// wolf yaml +#include "core/yaml/yaml_conversion.h" + +// yaml library +#include <yaml-cpp/yaml.h> + +namespace wolf +{ +namespace { +// intrinsics creator +ProcessorParamsBasePtr createProcessorParamsOdomICP(const std::string& _filename_dot_yaml) +{ + WOLF_INFO("ProcessorParamsOdomICP: Parsing file: ", _filename_dot_yaml); + + YAML::Node config = YAML::LoadFile(_filename_dot_yaml); + + if (config["type"].as<std::string>() == "ODOM ICP") + { + ProcessorParamsOdomICPPtr params = std::make_shared<ProcessorParamsOdomICP>(); + + params->voting_active = config["voting_active"] .as<bool>(); + params->voting_aux_active = config["voting_aux_active"] .as<bool>(); + params->time_tolerance = config["time_tolerance"] .as<Scalar>(); + + params->min_features_for_keyframe = config["min_features_for_keyframe"] .as<Scalar>(); + params->max_new_features = config["max_new_features"] .as<SizeEigen >(); + + params->use_point_to_line_distance = config["use_point_to_line_distance"] .as<int>(); + params->max_correspondence_dist = config["max_correspondence_dist"] .as<int>(); + params->max_iterations = config["max_iterations"] .as<int>(); + params->use_corr_tricks = config["use_corr_tricks"] .as<int>(); + params->outliers_maxPerc = config["outliers_maxPerc"] .as<Scalar>(); + params->outliers_adaptive_order = config["outliers_adaptive_order"] .as<Scalar>(); + params->outliers_adaptive_mult = config["outliers_adaptive_mult"] .as<Scalar>(); + params->vfk_min_dist = config["vfk_min_dist"] .as<Scalar>(); + params->vfk_min_angle = config["vfk_min_angle"] .as<Scalar>(); + params->vfk_min_time = config["vfk_min_time"] .as<Scalar>(); + params->vfk_min_error = config["vfk_min_error"] .as<Scalar>(); + params->vfk_max_points = config["vfk_max_points"] .as<int>(); + + return params; + } + + std::cout << "Bad configuration file. No processor type found." << std::endl; + return nullptr; +} + +// register into factory +const bool WOLF_UNUSED registered_odom_ICP_params = ProcessorParamsFactory::get().registerCreator("ODOM ICP", createProcessorParamsOdomICP); + +} // namespace [void] +} // namespace wolf diff --git a/test/gtest_processor_odom_icp.cpp b/test/gtest_processor_odom_icp.cpp index 286a03e0c7325bb59ef1deeeace9906bd04a717c..30eb70c4760024cf161b040604a90af9c3e9adfe 100644 --- a/test/gtest_processor_odom_icp.cpp +++ b/test/gtest_processor_odom_icp.cpp @@ -6,7 +6,7 @@ */ #include "laser/processor/processor_odom_icp.h" - +#include "laser/internal/config.h" #include "core/utils/utils_gtest.h" using namespace wolf; @@ -33,6 +33,19 @@ TEST(ProcessorOdomIcp, Constructor) ASSERT_EQ(prc->getType(), "ODOM ICP"); } +TEST(ProcessorOdomIcp, Constructor_yaml) +{ + std::string wolf_root = _WOLF_LASER_ROOT_DIR; + + auto params = std::static_pointer_cast<ProcessorParamsOdomICP>(ProcessorParamsFactory::get().create("ODOM ICP", wolf_root + "/test/yaml/processor_odom_ICP.yaml")); + auto prc = std::make_shared<ProcessorOdomICP>(params); + + ASSERT_TRUE(prc); // not nullptr + ASSERT_EQ(prc->getType(), "ODOM ICP"); +} + + + int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); diff --git a/test/yaml/processor_odom_ICP.yaml b/test/yaml/processor_odom_ICP.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0a5677cca6dff3b53cce67225035c8e2f536b1fc --- /dev/null +++ b/test/yaml/processor_odom_ICP.yaml @@ -0,0 +1,24 @@ +type : "ODOM ICP" + +# from processor base +time_tolerance : 0.1 +voting_active : true +voting_aux_active : false + +# from processor tracker +min_features_for_keyframe : 0 +max_new_features : 0 + +# from processor odom ICP +use_point_to_line_distance : 1 +max_correspondence_dist : 2 +max_iterations : 3 +use_corr_tricks : 4 +outliers_maxPerc : 5 +outliers_adaptive_order : 6 +outliers_adaptive_mult : 7 +vfk_min_dist : 8 +vfk_min_angle : 9 +vfk_min_time : 10 +vfk_min_error : 11 +vfk_max_points : 12