ROS的参数服务器使用纪要

来源:互联网 发布:qq飞车神影官方数据 编辑:程序博客网 时间:2024/06/10 00:37

1.使用意义

参数服务器的使用旨在提高ROS 节点的灵活性和可配置性,其意义从两个方面去理解:

  1. 在机器人系统中,参数传递十分重要,无论是传感器的设置,还是控制参数的调整,都需要留出方便的参数调试接口。使用参数服务器配置系统的参数,是全局可见的,方便我们检索和更改系统的配置状态。
  2. 参数服务器为ROS节点之间提供了另一种信息交互方式(常用的方式还有消息和服务)。其主要思想是使用集中参数服务器( parameter server )维护一个变量集的值,节点可以主动查询其感兴趣的参数的值。

2. 使用要点

ROS为我们提供了操作参数的roslaunch .launch接口、命令行接口、roscpp接口和rospy接口,使用要点如下:

2.1 roslaunch .launch接口

该接口用于在启动的时候将参数配置好。用launch文件配置参数的好处:1、可以不查看源程序就可以知道节点用到的参数以及给定的初始值;2、要修改参数的初始值,可以将它保存到launch文件而不必修改和重新编译源程序。

  1. 使用<param>标签直接定义参数

    <param name="publish_frequency" type="double" value="10.0" />
  2. 使用标签<rosparam>配置参数

    • 从YAML文件读取参数:

      <rosparam command="load" file="$(find rosparam)/example.yaml" />

      其中,YAML文件的格式为:

      param1: value1param2: value2......
    • 删除参数

      <rosparam command="delete" param="my/param" />
    • 直接赋值参数

      <rosparam param="a_list">[1, 2, 3, 4]</rosparam>

      或者

      <rosparam>  a: 1  b: 2</rosparam>

2.2 命令行接口

该接口使我们可以通过命令行参数灵活地查看和配置参数。

rosparam set    set parameterrosparam get    get the value of parameterrosparam load   load parameters from filerosparam dump   dump parameters to filerosparam delete delete parameterrosparam list   list parameter names

范例

$ rosparam list /namespace$ rosparam get parameter_name$ rosparam set parameter_name value$ rosparam delete parameter_name 

2.3 roscpp参数接口

该接口使我们能够定制ROS节点如何处理参数。roscpp的参数API有两套:一套在ros::param名字空间下,另一套封装在handle中,通过ros::NodeHandle接口访问:

  1. 为参数设置默认值

    • nh.param<<variable_type>>("<param_name>", variable, <default_value>);
    • ros::param::param<<variable_type>>("<param_name>", variable, <default_value>);

    上述代码功能是用名为<param_name>、值为<default_value>的参数初始化类型的变量variable。

  2. 从参数服务器获取一个参数值。

    • ros::NodeHandle::getParam("<param_name>", variable)
    • ros::param::get("<param_name>", variable)

    上述代码功能是从参数服务器获取名为<param_name>的参数的值,赋值给变量variable

    • cache方式获取

    ros::NodeHandle::getParamCached() and ros::param::getCached() provide local caching of parameter data. Using these versions informs the Parameter Server that this node would like to be notified when the parameter is changed, and prevents the node from having to re-lookup the value with the parameter server on subsequent calls.

    Cached parameters are a significant speed increase (after the first
    call), but should be used sparingly to avoid overloading the master. Cached parameters are also currently less reliable in the case of intermittent connection problems between your node and the master.

  3. 配置参数

    ros::NodeHandle::setParam("<param_name>",<param_value>)
    ros::param::set("<param_name>",<param_value>)

    将参数<param_name>赋值为<param_value>

  4. 判断参数是否存在

     -ros::NodeHandle::hasParam("<param_name>")
     -ros::param::has("<param_name>")

     判断参数<param_name>是否存在

  5. 删除参数

    • ros::NodeHandle::deleteParam("<param_name>")
    • ros::param::del("<param_name>")

    删除参数<param_name>

原创粉丝点击