本教程介绍了ROS 服务和参数的知识,以及命令行工具rosservice 和 rosparam的使用方法。
文章目录
1 什么是ROS服务
service服务是节点之间的另外一种通信方式。
service服务允许一个节点发送一个请求 request 和接受一个回复 response 。
2 rosservice用法
rosservice
命令可以在client/service
之间的框架中,快速显示服务。
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
运行小海龟:
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
输入查看rosservice list
命令:
/clear # 清除
/kill # 终止
/reset # 重置
# rosout节点提供的服务
/rosout/get_loggers
/rosout/set_logger_level
/rqt_gui_py_node_6571/get_loggers
/rqt_gui_py_node_6571/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
标准用法:
$ rosservice type [service]
例如:
$ rosservice type /turtlesim/get_loggers
# echo
roscpp/GetLoggers
2.3 rosservice call
标准用法:
$ rosservice call [service] [args]
例如:
$ rosservice call /clear
发现路径被清除了。
➜ ~ rosservice type /spawn | rossrv show
# echo
float32 x
float32 y
float32 theta
string name
---
string name
spawn
命令可以在特定的位置(x, y)和方位theta重生一只小海龟
➜ ~ rosservice call /spawn 2 2 0.2 "liukai_turtle"
# echo
name: "liukai_turtle"
现在看起来应该是这样子,有2只小乌龟了
3 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 列出参数名
3.1 rosparam list
$ rosparam list
我们可以看到turtlesim节点在参数服务器上有3个参数用于设定背景颜色:
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_pc__46837
/rosversion
/run_id
3.2 rosparam set 和 rosparam get
标准用法:
rosparam set [param_name]
rosparam get [param_name]
例如设置背景颜色:
➜ ~ rosparam set /background_r 150
➜ ~ rosparam set /background_g 150
➜ ~ rosparam set /background_b 150
➜ ~ rosservice call /clear
# 直接获取所有参数
➜ ~ rosparam get /
# echo
background_b: 150
background_g: 150
background_r: 150
rosdistro: 'kinetic'
roslaunch: uris: {host_pc__46837: 'http://pc:46837/'}
rosversion: '1.12.14'
run_id: 77171690-9d38-11e9-8214-40a5eff3ee5c
3.3 rosparam dump 和 rosparam load
标准用法:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
把我们刚才的这些参数保存下来:
$ rosparam dump params.yaml
清除所有参数:
# 清除所有参数:
$ rosparam delete /
# 重新运行一次服务
$ rosservice call /clear
查看保存的参数文件:
$ rosparam list
# echo
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_pc__46837
/rosversion
/run_id
再把我们刚才保存的params.yaml
加载进来:
# 加载保存好的参数
$ rosparam load params.yaml
# 重新运行一次服务
$ rosservice call /clear
又回到了刚才这个背景颜色