ROS 初级 - 服务和参数
版权声明:本文为 DLonng 原创文章,可以随意转载,但必须在明确位置注明出处!
1、ROS Services
ROS 服务是 ROS 提供的一种节点之间相互通信的方式,一个服务允许节点发送一个请求 request 或者接收一个响应 response。
2、rosservice
rosservice 命令可以对服务进行操作,比如调用服务,显示服务类型等,如下:
rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri
2.1 rosservice list
list 命令能够列出当前运行的节点提供的所有服务,让我们先来运行上一篇博客的小乌龟节点,先运行 roscore:
roscore
再开启一个新终端启动小乌龟节点,也可以在一个终端中分屏,参考这篇文章:
rosrun turtlesim turtlesim_node
然后使用 list 命令查看当前运行的小乌龟节点提供的服务:
rosservice list
/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
你的输出应该跟上面类似,再来详细看看一个服务的类型。
2.2 rosservice type
type 命令显示服务的类型,即这个服务发送和接收请求的数据类型:
rosservice type [service]
来看看 clear 服务的 type:
rosservice type /clear
std_srvs/Empty
输出显示这个 clear 服务的类型为空,为什么呢?这是因为 clear 服务是清除功能,调用这个服务不需要传递参数,自然也就不需要指定服务的 type 了。
那如何来调用服务呢?
2.3 rosservice call
Call 命令使用方法如下:
rosservice call [service] [args]
来调用 clear 服务试试,这个服务不需要传递参数:
rosservice call /clear
可以发现小乌龟窗口背景中的白色路劲线被清除了,恢复成刚运行的样子:
那🈶参数的服务如何调用呢?再来看看 spawn 服务的参数,这个服务可以在指定的位置和方向产生一个新的小乌龟:
rosservice type /spawn | rossrv show
float32 x
float32 y
float32 theta
string name
---
string name
来调用这个服务试试吧:
rosservice call /spawn 2 2 0.2 ""
上面的调用命令中的 2 2 0.2 “” 分别对应 spawn 服务的 4 个参数,其中 name 没有指定,但系统会自动赋值一个名称,运行的结果如下,产生一个新的小乌龟:
并且运行完 spawn 服务后,命令行会返回新产生小乌龟的名称,我们调用的时候没有指定名称 name,所以系统就自己取了名字:
name:tutle2
3、rosparam
rosparam 命令允许我们在 ROS 参数服务器上存储和操作数据,数据类型包括:整数,浮点,字符串,布尔,字典,列表,rosparam 使用 YAML 标记语言来作为数据的语法,如下:
- 1:整数
- 1.0:浮点
- one:字符串
- true:布尔
- {a:b, c:d}:字典
- [1, 2, 3]:列表
rosparam 常用的命令如下:
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
下面就用这些命令来看看小乌龟有哪些参数。
3.1 rosparam list
保持之前的小乌龟节点运行,然后在命令行键入 list 命令:
rosparam list
输出以下参数,其中前 3 个是小乌龟窗口的背景颜色参数:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_57aea0986fef__34309
/rosversion
/run_id
我们可以使用 set 和 get 命令来修改和获取对应参数的值。
3.2 rosparam set & get
我们先来改变以下背景颜色中 red 通道的颜色值:
# using: rosparm set [param_name] [param_value]
rosparam set /background_r 150
修改了参数后,我们需要重新调用 clear 服务:
rosservice call /clear
可以看到小乌龟窗口的背景颜色改变了:
再来使用 get 命令获取 G 通道的值:
rosparam get /background_g
86
如何获取全部的参数呢?get /
即可:
rosparam get /
background_b: 255
background_g: 86
background_r: 150
roslaunch:
uris: {'aqy:51932': 'http://aqy:51932/'}
run_id: e07ea71e-98df-11de-8875-001b21201aa8
3.3 rosparam dump & load
dump 和 load 命令可以存储和恢复我们设置的参数,方便直接恢复已经设置过的参数:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
我们来将刚才的小乌龟的参数存储到文件中:
rosparam dump params.yaml
再重新将这个文件加载回来,放到一个新的命名空间 copy 中:
rosparam load params.yaml copy
rosparam get /copy/background_b
255
本文原创首发于微信公号「登龙」,分享机器学习、算法编程、Python、机器人技术等原创文章,扫码即可关注!
DLonng at 11/30/19