ROS2 服务通信和参数通信

服务通信和参数通信

机器人中,除了需要话题通信(单向的数据传递),有时还需要双向,比如一个节点向另一个节点发送图片请求识别,另一个节点识别完成后将结果返回给请求节点。服务通信就是针对这一场景的解决方案。

在前面我们完成了小说阅读播放器项目,那里的代码设置的是中文,如果我们要加其他语言,就要修改源代码。每个节点有多个参数需要调整,怎么解决?——参数通信

关系:参数通信时基于服务通信实现的。

在ROS2 DDS中,只有话题通信(订阅发布),服务通信由两个话题构成,参数通信由多个服务话题构成,而动作通信则是由话题加服务构成的。

(动作不过多介绍)

4.1 服务通信介绍

以海龟为例

Ros2 service list -t

查看服务列表

每一行代表一个服务,前面是服务名称,后面[]是服务接口类型,与话题基本一样,不同点在于接口,服务的接口分为请求和响应接口!

以生成海龟服务spawn为例

$ ros2 interface show turtlesim/srv/Spawn

float32 x 

float32 y 

float32 theta 

string name  # Optional. A unique name will be created and returned if this is empty

string name

前四个是request请求接口定义,包括位置朝向名字;最下面的是响应接口,返回的是一个新生成的海龟名字。

调用这个接口:

$ ros2 service call /spawn turtlesim/srv/Spawn “{x: 1, y: 1, theta: 0.0}”

waiting for service to become available… 

requester: making request: turtlesim.srv.Spawn_Request(x=1.0, y=1.0, theta=0.0, name=”) 

response: 

turtlesim.srv.Spawn_Response(name=’turtle2′)

还可以用rqt可视化工具来调用服务

在plugins services services caller 选项中选择spawn服务修改参数即可添加

最后如图所示:

4.2 参数通信介绍

从上面的list我们可以看到有Parameter结尾的,这些就是和参数相关的服务!

用ros2 param list我们可以看到有8个,后面5个是自动生成的参数,我们调一下第三个为例

ros2 param describe /turtlesim background_r

$ ros2 param get /turtlesim background_r 

Integer value is: 69

$ ros2 param set /turtlesim background_r 255 

Set parameter successful

当系统需要多个节点或较多参数需要配置则需要使用文件来配置。首先将某个节点的配置到处yaml,用下面这段代码将海龟模拟器的参数导出到文件里。

$ ros2 param dump /turtlesim > turtlesim_param.yaml 

$ cat turtlesim_param.yaml 

/turtlesim: 

ros__parameters: 

background_b: 255 

background_g: 86

background_r: 255 

qos_overrides: 

/parameter_events: 

publisher: 

depth: 1000 

durability: volatile 

history: keep_last 

reliability: reliable 

use_sim_time: false 

运行节点指定参数文件,实现参数自动配置

$ ros2 run turtlesim turtlesim_node –ros-args –params-file turtlesim_param.yaml

Rqt configuration -> DynamicReconfigure也可以操作调参!

发表评论