LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

pepperで、並列実行しているビヘイビアのイベントを呼び出す方法

こんにちは、上津原です。 まだ寒いですが、こたつを片付けてしまいました。後悔しています。

さて、今回もまたpepperの話題です。 題名の通り、他のアプリケーションをコントロールする方法です。

あるビヘイビアを実行中に、別のビヘイビアのあの機能が使いたいのに!という時ありますよね。だけどそれってどうすれば?という時に、ALMemory使えばいけるんじゃないか?ってことで試してみたら動いたのでご紹介します。

RunBehaviorして、ALMemoryのraiseEventしてやればOK

はい、上記のとおりです。開発環境があればChoregrapheで並列実行してやればいいですが、スタンドアロンで動いて貰う場合そうは行かないので、さくっと実装してやります。ChoregrapheでRunBehaviorをやると並列してビヘイビアが実行されるので、ALMemoryを利用した連携が可能になる、ということになります。

では実際に見てみましょう。

それぞれの構成はこんなかんじ。

メインビヘイビア

f:id:nextdeveloper:20150302172022p:plain

サブビヘイビア

f:id:nextdeveloper:20150302172031p:plain

この時点ではメモリイベントは抜いてあります。 メインビヘイビアが実行されたら、ちょっと喋ってサブビヘイビアが立ち上がるようになっています。

それをここからメモリイベントを追加していきます。

サブビヘイビアにメモリイベントを作成

f:id:nextdeveloper:20150302172837p:plain

サブビヘイビアのここにある「+」を押して、メモリイベントの一覧を出します。 そして、下の方にある「新しいキーの追加」を押して独自キーを作成します。 今回は「subBehavior/event1」としました。 f:id:nextdeveloper:20150302173112p:plain

そうしたら、左隅に「〜」みたいなマークが出来ます。 f:id:nextdeveloper:20150302173145p:plain これがメモリイベントのスタートポイントになります。 とりあえずSayをくっつけて「メモリイベントだよ」と喋るようにしておきました。

f:id:nextdeveloper:20150302173307p:plain

メインビヘイビアにRaiseEventを作成

呼び出されるイベントの作成は完了したので、後はそれを実行するだけです。メインビヘイビアに実行部分を作っていきます。

とりあえず今回はお手軽な「Tactile Head」を使いました。pepperの頭のタッチセンサーですね。 シミュレータの人は動かないと思うのでSpeechRecoなど、インプットがこちらから任意に出来るものを利用すればいいと思います。

f:id:nextdeveloper:20150302173537p:plain

そしてRaiseEventノードをつないで、先ほど設定した「subBehavior/event1」を入力します。

コレで出来上がりです!簡単ですね!

メインビヘイビアを実行

メインビヘイビアを実行すると、サブビヘイビアが立ち上がり、その後頭を触ると先ほど設定した「メモリイベントだよ」を喋ってくれます。

RaiseEventは、インプットタイプが「ダイナミック」に設定してあります。つまり、ここにイベントに渡したい情報(文字列、数字など)を渡してやれば、変数の受け渡しも可能になります。わ~ベンリ!

まとめ

Choregparheを利用してロジックを組む場合、クラスやインスタンスを呼び出したりという行為が出来ないっぽいので、ALMemoryを利用したテクニックは必須になると思います。

そして一旦使い方がわかると一気に可能性の幅が広がります。前回紹介したQiMessaging.jsもALMemoryにアクセスできるので、JSでペッパーと相互でデータのやり取りも可能になったりもします。

今回のプロジェクトもGithubにアップしておきますので、もし良かったら自由に使ってください(とっても簡単なものですけど…)

kuetsuhara/pepper_almemory_heiretsu · GitHub

それでは。