目标: 介绍ROS 2中的动作。
背景知识
动作是ROS 2 中用来沟通的类型之一。 他是为长时间运行的任务准备的。 它包括三个部分:目标,反馈以及结果。
动作是在话题和服务的基础上构建的。 它的功能类似于服务,但是动作是可以抢占的,意思是, 你可以在节点运行时,取消动作。 他同时能够提供稳定的反馈,不像服务,每次都只返回一个回复。
动作同样使用的是客户端+服务器的模式,类似于发布器与订阅器的模式。 一个动作的客户端节点发送一个目标到一个动作的服务器节点, 服务器节点会确认收到这个目标并且返回一个反馈流和一个结果。
前提条件
这个教程建立在一些概念上,比如说,节点、话题以及服务。这个教程会使用到turtlesim package,并且不要忘记在启动的每个新的终端上source ROS 2。如何你对上面的内容还没看过的,可以戳一下,过去了解一下。
任务
1. 设置
启动两个turtlesim的节点, /turtlesim
和 /teleop_turtle
。
打开一个新的终端,并且运行下面的指令:
ros2 run turtlesim turtlesim_node
打开另一个终端,并且运行下面的指令:
ros2 run turtlesim turtle_teleop_key
2. 使用动作
当你启动这个节点,你会看到你的终端上会打印出下面的信息:
Use arrow keys to move the turtle.
Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation.
让我们关注第二行,第二行是跟一个动作有关系的,(第一行是跟“cmd_vel”这个话题相关的,我们在之前的教程里面提到过)。
Let’s focus on the second line, which corresponds to an action. (The first instruction corresponds to the “cmd_vel” topic, discussed previously in the topics tutorial.)
我们可以看到: G|