Pepperのオートノマスライフ(自律モード)を止めたい

Pepper,Python,プログラミング

こんにちは。ソリューション開発部 Pepper分科会の畑澤です。

Pepperの自作アプリを動かすときにオートノマスライフ(自律モード)を抑止したいときありませんか?ありますよね?

例えば何かを案内することに特化させたい時、タブレットで一生懸命案内しているのにPepperの頭が人を追ってしまう。。。

これはPepperの振る舞い制御の仕組みであるオートノマスライフによって「人を見つけた」→「追う」というアクティビティが起動しているためです。

オートノマスライフについては下記を参照してください。

オートノマスライフ自体はとても良い概念で、Pepperが自律的に動く仕組みの根幹ではあるのですが、「何かを専門でやらせたいとき」、逆の表現をすると「アプリで制御してない動きは一切させたくないとき」は割り込み自体をカットしたいです。

記事の本筋から外れてしまいますが、個人的に「オートノマスライフはPepperが人の生活に溶け込むために取得した仕組み」だと理解しています。

「周囲の動きに反応して、その動きに対応した行動を取る」

とても生物的な動きだと思いませんか?

この動き(反応)を邪魔だと感じてしまうのはエンジニアとして発想を転換する必要があるのかなとも思います。今回はオートノマスライフを止める方向で考えましたが、本来は「共存」するべきなのかなと。。。

話を戻します。

アプリ起動中だけオートノマスライフを止めたい場合、ALBasicAwareness.stopAwareness() と ALMotion.setBreathEnabled() を使います。

自作アプリにPythonScriptボックスで下記のコードを記載して、アプリ起動時に動かしてください。

communityでも同様の質問があり、コードの参考にしています。

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)
    def onLoad(self):
        try:
            self.ba = ALProxy("ALBasicAwareness")
        except:
            self.ba = None<
        self.motion = ALProxy("ALMotion")
    def onUnload(self):
        if self.ba:
            self.ba.startAwareness()
        self.motion.setBreathEnabled("Body", True)
    def onInput_onStart(self):
        if self.ba:
            self.ba.stopAwareness() 
        self.motion.setBreathEnabled("Body", False) 
        self.onStopped()
    def onInput_onStop(self):
        self.onUnload()
        self.onStopped()
  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix