1 #ifndef SWRI_ROSCPP_PARAMETERS_H_ 2 #define SWRI_ROSCPP_PARAMETERS_H_ 9 #include <boost/bind.hpp> 23 const std::string &
name,
27 _used_params.insert(resolved_name);
30 ROS_ERROR(
"Required int parameter %s does not exist", name.c_str());
33 ROS_INFO(
"Read parameter %s = %d", name.c_str(), variable);
39 const std::string &
name,
43 _used_params.insert(resolved_name);
46 ROS_ERROR(
"Required double parameter %s does not exist", name.c_str());
49 ROS_INFO(
"Read parameter %s = %lf", name.c_str(), variable);
55 const std::string &
name,
61 ROS_ERROR(
"Required double parameter %s does not exist", name.c_str());
65 ROS_INFO(
"Read parameter %s = %f", name.c_str(), variable);
71 const std::string &
name,
72 std::string &variable)
75 _used_params.insert(resolved_name);
78 ROS_ERROR(
"Required string parameter %s does not exist", name.c_str());
81 ROS_INFO(
"Read parameter %s = %s", name.c_str(), variable.c_str());
87 const std::string &
name,
91 _used_params.insert(resolved_name);
94 ROS_ERROR(
"Required bool parameter %s does not exist", name.c_str());
97 ROS_INFO(
"Read parameter %s = %s", name.c_str(), variable ?
"true" :
"false");
103 const std::string &
name,
105 const int default_value)
108 _used_params.insert(resolved_name);
109 nh.
param(name, variable, default_value);
110 ROS_INFO(
"Read parameter %s = %d", name.c_str(), variable);
115 const std::string &
name,
117 const double default_value)
120 _used_params.insert(resolved_name);
121 nh.
param(name, variable, default_value);
122 ROS_INFO(
"Read parameter %s = %lf", name.c_str(), variable);
127 const std::string &
name,
129 const float default_value)
132 double dbl_default = default_value;
133 nh.
param(name, dbl_value, dbl_default);
134 variable = dbl_value;
135 ROS_INFO(
"Read parameter %s = %f", name.c_str(), variable);
140 const std::string &
name,
141 std::string &variable,
142 const std::string default_value)
145 _used_params.insert(resolved_name);
146 nh.
param(name, variable, default_value);
147 ROS_INFO(
"Read parameter %s = \"%s\"", name.c_str(), variable.c_str());
152 const std::string &
name,
154 const bool default_value)
157 _used_params.insert(resolved_name);
158 nh.
param(name, variable, default_value);
159 ROS_INFO(
"Read parameter %s = %s", name.c_str(), variable ?
"true" :
"false");
172 inline int comparePrefix(std::string
const&
string, std::string
const& prefix)
174 return string.compare(0, prefix.size(), prefix);
186 inline bool isPrefixOf(std::string
const&
string, std::string
const& prefix)
228 std::vector<std::string> all_params;
232 std::sort(all_params.begin(), all_params.end());
236 boost::function<bool(std::string)> inNamespace = boost::bind(
isPrefixOf, _1, n_namespace);
238 std::vector<std::string>::const_iterator first_param_in_namespace = find_if(all_params.begin(), all_params.end(), inNamespace);
240 std::vector<std::string>::const_iterator after_last_param_in_namespace = find_if(all_params.begin(), all_params.end(), std::not1(inNamespace));
245 std::vector<std::string> unused_params(all_params.size());
248 std::vector<std::string>::iterator last_unused_param = std::set_difference(
249 first_param_in_namespace, after_last_param_in_namespace,
250 _used_params.begin(), _used_params.end(),
251 unused_params.begin(),
256 unused_params.resize(last_unused_param - unused_params.begin());
258 return unused_params;
270 for (std::vector<std::string>::const_iterator itr = unused_params.begin(); itr != unused_params.end(); ++itr)
272 ROS_WARN(
"Parameter %s was set, but not used by this node", itr->c_str());
276 #endif // SWRI_ROSCPP_PARAMETERS_H_ static std::set< std::string > _used_params
int prefixLessThan(std::string const &string, std::string const &prefix)
static std::vector< std::string > getUnusedParamKeys(ros::NodeHandle const &n)
int comparePrefix(std::string const &string, std::string const &prefix)
bool isPrefixOf(std::string const &string, std::string const &prefix)
std::string resolveName(const std::string &name, bool remap=true) const
static void warnUnusedParams(ros::NodeHandle const &n)
static void param(const ros::NodeHandle &nh, const std::string &name, int &variable, const int default_value)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
const std::string & getNamespace() const
bool getParamNames(std::vector< std::string > &keys) const
bool getParam(const std::string &key, std::string &s) const
static bool getParam(const ros::NodeHandle &nh, const std::string &name, int &variable)