一、ros服务
ros服务(service)是节点间交流的另外一种方式,服务类似于web中的服务端与客户端的概念,节点类似一个客户端,可以发出一个请求(request),然后接受一个响应(response)。
二、使用rosservice命令
此命令的用法如下:1
2
3
4
5rosservice 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
1、rosservice list
首先启动一个小海龟:1
roscore
1 | rosrun turtlesim turtle_teleop_key |
然后使用rosservice list
命令,我们将得到:
1 | /clear |
这条命令说明我们小海龟节点提供如上9种服务。
可以进一步使用rosservice type
查看服务的详细信息。
2、rosservice type
用法:1
rosservice type [service]
示例:1
rosservice type clear
得到:
1 | std_srvs/Empty |
服务为空,这表明在调用这个服务的时候不需要任何参数(它在生成请求时不发送任何数据和接受响应的时候也不接收任何数据)。
我们可以使用rosservice call
来调用服务。
3、rosservice call
用法:1
rosservice call [service] [args]
示例:1
rosservice call /clear
调用此服务会清除小海龟的轨迹线条。
接下来我们通过spawn服务认识一下有参数的服务:1
rosservice type spawn| rossrv show
会得到:
1 | float32 x |
使用这个服务,给定位置参数和角度参数我们可以创建一个新海龟,其中name参数是可选的,现在我们就利用此命令创建一个新海龟:1
rosservice call spawn 2 2 0.2 ""
它将返回新海龟的名字:1
name: turtle2
同时我们也可以看到在海龟窗口中多了一只不同颜色的海龟。
三、使用rosparam命令
使用rosparam
命令可以在ROS的 Parameter Server上存储和操作数据。Parameter Server可以存储integers, floats, boolean, dictionaries, and lists
类型的数据。而rosparam
命令使用YAML的语法,YAML的语法非常简单,但是要求比较严格,就不细讲了。rosparam
命令的用法如下:1
2
3
4
5
6rosparam 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
1、rosparam list命令
终端下调用此命令:1
rosparam list
得到:
1 | /background_b |
让我们尝试用rosparam set
命令改变参数的值:
2、rosparam set和rosparam get命令
用法:1
2rosparam set [param_name]
rosparam get [param_name]
例如我们可以改变一下小海龟窗口的背景色——
首先设定参数:1
rosparam set background_r 150
然后需要调用clear服务才可以使参数生效:1
rosservice call clear
执行完这一步,发现海龟窗口的背景色变紫了。
然后我们可以查看一下在参数服务器上的其他参数,例如背景色绿通道的值:1
rosparam get background_g
会得到:1
86
使用/
获取参数服务器上的所有内容:1
rosparam get /
输出类似于:1
2
3
4
5
6
7
8
9
10
11
12background_b: 255
background_g: 86
background_r: 150
rosdistro: 'jade
'
roslaunch:
uris: {host_192_168_31_101__46779: 'http://192.168.31.101:46779/'}
rosversion: '1.11.16
'
run_id: bd3a4832-0230-11e6-80ee-c0188582eefb
你可以把这些参数存储到文件里以方便再次使用:
3、rosparam dump和rosparam load命令
用法:1
2rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
现在我们把参数服务器的内容存到params.yaml
中:1
rosparam dump params.yaml
你可以将这个yaml文件加载到新的命名空间里,例如'copy'
:1
2rosparam load params.yaml copy
rosparam get copy/background_b
得到:1
255