(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Sequence容器

Description: 本教程将教会你如何使用Sequence容器。

Tutorial Level: BEGINNER

Next Tutorial: Iterator容器

序列(Sequence)容器是一个StateMachine容器,扩展的自动生成的状态,按序创建一序列的状态,该状态将被添加到容器中。这里只注意到差异。

创建序列容器

首先导入序列类型:

   1 from smach import Sequence

容器序列有自己的结果,需要在构造中指定,以及用于自动转换的'connector_results'。构造函数的签名是:

   1 __init__(self, outcomes, connector_outcome):

添加状态

将状态添加到序列与容器相同。

但是,每个添加的状态将会收到一个额外的转换,从它到添加后的状态。转换将遵循在此容器的构造中指定的结果。

如果在字典映射参数中给定的一个转换为'Sequence.add()',那么在构造函数指定的连接器结果中,所提供的转换将覆盖自动生成的连接器转换。

示例

例如,在创建操作状态序列时,不需要转换映射。所有的动作状态都有通常的三个结果,序列也需要有它的结果:

   1 sq = Sequence(
   2         outcomes = ['succeeded','aborted','preempted'],
   3         connector_outcome = 'succeeded')
   4 with sq:
   5     Sequence.add('MOVE_ARM_GRAB_PRE', MoveVerticalGripperPoseActionState())
   6     Sequence.add('MOVE_GRIPPER_OPEN', MoveGripperState(GRIPPER_MAX_WIDTH))
   7     Sequence.add('MOVE_ARM_GRAB',     MoveVerticalGripperPoseActionState())
   8     Sequence.add('MOVE_GRIPPER_CLOSE', MoveGripperState(grab_width))
   9     Sequence.add('MOVE_ARM_GRAB_POST', MoveVerticalGripperPoseActionState())

Wiki: cn/smach/Tutorials/Sequence container (last edited 2018-03-10 07:00:43 by Playfish)