Pepper SDK入門(31) AnimateとAnimationでPepperのanima(魂)を疑似体験する

#はじめに
今回はQiChat MANIAXではなく、Pepper SDK入門の続きです！
腕や頭部、腰、ひざの他、ホイールを使った動きや事前に定義した軌道上を移動するような動作を作るAnimate、及びAnimationについて書いていきます✏️
アニメーションはタブレットにもスマートスピーカーにもないもので、PepperをPepperたらしめるものすごーーーーく大事な機能です！！！！
基本的な実装はこちらになります↓

```java
//アニメーションのオブジェクトを作成
Animation myAnimation = AnimationBuilder.with(qiContext)
                                      .withResources(R.raw.dog_a001)
                                      .build();

//アクションをビルド
Animate animate = AnimateBuilder.with(qiContext)
                                .withAnimation(myAnimation)
                                .build();

//アクションを非同期に実行
animate.async().run();

```
#着ぐるみには中身がいるし、アニメーションにはアニメーションをするためのファイルがある⚙🧸
AnimationでPepperを~~鏡の中の~~マリオネットにしましょう！使用されるファイルの拡張子は.qianimと.pmtです。

[Animation Browserの回](https://qiita.com/kskrin/items/c3f1a07d8fe05c41c5a4)も参考にしてください。

また、Animationではラベルを取り扱うことも可能です！
ラベルを使用すれば、Animation内の指定のタイミングで発話や画面表示が指定できます。

```java
Animation animation = AnimationBuilder.with(qiContext)
                                      .withResources(R.raw.dog_a001)
                                      .build();

Animate animate = AnimateBuilder.with(qiContext)
                                .withAnimation(animation)
                                .build();

animate.addOnLabelReachedListener((label, time) -> {
    //ラベルが到達した場合の処理
});
```

これは<ins>[Git](https://github.com/aldebaran/qisdk-tutorials/tree/master/app/src/main/java/com/softbankrobotics/qisdktutorials/ui/tutorials)</ins>のMastering Animation labelsで体験できます🏷


#使用例
##.qianmファイルの場合
Animation Timelineとも呼ばれ、腕と頭部、腰、ひざ[^1][^2]を使った動作を行います。日常的な挨拶の動作や動物の真似、ダンスなど、種類は様々です🎁🎨
アニメーションはアニメーションライブラリから選ぶ他に一から作成することも、Animation Editorで編集することも可能ですので、多様なアニメーションが実現します🩰

[^1]: ひざを使うとモーターホットが発生しやすくなります。負担が大きいため、あまり使用しないのがおすすめです。
[^2]: 腰、ひざを使うとホイールが浮くような動作になることがあります。

<img width="120px" alt="VID_20210806_125106.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574697/41be36f4-5547-0c61-a3cf-a013b247aff1.gif">$\tiny{aiboに対抗している様子}$
##.pmtファイルの場合
Animation Trajectoryとも呼ばれ、Pepperが移動する軌道を作成することができます。
.pmtファイルについては[Trajectory Editorの回](https://qiita.com/kskrin/items/198bdfbeeef38d26b649)を参考にしてみてください。

#石橋を殴って渡ろう~Pepperの安全制御について~
Pepperには安全制御機能が搭載されています。そのためアニメーション実行時に障害物にぶつかりそうになると、アニメーションは部分的に実行されることがあります。移動の際も同様に、移動経路上に障害物があると、該当部分の移動がカットされる場合があります。

全体的なアニメーションの実行時間は変わらないため、障害物を回避すると目的地に到達する十分な時間が確保されない場合があり、その際Pepperは全ての軌道を辿ることなく動作を停止します。時は吝嗇なのです。

#AnimateとGoToの二択について🦀
Pepperの動作はAnimateでもGoToでも作成することができます。
Animateでは障害物回避の動作を除いて安定した軌道を作ることが可能ですが、特定の地点に移動させる場合はGoToを使うのが良いでしょう。GoToであれば障害物をよけつつ、目的地まで移動することができます。
ダンスやボディーランゲージ、決まった動きをさせたい場合は、Animateの使用がおすすめです。使用目的に合わせて選びましょう🦉🌆

#あとがき
今回はPepperSDKforAndroidの[Animate](https://android.aldebaran.com/sdk/doc/pepper-sdk/ch4_api/movement/reference/animate.html)と[Animation](https://android.aldebaran.com/sdk/doc/pepper-sdk/ch4_api/movement/reference/animation.html)を参考に書かせていただきました。
さらに詳しい情報は、[AnimateのAPIドキュメント](https://android.aldebaran.com/sdk/doc/javadoc/qisdk/com.aldebaran.qi.sdk.object.actuation/-animate/index.html)、[AnimationのAPIドキュメント](https://android.aldebaran.com/sdk/doc/javadoc/qisdk/com.aldebaran.qi.sdk.object.actuation/-animation/index.html)を参照してください。

次回のPepperSDK入門はトラベルのアレじゃないGoToです🧳それでは！🧨