简单修改指令盒脚本
Choregraphe中的所有指令盒都有自己脚本,因此您可以很容易地编辑指令盒,并修改其脚本。
脚本逻辑说明
Choregraphe中使用的脚本编程语言为Python。Choregraphe里的每一个指令盒都是一个模块。简言之,模块类似应用程序,它完全独立,可以自行运行,并且很容易就可以与其它模块进行交流。
创建指令盒有如下步骤:
- 指令盒实例化
- 将指令盒注册为模块,这样它就可以通过链接,从其它指令盒里调用。
- 指令盒初始化
前两步是自动的,不受您的控制。您可以完全控制的是第三步。这一步会执行一部分您写入指令盒脚本的编码。
指令盒脚本说明
让我们来看一下一个指令盒脚本。将"Switch Leds"指令盒拖放至流程图面板,然后双击指令盒。
> 显示脚本窗口:
当您编辑若干指令盒的脚本时,它们会在若干标签中打开。
"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时,点击 (帮助 > API参考)。 |
---|
- 执行行为时,会首先执行初始化方法:
注意: 由于脚本框里的前三行是强制性的,因此,请不要修改这三行。
。这个函数会重置指令盒的基本参数。Choregraphe中所有的指令盒都拥有相同的基本参数。然后,指令盒就成为在NAOqi、机器人上运行的一个“模块”。指令盒也初始化了自身的所有参数,这样,在脚本中就可以使用这些参数。这个方法在每执行一个行为时,都会被调用一次。您可以把整个行为执行过程中所需的对象进行初始化(诸如不同的代理等)。
- :当加载指令盒流程图时,会调用这个方法。在当前行为的所有指令盒的__init__方法之后,有必要调用这个方法。加载流程图时,在任何输入/输出点被激活前,这一方法会被调用至当前一级的每个指令盒。
- :当卸载指令盒流程图时,会在当前一级的每个指令盒上调用这个方法。流程图被卸载后,指令盒就失效了,其输入点无法再接收任何事件信号。请注意,通常情况下,该方法会停止脚本里运行的所有指令,而这正是您希望在onStop输入点上看到的。因此,该输入点会默认调用onUnload。
- :当onStart被激活时,会调用该方法。它调用 。这个调用针对ALLeds模块,命令该组发光二极管在一个给定的时间内点亮至最高亮度。您会注意到我们没有使用任何硬编码值。这是因为我们希望让用户能够通过Choregraphe的界面轻松地改变这些值。在onStart这一方法结束时,“self.onStopped()”会激活“Switch Leds”指令盒的onStopped输出点。
- :当onStop被激活时,会调用该方法。这个方法的结构与刚才介绍的onStart方法的结构非常相似。唯一的区别在于fade函数里,“min intensity”取代了“max intensity”。这就意味着当onStop被激活时,发光二极管组被命令关闭(当然,这要取决于“min intensity”的值)。
修改脚本
现在,让我们来对“Switch Leds”指令盒脚本进行一点修改,使NAO的发光二极管组在关闭前闪烁5次。操作如下:
- 如下图如所示修改脚本指令盒:
- 我们在onStart方法里使用了“while”函数来达到目的。
> 当onStart输入点被激活时,NAO会闪烁5次,然后关闭发光二极管。
> 当onStop被激活时,NAO会在下一次进入时退出整个“while”循环(while loop),并在结束时关闭发光二极管。
注释: | 请注意,在这个指令盒中还有许多可以改进的地方,例如更快地中断while循环,(如果onStart不止一次被激活的话)防止指令盒多次进入while循环,使“self.max”计数成为参数等。 |
---|
现在,您可以试着在Choregraphe指令盒库里修改指令盒脚本,创建出不同凡响的行为!