From 5dd7bf5024071bbc08b644817ccdb341a410cec8 Mon Sep 17 00:00:00 2001 From: Joaquim Casals <jcasals@iri.upc.edu> Date: Mon, 1 Apr 2019 12:18:55 +0200 Subject: [PATCH] Added no-default (with error) option for params server --- include/base/params_server.hpp | 8 ++++++++ .../processor_frame_nearest_neighbor_filter.h | 8 ++++---- .../base/processor/processor_params_image.h | 20 +++++++++---------- .../processor_tracker_feature_trifocal.h | 14 ++++++------- include/base/sensor/sensor_GPS_fix.h | 2 +- include/base/sensor/sensor_camera.h | 10 +++++----- include/base/sensor/sensor_diff_drive.h | 12 +++++------ include/base/sensor/sensor_odom_2D.h | 4 ++-- include/base/sensor/sensor_odom_3D.h | 10 +++++----- test/gtest_param_server.cpp | 3 +++ 10 files changed, 51 insertions(+), 40 deletions(-) diff --git a/include/base/params_server.hpp b/include/base/params_server.hpp index b7fe91f30..55f268d78 100644 --- a/include/base/params_server.hpp +++ b/include/base/params_server.hpp @@ -65,6 +65,14 @@ public: return converter<T>::convert(def_value); } } + template<typename T> + T getParam(std::string key) const { + if(_params.find(key) != _params.end()){ + return converter<T>::convert(_params.find(key)->second); + }else{ + throw std::runtime_error("The following key: '" + key + "' has not been found in the parameters server and no default value was provided."); + } + } std::vector<ParamsInitSensor> getSensors(){ std::vector<ParamsInitSensor> rtn = std::vector<ParamsInitSensor>(); std::transform(this->_paramsSens.begin(), this->_paramsSens.end(), back_inserter(rtn), [](const std::pair<std::string,ParamsInitSensor> v){return v.second;}); diff --git a/include/base/processor/processor_frame_nearest_neighbor_filter.h b/include/base/processor/processor_frame_nearest_neighbor_filter.h index 3f28b915d..9a66768a9 100644 --- a/include/base/processor/processor_frame_nearest_neighbor_filter.h +++ b/include/base/processor/processor_frame_nearest_neighbor_filter.h @@ -42,16 +42,16 @@ struct ProcessorParamsFrameNearestNeighborFilter : public ProcessorParamsLoopClo ProcessorParamsFrameNearestNeighborFilter(std::string _unique_name, const paramsServer& _server): ProcessorParamsLoopClosure(_unique_name, _server) { - buffer_size_ = _server.getParam<int>(_unique_name + "/buffer_size", ""); - sample_step_degree_ = _server.getParam<int>(_unique_name + "/sample_step_degree", ""); - auto distance_type_str = _server.getParam<std::string>(_unique_name + "/distance_type", ""); + buffer_size_ = _server.getParam<int>(_unique_name + "/buffer_size"); + sample_step_degree_ = _server.getParam<int>(_unique_name + "/sample_step_degree"); + auto distance_type_str = _server.getParam<std::string>(_unique_name + "/distance_type"); if(distance_type_str.compare("LC_POINT_ELLIPSE")) distance_type_ = LoopclosureDistanceType::LC_POINT_ELLIPSE; else if(distance_type_str.compare("LC_ELLIPSE_ELLIPSE")) distance_type_ = LoopclosureDistanceType::LC_ELLIPSE_ELLIPSE; else if(distance_type_str.compare("LC_POINT_ELLIPSOID")) distance_type_ = LoopclosureDistanceType::LC_POINT_ELLIPSOID; else if(distance_type_str.compare("LC_ELLIPSOID_ELLIPSOID")) distance_type_ = LoopclosureDistanceType::LC_ELLIPSOID_ELLIPSOID; else if(distance_type_str.compare("LC_MAHALANOBIS_DISTANCE")) distance_type_ = LoopclosureDistanceType::LC_MAHALANOBIS_DISTANCE; else throw std::runtime_error("Failed to fetch a valid value for the enumerate LoopclosureDistanceType. Value provided: " + distance_type_str); - probability_ = _server.getParam<Scalar>(_unique_name + "/probability", ""); + probability_ = _server.getParam<Scalar>(_unique_name + "/probability"); } virtual ~ProcessorParamsFrameNearestNeighborFilter() = default; diff --git a/include/base/processor/processor_params_image.h b/include/base/processor/processor_params_image.h index 5d200dd08..33e92c38e 100644 --- a/include/base/processor/processor_params_image.h +++ b/include/base/processor/processor_params_image.h @@ -24,11 +24,11 @@ struct ProcessorParamsTrackerFeatureImage : public ProcessorParamsTrackerFeature ProcessorParamsTrackerFeatureImage(std::string _unique_name, const paramsServer& _server): ProcessorParamsTrackerFeature(_unique_name, _server) { - yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils", ""); - min_response_for_new_features = _server.getParam<Scalar>(_unique_name + "/min_response_for_new_features", ""); - distance = _server.getParam<Scalar>(_unique_name + "/distance", ""); - pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std", ""); - pixel_noise_var = _server.getParam<Scalar>(_unique_name + "/pixel_noise_var", ""); + yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils"); + min_response_for_new_features = _server.getParam<Scalar>(_unique_name + "/min_response_for_new_features"); + distance = _server.getParam<Scalar>(_unique_name + "/distance"); + pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std"); + pixel_noise_var = _server.getParam<Scalar>(_unique_name + "/pixel_noise_var"); } }; @@ -46,13 +46,13 @@ struct ProcessorParamsTrackerLandmarkImage : public ProcessorParamsTrackerLandma ProcessorParamsTrackerLandmarkImage(std::string _unique_name, const paramsServer& _server): ProcessorParamsTrackerLandmark(_unique_name, _server) { - yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils", ""); + yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils"); - min_response_for_new_features = _server.getParam<Scalar>(_unique_name + "/min_response_for_new_features", ""); - distance = _server.getParam<Scalar>(_unique_name + "/distance", ""); + min_response_for_new_features = _server.getParam<Scalar>(_unique_name + "/min_response_for_new_features"); + distance = _server.getParam<Scalar>(_unique_name + "/distance"); - pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std", ""); - pixel_noise_var = _server.getParam<Scalar>(_unique_name + "/pixel_noise_var", ""); + pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std"); + pixel_noise_var = _server.getParam<Scalar>(_unique_name + "/pixel_noise_var"); } }; } diff --git a/include/base/processor/processor_tracker_feature_trifocal.h b/include/base/processor/processor_tracker_feature_trifocal.h index 1033e3347..fa3984253 100644 --- a/include/base/processor/processor_tracker_feature_trifocal.h +++ b/include/base/processor/processor_tracker_feature_trifocal.h @@ -32,13 +32,13 @@ struct ProcessorParamsTrackerFeatureTrifocal : public ProcessorParamsTrackerFeat ProcessorParamsTrackerFeatureTrifocal(std::string _unique_name, const paramsServer& _server): ProcessorParamsTrackerFeature(_unique_name, _server) { - yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils", ""); - n_cells_h = _server.getParam<int>(_unique_name + "/n_cells_h", ""); - n_cells_v = _server.getParam<int>(_unique_name + "/n_cells_v", ""); - min_response_new_feature = _server.getParam<int>(_unique_name + "/min_response_new_feature", ""); - max_euclidean_distance = _server.getParam<Scalar>(_unique_name + "/max_euclidean_distance", ""); - pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std", ""); - min_track_length_for_factor = _server.getParam<int>(_unique_name + "/min_track_length_for_factor", ""); + yaml_file_params_vision_utils = _server.getParam<std::string>(_unique_name + "/yaml_file_params_vision_utils"); + n_cells_h = _server.getParam<int>(_unique_name + "/n_cells_h"); + n_cells_v = _server.getParam<int>(_unique_name + "/n_cells_v"); + min_response_new_feature = _server.getParam<int>(_unique_name + "/min_response_new_feature"); + max_euclidean_distance = _server.getParam<Scalar>(_unique_name + "/max_euclidean_distance"); + pixel_noise_std = _server.getParam<Scalar>(_unique_name + "/pixel_noise_std"); + min_track_length_for_factor = _server.getParam<int>(_unique_name + "/min_track_length_for_factor"); } }; diff --git a/include/base/sensor/sensor_GPS_fix.h b/include/base/sensor/sensor_GPS_fix.h index e1f443f8a..dd2e85700 100644 --- a/include/base/sensor/sensor_GPS_fix.h +++ b/include/base/sensor/sensor_GPS_fix.h @@ -18,7 +18,7 @@ struct IntrinsicsGPSFix : public IntrinsicsBase IntrinsicsGPSFix(std::string _unique_name, const paramsServer& _server): IntrinsicsBase(_unique_name, _server) { - noise_std = _server.getParam<Eigen::Vector3s>(_unique_name + "/noise_std", ""); + noise_std = _server.getParam<Eigen::Vector3s>(_unique_name + "/noise_std"); } virtual ~IntrinsicsGPSFix() = default; }; diff --git a/include/base/sensor/sensor_camera.h b/include/base/sensor/sensor_camera.h index 8d2cd2e82..44bd1dd0b 100644 --- a/include/base/sensor/sensor_camera.h +++ b/include/base/sensor/sensor_camera.h @@ -25,11 +25,11 @@ struct IntrinsicsCamera : public IntrinsicsBase IntrinsicsCamera(std::string _unique_name, const paramsServer& _server): IntrinsicsBase(_unique_name, _server) { - width = _server.getParam<unsigned int>(_unique_name + "/width", ""); - height = _server.getParam<unsigned int>(_unique_name + "/height", ""); - pinhole_model_raw = _server.getParam<Eigen::Vector4s>(_unique_name + "/pinhole_model_raw", ""); - pinhole_model_rectified = _server.getParam<Eigen::Vector4s>(_unique_name + "/pinhole_model_rectified", ""); - distortion = _server.getParam<Eigen::VectorXs>(_unique_name + "/distortion", ""); + width = _server.getParam<unsigned int>(_unique_name + "/width"); + height = _server.getParam<unsigned int>(_unique_name + "/height"); + pinhole_model_raw = _server.getParam<Eigen::Vector4s>(_unique_name + "/pinhole_model_raw"); + pinhole_model_rectified = _server.getParam<Eigen::Vector4s>(_unique_name + "/pinhole_model_rectified"); + distortion = _server.getParam<Eigen::VectorXs>(_unique_name + "/distortion"); } virtual ~IntrinsicsCamera() = default; }; diff --git a/include/base/sensor/sensor_diff_drive.h b/include/base/sensor/sensor_diff_drive.h index b601875b9..2f8a13f0e 100644 --- a/include/base/sensor/sensor_diff_drive.h +++ b/include/base/sensor/sensor_diff_drive.h @@ -42,11 +42,11 @@ struct IntrinsicsDiffDrive : public IntrinsicsBase IntrinsicsBase(_unique_name, _server) { - left_radius_ = _server.getParam<Scalar>(_unique_name + "/left_radius_", ""); - right_radius_ = _server.getParam<Scalar>(_unique_name + "/right_radius_", ""); - separation_ = _server.getParam<Scalar>(_unique_name + "/separation_", ""); + left_radius_ = _server.getParam<Scalar>(_unique_name + "/left_radius_"); + right_radius_ = _server.getParam<Scalar>(_unique_name + "/right_radius_"); + separation_ = _server.getParam<Scalar>(_unique_name + "/separation_"); - auto model_str = _server.getParam<std::string>(_unique_name + "/model", ""); + auto model_str = _server.getParam<std::string>(_unique_name + "/model"); if(model_str.compare("Two_Factor_Model")) model_ = DiffDriveModel::Two_Factor_Model; else if(model_str.compare("Three_Factor_Model")) model_ = DiffDriveModel::Three_Factor_Model; else if(model_str.compare("Five_Factor_Model")) model_ = DiffDriveModel::Five_Factor_Model; @@ -54,8 +54,8 @@ struct IntrinsicsDiffDrive : public IntrinsicsBase factors_ = _server.getParam<Eigen::VectorXs>(_unique_name + "/factors", "[1,1,1]"); - left_resolution_ = _server.getParam<Scalar>(_unique_name + "/left_resolution_", ""); - right_resolution_ = _server.getParam<Scalar>(_unique_name + "/right_resolution_", ""); + left_resolution_ = _server.getParam<Scalar>(_unique_name + "/left_resolution_"); + right_resolution_ = _server.getParam<Scalar>(_unique_name + "/right_resolution_"); left_gain_ = _server.getParam<Scalar>(_unique_name + "/left_gain", "0.01"); right_gain_ = _server.getParam<Scalar>(_unique_name + "/right_gain", "0.01"); diff --git a/include/base/sensor/sensor_odom_2D.h b/include/base/sensor/sensor_odom_2D.h index 1d71d926d..934ef2615 100644 --- a/include/base/sensor/sensor_odom_2D.h +++ b/include/base/sensor/sensor_odom_2D.h @@ -22,8 +22,8 @@ struct IntrinsicsOdom2D : public IntrinsicsBase IntrinsicsOdom2D(std::string _unique_name, const paramsServer& _server): IntrinsicsBase(_unique_name, _server) { - k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp", ""); - k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot", ""); + k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp"); + k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot"); } }; diff --git a/include/base/sensor/sensor_odom_3D.h b/include/base/sensor/sensor_odom_3D.h index 3f3c6c434..c1128098e 100644 --- a/include/base/sensor/sensor_odom_3D.h +++ b/include/base/sensor/sensor_odom_3D.h @@ -30,11 +30,11 @@ struct IntrinsicsOdom3D : public IntrinsicsBase IntrinsicsOdom3D(std::string _unique_name, const paramsServer& _server): IntrinsicsBase(_unique_name, _server) { - k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp", ""); - k_disp_to_rot = _server.getParam<Scalar>(_unique_name + "/k_disp_to_rot", ""); - k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot", ""); - min_disp_var = _server.getParam<Scalar>(_unique_name + "/min_disp_var", ""); - min_rot_var = _server.getParam<Scalar>(_unique_name + "/min_rot_var", ""); + k_disp_to_disp = _server.getParam<Scalar>(_unique_name + "/k_disp_to_disp"); + k_disp_to_rot = _server.getParam<Scalar>(_unique_name + "/k_disp_to_rot"); + k_rot_to_rot = _server.getParam<Scalar>(_unique_name + "/k_rot_to_rot"); + min_disp_var = _server.getParam<Scalar>(_unique_name + "/min_disp_var"); + min_rot_var = _server.getParam<Scalar>(_unique_name + "/min_rot_var"); } virtual ~IntrinsicsOdom3D() = default; }; diff --git a/test/gtest_param_server.cpp b/test/gtest_param_server.cpp index 9dc28c7e4..a17791973 100644 --- a/test/gtest_param_server.cpp +++ b/test/gtest_param_server.cpp @@ -24,6 +24,9 @@ TEST(ParamsServer, Default) EXPECT_EQ(server.getParam<double>("should_not_exist", "2.6"), 2.6); EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active", "true"), false); EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance", "23"), 23); + EXPECT_THROW({ server.getParam<unsigned int>("test error"); }, std::runtime_error); + EXPECT_NE(server.getParam<unsigned int>("my_proc_test/time_tolerance"), 23); + EXPECT_EQ(server.getParam<bool>("my_proc_test/voting_active"), false); } int main(int argc, char **argv) { -- GitLab