1 . 获取参数
从参数服务器获取一个参数。每个版本都支持strings, integers, doubles, booleans and XmlRpc::XmlRpcValues。如果参数不存在或者类型不正确的话返回false。也有的版本返回一个默认值。
ros::NodeHandle::getParam() 参数通过NodeHandle版本找回被解析到NodeHandle的命名空间中。
ros::NodeHandle nh; std::string global_name, relative_name, default_param; if (nh.getParam("/global_name", global_name)) { ... } if (nh.getParam("relative_name", relative_name)) { ... } // Default value version nh.param<std::string>("default_param", default_param, "default_value");ros::param::get() 参数通过“bare”版本获取被解析到节点的命名空间。
std::string global_name, relative_name, default_param; if (ros::param::get("/global_name", global_name)) { ... } if (ros::param::get("relative_name", relative_name)) { ... } // Default value version ros::param::param<std::string>("default_param", default_param, "default_value");1.1 缓存的参数 ros::NodeHandle::getParamCached()和ros::param::getCached()提供本地的参数数据的缓存。使用这些版本通知参数服务器,当参数改变的时候节点可能被通告,并且阻止节点在接下来的调用中用参数服务器重新查找值。 被缓存的参数在第一次调用后有一个很显著的速度增加,但是应该节省使用以避免主机的过载。缓存的参数也是不可靠的,当节点和主机时断时续的连接的时候。
2 . 设置参数
和获得参数类似,每个版本都支持 strings, integers, doubles, booleans and XmlRpc::XmlRpcValues。
ros::NodeHandle::setParam()
ros::NodeHandle nh; nh.setParam("/global_param", 5); nh.setParam("relative_param", "my_string"); nh.setParam("bool_param", false);ros::param::set()
ros::param::set("/global_param", 5); ros::param::set("relative_param", "my_string"); ros::param::set("bool_param", false);3 . 检查参数的存在性
ros::NodeHandle::hasParam()
ros::NodeHandle nh; if (nh.hasParam("my_param")) { ... }ros::param::has()
if (ros::param::has("my_param")) { ... }4 . 删除参数
ros::NodeHandle::deleteParam()
ros::NodeHandle nh; nh.deleteParam("my_param");ros::param::del()
ros::param::del("my_param");5 . 获取私有参数
获取私有参数依赖于是否使用“handle”还是“bare”接口。在handle接口中,必须用私有命名空间作为它的命名空间创建一个新的 ros::NodeHandle 。
ros::NodeHandle nh("~"); std::string param; nh.getParam("private_name", param);在bare接口中,可以用相同的符号描述它们收发私有参数。
std::string param; ros::param::get("~private_name", param);6 . 搜索参数keys
有很多次,其中想要从最接近的命名空间获得一个参数。如果有一个“robot_name”参数,仅仅想要从私有命名空间向上搜索,直到找到一个匹配的参数。
Note:为了有效的使用search,应该用相对名称替代/global和私有名称。 ros::NodeHandle::searchParam()
std::string key; if (nh.searchParam("bar", key)) { std::string val; nh.getParam(key, val); }ros::param::search()
std::string key; if (ros::param::search("bar", key)) { std::string val; ros::param::get(key, val); }