简单修改指令盒脚本

Choregraphe中的所有指令盒都有自己脚本,因此您可以很容易地编辑指令盒,并修改其脚本。

脚本逻辑说明

Choregraphe中使用的脚本编程语言为Python。Choregraphe里的每一个指令盒都是一个模块。简言之,模块类似应用程序,它完全独立,可以自行运行,并且很容易就可以与其它模块进行交流。

创建指令盒有如下步骤:

  1. 指令盒实例化
  2. 将指令盒注册为模块,这样它就可以通过链接,从其它指令盒里调用。
  3. 指令盒初始化

前两步是自动的,不受您的控制。您可以完全控制的是第三步。这一步会执行一部分您写入指令盒脚本的编码。

指令盒脚本说明

让我们来看一下一个指令盒脚本。将"Switch Leds"指令盒拖放至流程图面板,然后双击指令盒。

> 显示脚本窗口:

The Switch Leds script window

当您编辑若干指令盒的脚本时,它们会在若干标签中打开。

"Switch LEDs"指令盒使用Python语言进行编码,命令左耳的发光二极管在2秒内点亮(onStart输入点)或关闭(onStop输入点)。

编写脚本时,请不要忘记您定义的是模块类的方法。方法是指由程序调用、每次执行同一行动的函数。

"Switch LEDs"脚本中有5个方法:

  • initialize(初始化)
  • onLoad
  • onUnload
  • onStart
  • onStop

“Switch Leds”脚本的运作原理

在Python中,无需创建代理(proxy)来调用某个NAOqi模块。这是自动完成的(参考Python程序说明书)。通过代理,您可以在机器人上连接一个模块并执行其“绑定方法”。例如,ALMemory、ALMotion等都是模块。ALLeds模块控制机器人上所有的发光二极管。

注释:

如要查看Choregraphe中可使用的模块和方法列表,您可以在连接至一个机器人或一个本地NAOqi时,点击 Help > API Reference (帮助 > API参考)。

  1. 执行行为时,会首先执行初始化方法:GeneratedClass.__init__(self)。这个函数会重置指令盒的基本参数。Choregraphe中所有的指令盒都拥有相同的基本参数。然后,指令盒就成为在NAOqi、机器人上运行的一个“模块”。指令盒也初始化了自身的所有参数,这样,在脚本中就可以使用这些参数。这个方法在每执行一个行为时,都会被调用一次。您可以把整个行为执行过程中所需的对象进行初始化(诸如不同的代理等)。
    注意:

    由于脚本框里的前三行是强制性的,因此,请不要修改这三行。

  2. onLoad:当加载指令盒流程图时,会调用这个方法。在当前行为的所有指令盒的__init__方法之后,有必要调用这个方法。加载流程图时,在任何输入/输出点被激活前,这一方法会被调用至当前一级的每个指令盒。
  3. onUnload:当卸载指令盒流程图时,会在当前一级的每个指令盒上调用这个方法。流程图被卸载后,指令盒就失效了,其输入点无法再接收任何事件信号。请注意,通常情况下,该方法会停止脚本里运行的所有指令,而这正是您希望在onStop输入点上看到的。因此,该输入点会默认调用onUnload。
  4. onInput_onStart:当onStart被激活时,会调用该方法。它调用 ALLeds.fade(self.getParameter("Leds name"), self.getParameter("max intensity"), self.getParameter("time"))。这个调用针对ALLeds模块,命令该组发光二极管在一个给定的时间内点亮至最高亮度。您会注意到我们没有使用任何硬编码值。这是因为我们希望让用户能够通过Choregraphe的界面轻松地改变这些值。在onStart这一方法结束时,“self.onStopped()”会激活“Switch Leds”指令盒的onStopped输出点。
  5. onInput_onStop:当onStop被激活时,会调用该方法。这个方法的结构与刚才介绍的onStart方法的结构非常相似。唯一的区别在于fade函数里,“min intensity”取代了“max intensity”。这就意味着当onStop被激活时,发光二极管组被命令关闭(当然,这要取决于“min intensity”的值)。

修改脚本

现在,让我们来对“Switch Leds”指令盒脚本进行一点修改,使NAO的发光二极管组在关闭前闪烁5次。操作如下:

  1. 如下图如所示修改脚本指令盒:

    Modifying the Switch Leds script

  2. 我们在onStart方法里使用了“while”函数来达到目的。

    > 当onStart输入点被激活时,NAO会闪烁5次,然后关闭发光二极管。

    > 当onStop被激活时,NAO会在下一次进入时退出整个“while”循环(while loop),并在结束时关闭发光二极管。

注释:

请注意,在这个指令盒中还有许多可以改进的地方,例如更快地中断while循环,(如果onStart不止一次被激活的话)防止指令盒多次进入while循环,使“self.max”计数成为参数等。

现在,您可以试着在Choregraphe指令盒库里修改指令盒脚本,创建出不同凡响的行为!





Copyright © 2010 Aldebaran-Robotics - 版权所有