LoginSignup
7
8

More than 5 years have passed since last update.

Choregraphe標準のボックスを拡張する その2

Posted at

概要

その1の続き

その1 http://qiita.com/hws-hitorobo/items/dc594aa1799742736d0c

リポジトリ

4. Inputがあったら定期処理を開始

Waitを拡張して定期的にoutputするボックスを作成します。
そのままですが、定期的にボックスを実行したい場合に使います。

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.isStop = False

    def onUnload(self):
        self.isStop = True

    def onInput_onStart(self):
        import qi
        self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))

    def onInput_onStop(self):
        self.isStop = True

    def onTrigger(self):
        if not self.isStop:
            self.output()
            self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
        else:
            self.onUnload()

原型が結構なくなってますが、
onTriggerのなかでフラグを確認して、
onStop入力がない場合は出力しつつ、
新しいWaitを登録しています。

使い方によっては危険なので、注意して使ってください。

5. Inputがあったら指定回数だけ定期処理を開始

上記のボックスをさらに拡張して
指定回数だけのループで終了するようにします。

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.count = 0

    def onUnload(self):
        self.count = 0

    def onInput_onStart(self):
        self.count = self.count + self.getParameter("Count")

        import qi
        self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))

    def onTrigger(self):
        self.output()
        self.count = self.count - 1
        if self.count > 0:
            self.waiting = qi.async(self.onTrigger, delay=int(self.getParameter("Time(s)") * 1000 * 1000))
        else:
            self.count = 0

先ほどのフラグの代わりにカウンターを使ってます。

6. 3つのシグナルを待つWait For Signals

そのままです。
そもそもこういう作りになってしまったら、修正するべきかと思いますが、
使い道はあるかもしれません。

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self, False)

    def onLoad(self):
        self.ok = [False]*3

    def onUnload(self):
        #puts code for box cleanup here
        ""

    def onStart(self, nInput):
        self.ok[nInput-1] = True
        bOutput = True
        for bOk in self.ok:
            bOutput = bOutput and bOk
        if( bOutput ):
            self.ok = [False]*3
            self.signalsReceived()

    def onInput_signal1(self):
        self.onStart(1)

    def onInput_signal2(self):
        self.onStart(2)

    def onInput_signal3(self):
        self.onStart(3)

Wait For SignalsのInputを3つにして中のリストも3つにしただけです。


ほかにもいろいろ作ってますが、
結構ピンポイントなものが多いので、
よく使うものだけ抜粋しました。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8