参数服务器

    xiaoxiao2023-06-01  3

    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); }
    转载请注明原文地址: https://ju.6miu.com/read-1262201.html
    最新回复(0)