Python
NAOqi
Pepper
Choregraphe

 本記事は以下の環境で動作を確認しています。

バージョン
NAOqi 2.5.5.5
Choregraphe 2.5.5.5

この記事の内容

 Pepperの会話アプリには欠かせないQiChatの進んだ使い方を紹介したいと思います。QiChatはダイアグラムベースでは複雑になりがちな会話の分岐を、シンプルに記述する専用言語です。また、会話だけでなくアプリの制御も可能です。

ロボアプリの特徴的な技術

 ロボアプリを構成する特徴的な技術には以下のものがあります。

  • Choregrapheダイアグラム
  • QiChat
  • Python
  • ALMemory

 Choregrapheダイアグラムはロボアプリの構成要素を束ねるプログラムそのものであり、ビヘイビアと呼ばれます。PythonやQiChatはそれらに関連づけられて処理されるプログラムです。Pythonは主にAPIの呼び出しや一般的な制御を担当し、QiChatは主に会話の制御を担当します。ALMemoryはロボアプリやNAOqiOS間でデータのやりとりを行う、データベースになります。

 QiChatは主に会話の制御を担当しますと述べましたが、会話だけでは片手落ちです。QiChatは会話と連動したロボアプリの制御を円滑にするための機能が備わっています。
 始めにQiChatからChoregrapheダイアグラム(モーション)の呼び出し方を紹介したいと思います。

会話と連動したモーション

 会話とモーションを連動させるには、QiChat関数^run^start^waitを使います。

QiChat関数 ^run, ^start

 QiChat関数^run^startはモーションが設定されたビヘイビアを実行させます。ビヘイビアの指定は^run(<ビヘイビアパス>)の形式で行います。ビヘイビアの名前だけでなくを含めた形になることに注意してください。

構文:

^run(<ApplicationID>/<BehaviorName>)
^start(<ApplicationID>/<BehaviorName>)

 ^run^startの違いは、同期か非同期かの違いになります。

QiChat関数 処理内容の詳細
^run 同期処理。ビヘイビアの終了を待ち後続処理が実行される。
^start 非同期処理。ビヘイビアの終了を待たないで後続処理が実行される。

QiChat関数 ^wait

 QiChat関数 ^wait^startで非同期実行されたビヘイビアの終了を待ちます。終了を待つビヘイビアは^startで指定した場合と同様です。わかりにくいと思いますので、ビヘイビアパスをtest-appid/behavior_1とした場合の使い方の例を示します。test-appid/behavior_1は体を動かす動作が設定されているビヘイビアです。

Pepperです ^start(test-appid/behavior_1) 体を動かします ^wait(test-appid/behavior_1) 体を動かしました

 上記の場合、「Pepperです」とPepeprが発話し体を動かすモーションtest-appid/behavior_1が実行されます。「体を動かします」とPepperが発話し、 ^wait(test-appid/behavior_1)で体を動かすモーションtest-appid/behavior_1の終了を待ち、最後に「体を動かしました」と発話します。

 これで会話とモーションを結びつけることができました。ロボアプリの可能性が広がりますね。ですが、QiChatの使い所はこれだけではありません。次回は、さらに進んだ内容を紹介したいと思います。