Solitaryアクティビティの作成

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

まず、これまでのチュートリアルで説明してきたアプリケーションとビヘイビア(フロー)の定義に加え、アクティビティではどのような要素を増やす必要があるのかを説明し、具体的なアクティビティの作成、実行を通じて、単独のアプリケーションの場合とどのような点が異なるのかをみていきます。
なお、 **オートノマスライフについてはバーチャルロボットでは動作確認手段はなく、Pepper実機が必要になります**。 アルデバラン・アトリエ秋葉原などでPepper実機を使って実験などおこなってみていただければと思います。 (予約URL：http://pepper.doorkeeper.jp/events)

#アクティビティに必要な要素

##アプリケーション情報

これまでのようなアプリケーション単体での実行時には意識する必要がありませんでしたが、自身が作ったビヘイビアをアクティビティとして実行する際は、アプリケーションをPepperにインストールするという手順が必要になります。
(参考：[オートノマスライフの考え方#ロボットアプリケーション](http://qiita.com/Atelier-Akihabara/items/555989ab1d7d7e63e520#%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3))

そのため、プロジェクトに対して、アプリケーションの名前を設定したり、内容がわかるような説明を設定するなどの手順が必要になります。

##トリガー条件

アクティビティはオートノマスライフ実行時、[Autonomous Launchpad](http://qiita.com/Atelier-Akihabara/items/555989ab1d7d7e63e520#autonomous-launchpad)や別のInteractiveアクティビティから起動されます。
特にSolitaryアクティビティについては Autonomous Launchpad からのみ起動されますが、この際の起動条件を記述する必要があります。

今回は、**Pepperの付近に人がいないと判断される状態が10秒間続き、かつ直前に実行されたアクティビティが自分自身ではないかどうか**の判定を例に、トリガー条件の記述方法についてみていきます。

###付近に人がいないことを判定する条件式

Pepperのセンサーによる挙動の変化にはメモリイベント (参考: [Pepperチュートリアル (6)：タッチセンサー、人の認識#人の認識](http://qiita.com/Atelier-Akihabara/items/0a5826fb018a4d0e4268#1-4)) を使いましたが、トリガー条件でもメモリイベントと同様、キーとなる文字列を指定してさまざまな状況把握のための値を利用することができます。
たとえば、付近に人がいないと判断される場合には、 `Launchpad/PeopleNotSeen` イベントがTrue (1)となります。
このキーに対する条件式を記述することで、付近に人がいないこと（もしくはその逆）をトリガー条件として利用することができます。

たとえば、条件式中では演算子 `==` を用いてあるキーが特定の値であるかどうかの判定をおこなうことができ、演算子 `~` を用いてある条件の成立が一定時間続いたということを判断することができます。
たとえば、**Pepperの付近に人がいないと判断される状態が10秒間続いているかどうか**の判定ならば、

```
(('Launchpad/PeopleNotSeen' == 1) ~ 10)
```

となります。

###連続して繰り返し実行されることを防止する条件式

自分が作ったアクティビティに関して、何度もこのアクティビティだけを繰り返し実行させず、1度実行したら別のアクティビティに制御を優先したい場合があります。
このような場合、 `Launchpad/PreviousActivity` に最後に実行されたアクティビティの識別子が格納されることを利用して、以下のように条件式を記述することができます。

```
('Launchpad/PreviousActivity' != '(自分が作ったアクティビティの識別子)')
```

アクティビティの識別子は `(アプリケーションID)/(ビヘイビア名)` の形式で記述します。後ほど具体例を通じてみていきます。

###2つの条件式が成立したことを判定する条件式

ここまでで挙げた2つの条件が両方とも成立している場合のみアクティビティを起動したい場合、演算子 `&&` を用いて、以下のように条件式を記述することができます。

```
(('Launchpad/PeopleNotSeen' == 1) ~ 10) && ('Launchpad/PreviousActivity' != '(自分が作ったアクティビティの識別子)')
```

> ####![info.png](https://qiita-image-store.s3.amazonaws.com/0/54394/ed7863bd-4c2e-7710-58db-0e38a4f26959.png) [参考]より詳しくトリガー条件について知るには
> トリガー条件の詳細な記述方法は、
>
> * SDKドキュメント NAOqi Developer guide > NAOqi Framework > NAOqi API > NAOqi Core > ALAutonomousLife > Launch trigger conditions
> 
> にあります。他にどのようなイベントがあるのか、条件式の他の記法について知ることができます。


#つくってみる

今回は例として、 **しばらく(10秒間)人がまわりに見えないと、「誰もいないのかなあ　誰かこないかなあぁ」としゃべるSolitaryアクティビティ** を作成してみます。

##ビヘイビアの作成

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

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

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

    ![rename-behavior.png](https://qiita-image-store.s3.amazonaws.com/0/54394/8ed08583-f969-1e0b-7dde-5c956febc25d.png)

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

    ![rename-behavior-box.png](https://qiita-image-store.s3.amazonaws.com/0/54394/85ab13d4-d5f9-079e-8662-a1f66d88c6bb.png)

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

    ![save-project.png](https://qiita-image-store.s3.amazonaws.com/0/54394/bb8c8c1d-545b-9572-af1a-6ae82e23bbbf.png)

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

    ![project-property-button.png](https://qiita-image-store.s3.amazonaws.com/0/54394/d577658f-e059-abd9-4dc2-96c58cdc2067.png)

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

    ![project-property-default.png](https://qiita-image-store.s3.amazonaws.com/0/54394/4f47b0a1-249a-301d-aa37-891b30971e09.png)


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

    ![project-property-lang-1.png](https://qiita-image-store.s3.amazonaws.com/0/54394/79779c98-8f48-4d2b-b632-f1417248c94f.png)

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

    ![project-property-lang-2.png](https://qiita-image-store.s3.amazonaws.com/0/54394/6bf5d8d8-7f60-9a76-4096-c84b8e20ca22.png)

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

    ![project-property-lang-3.png](https://qiita-image-store.s3.amazonaws.com/0/54394/c7b05e1e-e49d-6a13-2aba-7be5cc4fc3f2.png)

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

    ![project-property-description-b.png](https://qiita-image-store.s3.amazonaws.com/0/54394/865dd424-79a6-bf7b-f140-7b7a276a5d32.png)


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

###フローの作成

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

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

    ![flow-box.png](https://qiita-image-store.s3.amazonaws.com/0/54394/d149f79b-423a-1078-bc8d-134ced6bd339.png)

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

    ![flow-connection.png](https://qiita-image-store.s3.amazonaws.com/0/54394/e223dbd3-2752-c7a2-3fb4-7ce95602afac.png)

3. Animated Sayボックスをダブルクリックし、Localized Textボックスで**[Japanese]を選択し、「誰もいないのかなあ。誰かこないかなあぁ。」と入力**します

    ![animated-say-content.png](https://qiita-image-store.s3.amazonaws.com/0/54394/11b403f0-2515-938c-0ac7-d774ed849681.png)


これで、身振りつきで「誰もいないのかなあ。誰かこないかなあ。」としゃべるビヘイビアを作成することができました。

###動作確認

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

![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)

身振り付きで「誰もいないのかなあ。誰かこないかなあ。」としゃべれば成功です。
次に、これをSolitaryアクティビティとして設定していきます。

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

1. [プロジェクトの内容]パネルの**[プロパティ]をクリック**します

    ![project-property-button.png](https://qiita-image-store.s3.amazonaws.com/0/54394/edae042f-0b27-26c6-a2ae-b10ffb156415.png)

2. **[iamlonely]ビヘイビアを選択[A]**すると、ビヘイビアのプロパティを編集するためのパネルに切り替わりますので、[名前]に **iamlonely と入力[B]**し、[性質]ドロップダウンリストから**[Solitary]を選択[C]**します

    ![behavior-change-solitary.png](https://qiita-image-store.s3.amazonaws.com/0/54394/35f0d174-073b-d244-4699-405c3a513ecb.png)

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

    ![project-property-trigger.png](https://qiita-image-store.s3.amazonaws.com/0/54394/5d0e762c-3eea-6c1a-90c3-cb8dcae7d145.png)

    ```
    (('Launchpad/PeopleNotSeen' == 1) ~ 10) && ('Launchpad/PreviousActivity' != '(自身のアクティビティの識別子)')
    ```

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

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

#動作確認

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

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

    ![install-robot-app.png](https://qiita-image-store.s3.amazonaws.com/0/54394/65006c67-bdef-6086-1bf3-adad66375577.png)

    [ロボットアプリケーション]パネルの開き方については [オートノマスライフの考え方#ロボットアプリケーション](http://qiita.com/Atelier-Akihabara/items/555989ab1d7d7e63e520#%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3) を参考にしてください。

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

    ![robot-app-installed.png](https://qiita-image-store.s3.amazonaws.com/0/54394/deb2ed0f-a8c1-3eb9-66ce-37b7cec8c6e2.png)

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

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

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

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

このように、人がいない場合の挙動をSolitaryアクティビティとして実装することができます。

> ####![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/281e6495-c46e-aecd-c94f-6a67f38b2e9c.png)
> ※自身がインストールした以外のアプリケーションを削除しないように注意してください。