文章目录
① 背景
service
也是通讯的一种方式,req/respone
的方式,是触发式的,topic
是订阅式的
② 前提
- 装ros2
- 配置环境
- 装小乌龟
③ 任务
Ⅰ准备
启动小乌龟
命令:
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
Ⅱ ros2 service 命令
ros2 service list
列出服务
命令提示
usage: ros2 service list [-h] [--spin-time SPIN_TIME] [-t] [-c]
Output a list of available services
optional arguments:
-h, --help show this help message and exit
--spin-time SPIN_TIME
Spin time in seconds to wait for discovery (only
applies when not using an already running daemon)
-t, --show-types Additionally show the service type
-c, --count-services Only display the number of services discovered
可以通过命令和rqt去看
ros2 srv show (eloquent版本是 ros2 service type)
就是看看srv的消息的几种方法,
- 执行命令行
ros2 srv show turtlesim/srv/SetPen
- rqt 查看
- 文件查看
eloquent 版本
ros2 service find (dashing 不支持 )
根据类型找服务,使用eloquent版本
ros2 service find <type_name>
例如
ros2 service find std_srvs/srv/Empty
ros2 interface show (dashing 不支持)
查看service的消息信息,用的eloquent版本
命令:ros2 interface show <type_name>.srv
例子:ros2 interface show turtlesim/srv/Spawn.srv
ros2 service call
调用服务,命令行模式
ros2 service call <service_name> <service_type> <arguments>
我们调用/clear 和 /spawn
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: 'bigggg'}"
④ 总结
如果是不是连续的通讯,可以使用service
和action
更好一点