本教程介绍了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
又回到了刚才这个背景颜色

本文深入探讨了ROS(机器人操作系统)中的服务通信机制和服务工具rosservice的使用,包括服务列表、类型查询、调用方法,以及参数服务器的操作,如参数的设置、获取、存储和加载。
422

被折叠的 条评论
为什么被折叠?



