依旧是上一期指路:ROS wiki系列|通过ROS wiki-tutorials学习话题
前面讲了节点和话题,我们接下来讲服务和参数,走你~
同样甩上我们今天的教程页面链接:Understanding ROS Services and Parameters
本教程介绍了ROS服务、参数以及rosservice和rosparam命令行工具的使用。
老规矩 roscore 小海龟 键盘控制 跑起来(ROS wiki连贯性真强哈哈)
1.ROS Services
除了话题之外,服务是节点可以相互通信的另一种方式。服务允许节点发送请求并接收响应。
2.Using rosservice
rosservice可以通过服务轻松地附加到ROS的客户端/服务框架上。rosservice有很多命令可以在服务上使用,如下所示:
rosservice list 打印活跃服务的信息
rosservice call 使用提供的参数调用服务
rosservice type 打印服务类型
rosservice find 按服务类型查找服务
rosservice uri 打印服务ROSRPC uri
2.1 rosservice list
在终端运行rosservice list(小海龟开着对吧 别忘记开啊)
list命令向我们显示 turtlesim 节点提供的九种服务,还有两个与单独的rosout节点相关的服务:/rosout/get_loggers和/rosout/set_logger_level。
2.2 rosservice type
使用方法:rosservice type [服务名]
举例:rosservice type /clear
终端将会打印:std_srvs/Empty
此服务为空,这意味着当服务调用时,它不带任何参数(即,它在发出请求时不发送任何数据,在接收响应时不接收任何数据)。
我们可以试下使用rosservice call来调用此服务。
2.3 rosservice call
使用方法:rosservice call [service] [args]
举例:rosservice call /clear(在这里,我们将不带任何参数调用,因为服务类型为空)
效果:清除了turtlesim_node的背景
让我们通过查看服务spawn的信息来看看服务有参数的情况:rosservice type /spawn | rossrv show
这项服务允许我们在给定的位置和方向生成一只新的海龟,名称字段是可选的,所以这里我们不要给我们的新海龟起一个名字,让 turtlesim 为我们创建一个。
运行:rosservice call /spawn 2 2 0.2 “”
终端返回:name: turtle2
你将会看到两只龟龟be like:
3.Using rosparam
rosparam允许您在ROS参数服务器上存储和操作数据。参数服务器可以存储整数、浮点数、布尔值、字典和列表。rosparam使用YAML标记语言进行语法。在简单的情况下,YAML看起来非常自然:1是一个整数,1.0是一个浮点数,1是一个字符串,true是一个布尔值,[1,2,3]是一个整数列表,{a: b, c: d}是一个字典。rosparam有很多命令可以用于参数,如下所示:
rosparam set 设置参数
rosparam get 获取参数
rosparam load 从文件加载参数
rosparam dump 转储参数到文件
rosparam delete 删除参数
rosparam list 列出参数名称
3.1 rosparam list
运行:rosparam list
在这里,我们可以看到 turtlesim 节点在参数服务器上有三个参数用于背景颜色:
接下来我们来搞搞颜色~
3.2 rosparam set and rosparam get
使用方法:
rosparam set [param_name]
rosparam get [param_name]
首先我们改一下背景颜色中的红色:
rosparam set /turtlesim/background_r 150
参数值更改后,我们必须调用 clear 服务使参数更改生效:
rosservice call /clear
然后就变色啦~
我们看一下参数服务器上其他参数的值,让我们来获取绿色背景通道的值:
rosparam get /turtlesim/background_g
you will get:86
我们还可以使用rosparam get / 显示整个参数服务器的内容:rosparam get /
您可能希望将其存储在文件中,以便可以在其他时间重新加载它,简单,rosparam一样可以满足你
3.3 rosparam dump and rosparam load
使用方法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
我们将所有参数写入文件params.yaml:
rosparam dump params.yaml
我们甚至可以将这些yaml文件加载到新的命名空间中,例如copy_turtle:
rosparam load params.yaml copy_turtle
rosparam get /copy_turtle/turtlesim/background_b
get:255
ok,今天就到这里,下篇再见朋友们!