• ROS学习之参数


    ROS学习之参数

            除 了 前 面 介 绍 过 的 消 息 传 递 , ROS 还 提 供 另 一 种 参 数( parameters )机制用于获取节点的信息。其主要思想是使用集中参数服务器( parameter server )维护一个变量集的值,包括整数、浮点数、字符串以及其他数据类型,每一个变量用一个较短的字符串标识  。由于允许节点主动查询其感兴趣的参数的值,它们适用于配置那些不会随时间频繁变更的信息。

    0.1命令行指令

    0.1.1参数列表

    rosparam list 显示当前所有参数

        注意:在当前版本的 ROS 中,参数服务器是节点管理器的一部分,因此,它总是通过 roscore 或者 roslaunch 自动启动。在所有情况下,参数服务器都能在后台正常工作,因此没有必要去花心思考虑它。然而,需要铭记的是,所有的参数都属于参数服务器而不是任何特定的节点。这意味着参数——即使是由节点创建的——在节点终止时仍将继续存在。

    0.1.2查询参数

    rosparam get parameter_name  查询某个参数值

        例如,如下命令将读取参数/rosdistro 的值:
    rosparam get /rosdistro
        其输出为字符串 indigo,这并不奇怪(译者注:rosdistro 指ROS 的版本,如果读者使用其他的发行版,将产生不同的输出)。

    0.1.3设置参数

    rosparam set parameter_name parameter_value
        该命令可以修改已有参数的值或者创建一个新的参数。例如,以下命令可以创建一系列字符串参数,用以存储一组卡通鸭子的颜色偏好:
    rosparam set /duck_colors/huey red
    rosparam set /duck_colors/dewey blue
    rosparam set /duck_colors/louie green
    rosparam set /duck_colors/webby pink

         另外,我们可以同时设置同一命名空间中的几个参数:
    rosparam set namespace values
         这里要以 YAML 字典的形式表示参数和对应值的映射关系。
         下面的例子和前面四行命令具有同样的作用:
    rosparam set /duck_colors "huey: red
    dewey: blue
    louie: green
    webby: pink"
         需要注意的是,这种语法需要在命令中使用换行符。当然,这并不会造成什么问题,因为第一个引号告诉 bash 命令尚未完成。当在引号内按下回车时,终端将插入一个换行符而不是执行命令。

    0.1.4创建和加载参数文件
          为了以 YAML 文件的形式存储命名空间中的所有参数,可以使用 rosparam dump 命令:
    rosparam dump filename namespace
          与 dump 相反的命令是 load,它从一个文件中读取参数,并将它们添加到参数服务器:
    rosparam load filename namespace

    0.2用C++获取参数

        使用ROS参数的C++接口是相当简单的:
    void ros::param::set(parameter_name, input_value);
    bool ros::param::get(parameter_name, output_value);
        在这两种情况下,参数名是一个字符串,它可以是全局的、相对的或者是私有的。set 函数中的输入值 input_value 可以是std::string、bool、int 或 double 类型;get 函数的输出值应该是上述某个类型的变量(通过引用传递)。如果参数值读取成功,则get 函数返回 true;如果出现了问题,通常表示所请求的参数还没有被指定一个值,则该函数返回 false。举例如下:

    ros::param::set ("background_r" , 255) ;
    ros::param::set ("background_g" , 255) ;
    ros::param::set ("background_b" , 0) ;
    

    以上为设置我们的背景颜色参数。

    const std::string PARAM_NAME = "~max_vel" ;
    double maxVel ;
    bool ok = ros::param::get (PARAM_NAME, maxVel) ;
    

     以上为读取“~max_vel”参数值,并存储到本地变量maxvel中。

    0.3在启动文件中设置参数

    0.3.1设置参数

       可以使用param元素请求roslaunch设置参数值 :<param name="param-name" value="param-value" />这个元素,正如你所猜测的,将给定的值赋给给定名称的参数。通常,这个参数名是相对的。例如,下面的启动文件片段相当于第 129 页的 rosparam 命令集:
    <group ns="duck_colors">
    <param name="huey" value="red" />

    0.3.2私有参数

    设置私有参数 另一个可选方法是在节点元素中包含 param 元素。
    <node . . . >
    <param name="param-name" value="param-value" />
    . . .
    </node>
    在该结构下,参数名将被当做该节点的私有名称。


    0.3.3在文件中读取参数

        最后,启动文件也支持 与rosparam load等价的命令,可以一次性从文件中加载多个参数 7 :
    <rosparam command="load" file="path-to-param-file" />
        这里列出的参数文件通常是通过 rosparam dump 命令创建的。与其他特定文件的引用相同(例如 6.5.1 节的 include 元素),使用查找替换来指定功能包的相对路径是常见做法:
    <rosparam
    file="$(find package-name)/param-file"
    />
    与 rosparam load 一样,这个功能有助于测试,因为它允许用
    户重现在过去的某个时间有效的参数。

  • 相关阅读:
    HTML5(3) 拖放(Drag 和 Drop)
    HTML5(2) 画布Canvas
    HTML5(1) 介绍
    C#(99):System.IO.Path文件路径类
    SQL Server(00):逻辑函数
    SQL Server(00):删除表中的重复数据
    DevExpress03、XtraGrid(1)基本应用
    DevExpress11、TreeList
    DevExpress10、RichEditControl
    XtraEditors五、SpinEdit、TimeEdit
  • 原文地址:https://www.cnblogs.com/flyingjun/p/8856981.html
Copyright © 2020-2023  润新知