zoukankan      html  css  js  c++  java
  • ROS学习笔记(一) # ROS参数服务器

    参考 roscpp/Overview/Parameter Server

    0. 概述

        ROS参数服务器能够保存 string, int, float, double, bool, list, dictionaries, base64 encoded类型的数据,如果需要保存其他类型可以使用 XmlRpc::XmlRpcValue class

        roscpp 有两种不同的参数API

        1. bare 版本        ros::param 接口

        2. handle 版本     ros::NodeHandle 接口

    1. 在参数服务器获取参数

         ros::NodeHandle::getParam()  

        获得的参数相对节点句柄(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))
    {
      ...
    }
    
    // 默认值
    nh.param<std::string>("default_param", default_param, "default_value");
    

        1.2 ros::param::get()

        获得的参数相对node名称空间进行解析

    std::string global_name, relative_name, default_param;
    if (ros::param::get("/global_name", global_name))
    {
      ...
    }
    
    if (ros::param::get("relative_name", relative_name))
    {
      ...
    }
    
    // 默认值
    ros::param::param<std::string>("default_param", default_param, "default_value");
    

        1.3 缓存参数

         ros::NodeHandle::getParamCached()

         ros::param::getCached()

         这两个函数可以完成本地参数的缓存,命令参数服务器一旦参数变化就立即通知这个节点。可以大大提高速度(首次调用之后),但是为了防止重载,应该谨慎使用。

    2. 设置参数

         ros::NodeHandle::setParam()

         通过NodeHandle版本检索的参数相对于NodeHandle的名称空间来解析。

    ros::NodeHandle nh;
    nh.setParam("/global_param", 5);
    nh.setParam("relative_param", "my_string");
    nh.setParam("bool_param", false);
    

         ros::param::set()

         通过“bare”版本检索的参数将相对于节点的名称空间解析。

    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 接口必须创建一个新的 ros::NodeHandle 以一个私有名称空间作为其名称空间。

    ros::NodeHandle nh("~");
    std::string param;
    nh.getParam("private_name", param);
    

        ros::param 版本

     std::string param; ros::param::get("~private_name", param);
    

     6. 

    有时候你需要从最近的工作空间获取参数。比如,如果你有一个名为 “robot_name” 的参数,你只想从自己的私有名称空间开始向上搜索知道找到匹配参数。

    类似的,如果你有一组摄像机节点,你可能希望在一个公共的名称空间里共同设置一些参数但是在私有名称空间里重写其他参数。

    注意: 为了使搜索更加高效, you should use it with relative names instead of /global and ~private names.

    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);
    }
    

     

  • 相关阅读:
    java的继承---包装器与自动装箱
    linux开机启动过程,很多人说的不太清楚的看看。
    黑盒测试/三角形(OC)
    git 忽略一些文件的提交
    volley 框架的使用
    如何通过阿里百川的集成,以及manifest的权限配置完成淘客商品详情页的链接
    抓取网站访问者的QQ号码
    写写东西吧
    Android 强制实现下线功能
    Android 新闻显示界面且适应平板
  • 原文地址:https://www.cnblogs.com/lvchaoshun/p/6873142.html
Copyright © 2011-2022 走看看