diff --git a/include/base/params_server.hpp b/include/base/params_server.hpp
index b7fe91f30e963c3236347f09693d9b5047723f77..55f268d78a5e573eb1eb48d187cdc7690e9805b1 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 3f28b915dbe77793d579342ef13e5d3133ee2cef..9a66768a99a28ebfd32bfc1346f613020c11d848 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 5d200dd0835e5018adeb8a900cb708824326ae5e..33e92c38e204aa62871eb7c8f540e30a89937fd6 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 1033e3347dd477a69dbcbac9b64aafe10d31534b..fa3984253c94434b029bd408e516824540e285c8 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 e1f443f8a22d218813bc0e9d48e8df8aeec1b320..dd2e8570054406203a23139a67aeba521c0098ec 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 8d2cd2e8248f1a1110cc5416d5c2cccc0dfb89e9..44bd1dd0b55361942e5a8ab06c34b18495b5dceb 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 b601875b987e42279f77abf63310fc48e202824f..2f8a13f0e88090c8fcf86f608ef6a30e000c1840 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 1d71d926df8cf7a1ea84f43f2b9754183305e170..934ef26150ced15aac4a8d18aa0cba24b755b483 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 3f3c6c4345cc31fdefed9f67d9f559dd7e1c4473..c1128098e4259026bd9dcb61f8608b21f6a45585 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 9dc28c7e4af19f090db038a384eb0cd7ade1198b..a17791973925eb6a9adfccb9ab7548ad3f85cffa 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)
 {