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

StateMachine容器

Description: 本教程教会你如何使用StateMachine容器.

Tutorial Level: BEGINNER

Next Tutorial: Concurrence容器

创建状态机

首先加载状态机:

   1 from smach import StateMachine

SMACH StateMachine也提供了一个状态接口,它的结果和用户数据交互必须在构造上指定

   1 sm = StateMachine(outcomes = ['outcome1', 'outcome2'],
   2                   input_keys = ['input1', 'input2'],
   3                   output_keys = ['output1', 'output2'])

和SMACH状态接口类似,输入键和输出键是可选的。构造函数模板如下:

   1 __init__(self, outcomes, input_keys=[], output_keys=[]) 

添加状态

当向状态机添加状态时,首先指定要添加状态的状态机。这可以通过使用Python的"with"语句完成。你可以把它想象成"opening"容器来构造。它创建了一个上下文,其中所有后续的add*调用都将应用于打开的容器。

例如,要将两个状态添加到一个名为"sm"的状态机,你可以编写以下内容:

   1 with sm:
   2     StateMachine.add('FOO',
   3                      FooState(),
   4                      {'outcome2':'FOO',
   5                       'outcome3':'BAR'})
   6     StateMachine.add('BAR',
   7                      BarState(),
   8                      {'outcome3':'FOO',
   9                       'outcome4':'outcome2'})

上面的示例分别添加了"FOO"和"BAR"的两个状态,分别是"FooState"和"BarState"。静态添加方法有可选参数。添加方法的签名如下:

   1 add(label, state, transitions=None, remapping=None) 

有关转换的详细信息,请查看开始指南

有关映射的详细信息,请查看用户数据

Wiki: cn/smach/Tutorials/StateMachine container (last edited 2018-03-10 06:41:54 by Playfish)