参数服务的使用

关键词:getParam(); setParam();yaml

背景代码:

..........

ros::NodeHandle na;

std::string initNodeName ;

na.getParm("nodeName", initNodeName);

.............

疑问:1/nodeName没有见到有定义的地方?2/代码字面意思应该是从某个地方取值赋给变量initNodeName,可是nodeName中的值从何而来?

解答:

    1/nodeName实际上是ros系统中提供的一种参数服务器的用法,实际上有地方对该参数服务器进行了定义;

    2/其意义类似于内存共享原理,(可以利用ros中的指令或者在代码中使用setParam()对这个参数服务器进行赋值,然后再使用getParam()接口提取参数服务器中的值进行使用);

 

参数服务器的基本使用:

  ros系统中的主要通信为话题、服务、动作,从大框架的角度来看参数服务器也可以当做是一种节点间的通信方法,其用法类似供所有节点使用的全局变量,这样的方法十分的灵活,但是又是需要特别的注意;

  机器人工作时,我们有需要对机器人的参数(如传感器参数、算法的参数)进行设置。其中有些参数是要对应于特定的场景有不同的功能或者是算发等的选择,这个时候有一个可以自由控制的外部接口将会是很舒服的一件事。参数服务器正好可以解决这个问题,并且不止可以单个的参数修改(使用:rosparam指令可以都参数服务器实现设置/获取.......),同时也可以通过.yaml文件对参服务器进行批量的下发(对应的指令为 :rosparam load XXX.yaml)。

  使用命令对参数服务器的使用:

    查看参数服务器列表:rosparam list

    获取参数服务器:rosparam get 参数服务器名称

    设置参数服务器值:rosparam set 参数服务器名称 “ 根据定义YAML格式参数服务器的类型需要设置的值(如:p: 1.0)”

    加载到文件中:rosparam dump 转储数据文件名称

    从文件中加载: rosparam load 文件名称(.yaml文件)

    删除一个参数服务器:rosparam delete 参数服务器名称

  使用.launch文件对参数服务器的操作(需要使用到命令:roslaunch 节点报名 .launch文件名称):

    定义一个数:

    文件格式类似如下:

      定义了一个名为“robot_type”,string类型的值为“clean”的参数服务器(这个参数服务器可以当做配置文件使用,在代码中做不同分支处理)

      <launch>

        <param name = "robot_type", type = "string", value = "clean">

      </launch>

    使用roslaunch从文件中加载参数服务器(相当于运行:rosparam load jnt1_gains.yaml);

      <launch>

        <rosparam command = "load" file = "jnt1_gains.yaml" />    

      </launch>      

  (.yaml文件格式和使用方法链接:https://www.ibm.com/developerworks/cn/xml/x-1103linrr/

  .yaml简介

    基本格式:
      key :value

      如:(注意:冒号后面必须要有空格)

        name : "robot_type"

        hight : 1999

        weith: 2000

        weight: 30000

posted on 2019-12-02 15:07  高山上的星星  阅读(254)  评论(0编辑  收藏  举报