ROS: 理解ROS服务和参数

    技术2022-07-13  67

    理解ROS服务和参数

    ROS Services使用rosservicerosservice listrosservice typerosservice callUsing rosparamrosparam set and rosparam getrosparam dump and rosparam load 参考文献


    写个学习笔记方便自己以后看和更新


    ROS Services

    服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)

    使用rosservice

    rosservice list 输出可用服务的信息 rosservice call 调用带参数的服务 rosservice type 输出服务类型 rosservice find 依据类型寻找服务find services by service type rosservice uri 输出服务的ROSRPC uri

    rosservice list

    rosservice list

    list 命令显示turtlesim节点提供了9个服务:重置(reset), 清除(clear), 再生(spawn), 终止(kill), turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level. 同时还有另外两个rosout节点提供的服务: /rosout/get_loggers and /rosout/set_logger_level.

    /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level

    我们使用rosservice type命令更进一步查看clear服务:

    rosservice type

    用法

    rosservice type [service]

    我们来看看clear服务的类型:

    rosservice type clear

    服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)。下面我们使用rosservice call命令调用服务:

    rosservice call

    使用方法:

    rosservice call [service] [args]

    因为服务类型是空,所以进行无参数调用:

    rosservice call clear

    正如我们所期待的,服务清除了turtlesim_node的背景上的轨迹。

    rosservice type spawn| rossrv show

    这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,这里我们不设具体的名字,让turtlesim自动创建一个。

    rosservice call spawn 7 9 0.3 "hahaha"

    服务返回了新产生的乌龟的名字: 现在我们的乌龟看起来应该是像这样的:

    Using rosparam

    rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮点型, one是字符串, true是布尔, [1, 2, 3]是整型列表, {a: b, c: d}是字典. rosparam有很多指令可以用来操作参数,如下所示:

    rosparam set 设置参数 rosparam get 获取参数 rosparam load 从文件读取参数 rosparam dump 向文件中写入参数 rosparam delete 删除参数 rosparam list 列出参数名

    我们来看看现在参数服务器上都有哪些参数:

    rosparam list

    我们可以看到turtlesim节点在参数服务器上有3个参数用于设定背景颜色:

    Let’s change one of the parameter values using rosparam set:

    rosparam set and rosparam get

    rosparam set [param_name] rosparam get [param_name]

    现在我们修改背景颜色的红色通道:

    rosparam set background_r 150

    上述指令修改了参数的值,现在我们调用清除服务使得修改后的参数生效:

    rosservice call clear

    现在 我们的小乌龟看起来应该是像这样:

    现在我们来查看参数服务器上的参数值——获取背景的绿色通道的值:

    rosparam get background_g

    我们可以使用rosparam get /来显示参数服务器上的所有内容:

    rosparam get /

    你可能希望存储这些信息以备今后重新读取。这通过rosparam很容易就可以实现:

    rosparam dump and rosparam load

    rosparam dump [file_name] rosparam load [file_name] [namespace]

    现在我们将所有的参数写入params.yaml文件:

    rosparam dump params.yaml

    你甚至可以将yaml文件重载入新的命名空间,比如说copy空间:

    rosparam load params.yaml copy rosparam get copy/background_b

    参考文献

    ros官方教程

    Processed: 0.011, SQL: 9