ros2-4.1 服务通信介绍
服务是ROS图中节点之间的另一种通信方法。服务分为客户端和服务端,客户端发送请求给服务端,服务端可以根据客户端的请求做一些处理,然后返回结果给客户端。也称为为请求-响应模型。
服务和话题的不同之处,话题是没有返回的,适用于单向或大量的数据传递。而服务是双向的,客户端发送请求,服务端响应请求。放一下官方文档的图理解下
4.1.1 服务通信介绍
还是沿用海龟模拟器。启动模拟器节点,查看服务列表
ros2 service list
bohu@bohu-TM1701:~$ ros2 service list -t
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
/turtle1/set_pen [turtlesim/srv/SetPen]
/turtle1/teleport_absolute [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
/turtlesim/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/turtlesim/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/turtlesim/get_parameters [rcl_interfaces/srv/GetParameters]
/turtlesim/list_parameters [rcl_interfaces/srv/ListParameters]
/turtlesim/set_parameters [rcl_interfaces/srv/SetParameters]
/turtlesim/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]
手动调用服务
bohu@bohu-TM1701:~$ ros2 service call /spawn turtlesim/srv/Spawn "{x: 1, y: 1}"
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调用
4.1.2 基于服务的参数通信
参数是节点的配置值。您可以将参数视为节点设置。而参数通信是基于服务通信实现的。
bohu@bohu-TM1701:~$ ros2 param list
/turtlesim:
background_b
background_g
background_r
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
use_sim_time
background_b,background_g,background_r 就是背景色的设置。
可以查看参数值
bohu@bohu-TM1701:~$ ros2 param get /turtlesim background_r
Integer value is: 69
可以修改参数值
ros2 param set /turtlesim background_b 10
多个参数可以导出配置文件
ros2 param dump /turtlesim > turtlesim_param.yaml
bohu@bohu-TM1701:~$ cat turtlesim_param.yaml
/turtlesim:
ros__parameters:
background_b: 10
background_g: 86
background_r: 44
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修改小海龟参数配置。