Interactiveアクティビティの作成

[オートノマスライフ](http://qiita.com/Atelier-Akihabara/items/555989ab1d7d7e63e520)で説明したアクティビティの作り方について、Interactiveアクティビティを例に説明していきます。

Solitaryアクティビティにて説明したトリガー条件のほか、Interactiveアクティビティ固有の要素について説明し、具体的なアクティビティの作成、実行を通じて、Interactiveアクティビティの作成方法をみていきます。
なお、 **オートノマスライフについてはバーチャルロボットでは動作確認手段はなく、Pepper実機が必要になります**。 アルデバラン・アトリエ秋葉原などでPepper実機を使って実験などおこなってみていただければと思います。 (予約URL：http://pepper.doorkeeper.jp/events)

#Interactiveアクティビティに関連する要素

Interactiveアクティビティでは、Solitaryアクティビティで説明したアプリケーション情報、トリガー条件に加え、以下のような要素を定義することができます。

##トリガーセンテンス

Interactiveアクティビティでは、起動条件としてトリガー条件のほか、特定の単語による起動を指示することができます。
たとえば、ソフトバンクショップのPepperには「早口言葉」というInteractiveアクティビティがインストールされており、「早口言葉」と話しかけられるとこのアクティビティが起動されるようになっています。

このトリガーセンテンスは、以下の2つの基本的なInteractiveアクティビティによって処理されます。そのため、トリガーセンテンスを試すためにはこれらのアプリがインストールされている必要があります。

![dialog-apps.png](https://qiita-image-store.s3.amazonaws.com/0/54394/def3fd8c-82f3-a854-7dd5-8b1145f209af.png)

アトリエのPepperにはまだこれらのアプリがインストールされていないため、トリガーセンテンスは試すことができません。
トリガーセンテンスのチュートリアルは、今後アトリエPepperにアプリがインストールされてから改めて紹介したいと思います。

このように、Interactiveアクティビティが別のアクティビティを呼び出す点がSolitaryアクティビティにはない部分と言えます。

##ローディングレスポンス

Solitaryアクティビティと異なり、Interactiveアクティビティは人が近づいた際に会話などをおこなうために起動されます。一方、アクティビティのロードはファイルの読み込み時間などある程度処理時間を必要とし、ロードの間に人が離れてしまうことが考えられます。

Pepperにおいてはアクティビティのロード中、ローディングレスポンスというあらかじめ定義された文字列（「あ、えーと」など）をしゃべることで、ロード中でも言葉を発して人の注意を引きつけることができるように考慮されています。
つまり、PCやスマホのアプリにおける砂時計やメーターアイコンが、Pepperではローディングレスポンスという形で実装されており、この言葉は起動するアクティビティによって追加定義することができます。

#つくってみる

今回はSolitaryアクティビティと同様にトリガー条件を利用して、 **5秒間エンゲージメントゾーン2に人がいると、「はじめてのインタラクティブアクティビティーだよ！」としゃべるInteractiveアクティビティ** を作成してみます。

##トリガー条件について

今回は、トリガー条件として、[エンゲージメントゾーン](http://qiita.com/Atelier-Akihabara/items/0a5826fb018a4d0e4268#2-1)のうち、ゾーン2(デフォルトではPepper前面1.5m～2.5mの距離)に人が入ってきたときに起動するInteractiveアクティビティを実装してみます。

Autonomous Launchpadはエンゲージメントゾーンごとの人数をイベントとして提供しており、`Launchpad/NumPeopleZone2`イベントによってゾーン2にいる人数を判断することができます。
ここでは、ゾーン2の人数が0人より多いことが条件であるので、以下のようなトリガー条件になります。

```
(('Launchpad/NumPeopleZone2' > 0) ~ 5) && ('Launchpad/PreviousActivity' != "(自身のアクティビティの識別子)")
```

##ビヘイビアの作成

まず、アクティビティとしておこないたいことをビヘイビアとして作成します。

### プロジェクトの準備

1. Choregrapheを新規に起動するか、[ファイル]メニューの[新規プロジェクト...]を選択し、新規にプロジェクトを作成します
2. ビヘイビアをアクティビティに登録するため、名前をデフォルトの `behavior_1` から変更しておきます。[プロジェクトの内容]パネルの [behavior_1] を選択、右クリックし、**[名前を変更...]を選択**します

    ![rename-behavior.png](https://qiita-image-store.s3.amazonaws.com/0/54394/9536f349-c613-3085-19b4-d288e2af77d2.png)

3. 名前を適当な名前(今回は `congrats`)に変更します

    ![rename-behavior-box.png](https://qiita-image-store.s3.amazonaws.com/0/54394/22d7d112-f9be-d963-4ca1-67b7b7b495b9.png)

4. プロジェクトに名前をつけるため、一度プロジェクトを保存します。[ファイル]メニューの[プロジェクトを保存]を選択し、プロジェクトを適当な名前(今回は `my_interactive`)という名前で保存します

    ![save-project.png](https://qiita-image-store.s3.amazonaws.com/0/54394/6015c5a4-5086-2314-e175-c0495a5cbe7b.png)

5. プロジェクトの設定情報を変更します。[プロジェクトの内容]パネルの**[プロパティ]をクリック**します

    ![project_property-button.png](https://qiita-image-store.s3.amazonaws.com/0/54394/21e6a29c-888a-3f16-e750-64d4f5dfdf58.png)

    すると、プロジェクトの設定ダイアログが開きます。後で必要になりますので、[アプリケーションID]の文字列(例では `my_interactive-119554`)を控えておいてください。

6. 言語設定を変更します。使用可能な言語の **[Japanese]をチェック [A]**し、すでにチェックされているはずの**[English(UnitedStates)]のチェックを外します[B]**

    ![project-property-lang-1.png](https://qiita-image-store.s3.amazonaws.com/0/54394/05939341-fa0c-eb1e-b1d6-31475f6ed0ba.png)

7. 記述言語の **[English (UnitedStates) - Japanese]となっている箇所をクリック [A]**し、すでにチェックされている**[English(UnitedStates)]のチェックを外します[B]**

    ![project-property-lang-2.png](https://qiita-image-store.s3.amazonaws.com/0/54394/3c39a3f4-cdd9-512a-15f3-97b1292553e1.png)

    使用可能な言語と記述言語のそれぞれが**Japanese**になっていることを確認してください。

    ![project-property-lang-3.png](https://qiita-image-store.s3.amazonaws.com/0/54394/1d2adb7b-9418-3378-15e2-7d1946dd56f6.png)

8. [アプリケーションのタイトル]テキストボックスに **my_interactive と入力[A]**し、[アプリケーションの概要]テキストボックスに **このプロジェクトの説明を入力[B]**し、[OK]ボタンを押してください

    ![project-property-name-desc.png](https://qiita-image-store.s3.amazonaws.com/0/54394/d2acfad6-f6f3-4f19-57f8-0efb3a08cc50.png)


これでアプリケーションの設定変更は完了です。

###フローの作成

アプリケーションの設定変更を終えたら、これまでのチュートリアルと同じ要領でボックスを配置し、フローを構築していきます。

1. フローダイアグラムパネルに、Standardボックスライブラリの Audio > Voice > Animated Say をドラッグ＆ドロップします

    ![flow-box.png](https://qiita-image-store.s3.amazonaws.com/0/54394/f43c32a4-dd66-482e-034d-e5ef552bb8ab.png)

2. 以下のようにボックスの入力、出力とフローダイアグラムの入力、出力をそれぞれ接続します

    ![flow-connection.png](https://qiita-image-store.s3.amazonaws.com/0/54394/3715f39a-a63e-ee68-c815-d8dd48bd04be.png)

3. Animated Sayボックスをダブルクリックし、Localized Textボックスで**[Japanese]を選択し、「はじめてのインタラクティブアクティビティーだよ！」と入力**します

    ![animated-say-content.png](https://qiita-image-store.s3.amazonaws.com/0/54394/92c5038d-7819-f39f-3034-8d5124269cde.png)

これで、身振りつきで「はじめてのインタラクティブアクティビティーだよ！」としゃべるビヘイビアを作成することができました。


###動作確認

まず、Solitaryアクティビティと同様、単純なビヘイビア（アプリケーション）として実行してみます。
オートノマスライフがオフになっていることを確認してください。ツールバーのオートノマスライフのアイコンが以下のようになっていればオフです。

![autonomous-off.png](https://qiita-image-store.s3.amazonaws.com/0/54394/161676aa-391e-8a99-0d0b-8d06222f4a1f.png)

これまでと同様、アプリケーションの再生を選択してください。

![application-play.png](https://qiita-image-store.s3.amazonaws.com/0/54394/51acc11a-6304-d987-0d47-36c90c720326.png)

身振り付きで「はじめてのインタラクティブアクティビティーだよ！」としゃべれば成功です。
次に、これをInteractiveアクティビティとして設定していきます。

##Interactiveアクティビティへの変更

1. [プロジェクトの内容]パネルの**[プロパティ]をクリック**します
2. **[congrats]ビヘイビアを選択[A]**すると、ビヘイビアのプロパティを編集するためのパネルに切り替わりますので、[名前]テキストボックスに**Congratulations と入力[B]**します。また、[性質]ドロップダウンリストが[Interactive]となっていることを確認します

    ![behavior-confirm-interactive.png](https://qiita-image-store.s3.amazonaws.com/0/54394/e0a86883-5827-bc2c-b2de-6a0ffeb3e5a2.png)

3. トリガー条件を設定します。以下のように、トリガー条件を設定します

    ![project-property-trigger.png](https://qiita-image-store.s3.amazonaws.com/0/54394/92876143-725f-16a7-3d45-e312f7504e09.png)

    ```
    (('Launchpad/NumPeopleZone2' > 0) ~ 5) && ('Launchpad/PreviousActivity' != "(自身のアクティビティの識別子)")
    ```

    自身のアクティビティの識別子は、[アプリケーションID]の値(この例では `my_interactive-119554`)とビヘイビアの名前(この例では `congrats`)を `アプリケーションID/ビヘイビア名` のように組み合わせることで得ることができます。


これで[OK]ボタンを押すと、このビヘイビアがInteractiveアクティビティとして振る舞うようになります。

#動作確認

アプリケーションの実行方法はSolitaryアクティビティの際と同様、ロボットに開発したアクティビティをインストールし、オートノマスライフを起動するという形になります。

1. [ロボットアプリケーション]パネルを開き、**[現在のプロジェクトをパッケージングしてロボットにインストールする]をクリック**します

    ![install-robot-app.png](https://qiita-image-store.s3.amazonaws.com/0/54394/178cd6f7-7f1b-6fe4-77bb-b654a267ce65.png)

2. ロボットアプリケーションのリストに `my_interactive` が追加されれば成功です

    ![robot-app-installed.png](https://qiita-image-store.s3.amazonaws.com/0/54394/d626bac1-7ad3-c498-5da8-8452479f184e.png)

3. **オートノマスライフのオン**をクリックします

    ![alife-on.png](https://qiita-image-store.s3.amazonaws.com/0/54394/3c595979-d03e-64ab-0d2d-23eab8de6e41.png)
    

実行例は以下の動画を参考にしてください。Solitaryアクティビティ同様、メモリウォッチャーで `Launchpad/` 以下のキーを監視することでデバッグなどがおこないやすくなります。

[![Interactiveアクティビティの動作例](http://img.youtube.com/vi/n0G0cqk4daE/0.jpg)](http://www.youtube.com/watch?v=n0G0cqk4daE)

###ローディングレスポンスの設定

動画を見ていただくとわかるように、自身のInteractiveアクティビティの起動前に「あ、えーと」などとしゃべっていますが、これが先に説明したローディングレスポンスです。
以下のようにローディングレスポンスの文字列を設定することで、この時のセリフを追加定義することが可能です。

![loading-response.png](https://qiita-image-store.s3.amazonaws.com/0/54394/463f1d61-4f2a-60ec-7751-a4ec31a5a325.png)

なお、ソフトバンクショップのPepperは、「ちっ、ちっ、ちっ、ポーン」のようなセリフと動きにカスタマイズしてあります。いずれ別の記事でこのようなカスタマイズにも触れられればと思います。


> ####![info.png](https://qiita-image-store.s3.amazonaws.com/0/54394/ed7863bd-4c2e-7710-58db-0e38a4f26959.png) [注意]テスト終了後のアプリケーションのアンインストールについて
> インストールしたアプリケーションはPepperの電源をオフにしてもそのまま残ります。
> そのため、アルデバラン・アトリエ秋葉原のPepperを利用してテストをおこなう際は、テスト終了後にアプリケーションをアンインストールするようにしてください。
>
> アンインストールをするには、[ロボットアプリケーション]パネルで**自分が作成したアプリケーションを選択[A]**し、**[選択したアプリケーションをロボットから削除]を選択[B]**してください。
>
> ![uninstall-app.png](https://qiita-image-store.s3.amazonaws.com/0/54394/b55b44d8-2f8f-5058-695d-6f3b91e2eaf9.png)
> ※自身がインストールした以外のアプリケーションを削除しないように注意してください。