1.ROS 服务
服务(services)是节点间通信的另一种方法,服务允许节点发送一个请求或者接收一个响应
2.使用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
该命令列出当前节点提供了那些服务
在运行turtlsim节点的情况下运行命令:
rosservice list
得到输出
接下来使用rosservice进一步观察/clear这个服务
2.2 rosservice type
rosservice type /clear
输出
该服务为空,意思是当这个服务被呼叫时它没有任何动作(即它发送请求时不发送任何数据,收到响应时不接收任何数据)。
我们使用rosservice call 调用一下这个服务看看
2.3 rosservice call
rosservice call /clear
正如预测的那样,小乌龟的轨迹消失了。
我们再看一下/spawn这个服务,输入命令
rosservice type /spawn
得到回复
turtlesim/Spawn
再看下这个服务类型的具体描述
rossrv show turtlesim/Spawn
得到回复
float32 x
float32 y
float32 theta
string name
---
string name
该服务允许我们在一个指定位置以一个指定角度孵化出一个新的乌龟出来。运行
rosservice call /spawn 2 2 0.2 ""
我们的乌龟窗口在指定位置出现了一个新的乌龟
3.使用rosparam
rosparam允许我们存储以及操作ROS parameter server里面的数据。
一些用法
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
运行rosparam list
可以看到目前有以下这些参数
/rosdistro
/roslaunch/uris/host_julis_pc__44711
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r
接着我们尝试改改这些参数看看有什么变化
3.2 rosparam set and rosparam get
用法
rosparam set [param_name]
rosparam get [param_name]
我们看下这个/turtlesim/background_r
参数的值
rosparam get /turtlesim/background_r
得到回复69
我们尝试把这个值改成 150
rosparam set /turtlesim/background_r 150
现在我们看看改完之后的值
rosparam get /turtlesim/background_r
新窗口颜色里面的rgb中的r值变成了150,但改完之后乌龟背景并没有变化,我们继续运行rosservice call /clear
之后发现乌龟窗口的背景颜色更新了。
我们也可以运行查看所有参数的值
rosparam get /
得到以下回复
rosdistro: 'noetic
'
roslaunch:
uris:
host_julis_pc__44711: http://julis-PC:44711/
rosversion: '1.15.14
'
run_id: 4f99cfa0-efcd-11ec-82b3-0b4b67e0ce0f
turtlesim:
background_b: 255
background_g: 86
background_r: 150
3.3 rosparam dump and rosparam load
我们可以使用dump指令把参数统统保存在xml文件中,对应地也可以用load指令载入xml文件中的参数。用法如下:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
运行:
rosparam dump params.yaml
此时我们的home文件夹里面多了个params.xml文件,里面保存了目前ros节点下所有的参数。我们甚至可以把xml文件的参数载入到一个新的namespace中
$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_b
得到输出 255