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())