本文内容来自官方wiki:http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams
- ROS服务(service)
服务也是ROS中一种通信机制,但是不同于主题的发布和订阅,服务采取了一种“请求(request)-响应(response)”的机制来进行数据交换。
和服务有关的功能可以使用rosservice命令来进行。
rosservice list 列出活动的服务信息 rosservice call 使用给定参数调用服务 rosservice type 打印出服务类型 rosservice find 查找给定类型的服务 rosservice uri 打印服务的ROSRPC 源
- rosservice list
该命令列出当前活动的服务,例如在小乌龟的例子中,我们运行rosservice list
返回如下:
$ rosservice list /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /rostopic_21128_1568429034667/get_loggers /rostopic_21128_1568429034667/set_logger_level /rostopic_25467_1568471203069/get_loggers /rostopic_25467_1568471203069/set_logger_level /rqt_gui_py_node_25560/get_loggers /rqt_gui_py_node_25560/set_logger_level /rqt_gui_py_node_25926/get_loggers /rqt_gui_py_node_25926/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
然后,使用rosservice type可以查看服务类型:
$ rosservice type /clear std_srvs/Empty
返回Empty表示该服务不用指定参数,即只表示一个功能动作,而无需数据。
- rosservice call
使用rosservice call可以调用服务。
用法如下:rosservice call [service] [args]
例如,想调用/clear,则使用如下语句:
rosservice call /clear
则会清除掉小乌龟移动留下的轨迹。
我们可以看一下带有参数的服务/spwan的参数:
$ rosservice type /spawn | rossrv show float32 x float32 y float32 theta string name --- string name
可以看出/spawn服务类型的数据参数为3个float32表示位置(x,y)和朝向theta和一个字符串表示名字name。
用如下命令调用该服务:rosservice call /spawn 2 2 0.2 ""
则产生另外一个小乌龟:
- rosservice list
- ROS参数(rosparam)
rosparam允许在ROS参数服务器(Parameter Server)中存储并操作参数(个人理解类似于编程中的全局变量)。参数服务器采取YAML标记语言来存储如下数据类型:
integers(整型), floats(浮点型), boolean(布尔型), dictionaries(字典(键值类型)), 和lists(列表类型)。参数相关操作使用rosparam命令进行,用法如下:
rosparam set 设置参数值 rosparam get 获取参数值 rosparam load 从文件加载参数 rosparam dump 存储参数到文件 rosparam delete 删除参数 rosparam list 列出参数名
- rosparam list
该命令可以列出所有参数名,例如:
$ rosparam list /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_localhost__35773 /rosversion /run_id
-
rosparam set和rosparam get
可以通过rosparam set设置参数值,例如如下命令设置背景色中的红色通道值为200:rosparam set /background_r 200
必须再调用clear服务来刷新背景:
$ rosservice call /clear
则背景变成粉红色
使用如下命令可以获得该背景中的绿色:
$ rosparam get /background_g 86
使用rosparam get /命令可获得所有参数值:
$ rosparam get / background_b: 255 background_g: 86 background_r: 200 rosdistro: 'kinetic ' roslaunch: uris: {host_localhost__35773: 'http://localhost:35773/'} rosversion: '1.12.14 ' run_id: d0977b84-d694-11e9-b3cd-502b73e82f34
-
rosparam dump和rosparam load
可以使用rosparam dump存储参数,使用rosparam load加载参数:rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace]
可以指定参数文件名和命名空间
如下命令将当前命名空间中的所有参数写入params.yaml文件。$ rosparam dump params.yaml
如下命令从params.yaml文件中加载所有参数到copy命名空间。
$ rosparam load params.yaml copy
然后可以读取该空间中的参数:
$ rosparam get /copy/background_b
255
- rosparam list