ChoregrapheでPepperを動かすまで

9/9,10に行われたMashupAward2017の福井予選で
[生産管理部業務効率課 進捗課長](http://hacklog.jp/works/50565)というものをチームで作らせていただきました。

## 担当した部分
- Pepperのカメラ・マイクを使って録画と録音（敢えて録画と録音に分けた理由は後述）
- (当初は撮影した動画や音声をサーバで処理する計画だったので）サーバにアップできるか調査
- Pepperの内部にsshでログインして細かい調査など

## まずはChoregrapheのインストールと起動
[Softbank Robotics](https://developer.softbankrobotics.com/jp-ja/?__CAMCID=bPwQfYSFku-309&__CAMSID=fdOefbICdlfEg-49&__CAMVID=IDOEiCgcfeH&_c_d=1#_ga=2.160782269.1612061861.1505629385-2048707358.1504928690)のサイトからChoregrapheをダウンロードします。
試用版だったからか、特に登録は必要ありませんでした。
インストールしたChoregrapheのバージョンは2.5.5.5でした。

<img width="389" alt="スクリーンショット 2017-09-17 15.32.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/3e35f23a-e590-1b6b-4646-0892698db670.png">

起動すると最初にPepperくんではなく、兄弟のNAOが表示されました。
設定画面から「バーチャルロボット」タブを選択して、Pepperを選択してOKをクリックします。
<img width="753" alt="スクリーンショット 2017-09-17 15.33.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/27bb7752-e2c0-b3bf-ad9c-082f644a67af.png">
一度Choregrapheを終了させて、再起動するとバーチャルPepperくんとご対面できました。
<img width="389" alt="スクリーンショット 2017-09-17 15.33.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/677dec81-1f02-07a8-6ef0-f4317b1baab3.png">

## カメラとマイクで録画・録音する
事前に何も調べずに、当日いきなりPepperくんを触り始めた範囲で知ったことですが
Pepperくんは音付きの動画を録画できないっぽいです。（間違ってたら訂正します）

Choregrapheの中に最初から用意されているボックス（動作を行うためのひとつのかたまり）に
"Record Video" と "Record Sound"　というものがあり、そこから別々に取得することは可能でした。
Videoの場合は対応形式が`MJPG`か`IYUV`、Soundの場合は`ogg(Front mic)`か`wav(Front, side, back mic)`形式で取得することができます。

<img width="833" alt="スクリーンショット 2017-09-17 15.43.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/1f7b081f-e556-372b-6c2c-db7286766ac5.png">

こんな感じで２つを並列につなげるとPepperくんで動画と音声を別々に撮ってくれます。

撮影した動画は `/home/nao/recordings/cameras`内に、
録音した音声は `/home/nao/recordings/microphones`内にそれぞれ保存されます。
音声の場合はボックスの設定で`Temporary Storage`のチェックが外れていることを確認してください。（ちょいハマりポイント）

*※実行するためにはPepperくん実機と接続する必要があります*

## アップロードするための調査
なんてことない、ただのサーバーにHTTP POSTでアップロードするだけなんですが。
http://qiita.com/tkawata1025/items/df181d22e44f9150a01d のボックスを使わせていただきました。
結局Pepperくんの内部でffmpeg走らせることにしたので、サーバは使わない事になりました。
どっちかというとPHPサーバのコードに手間取りました。(ググってもmultipartばっかりヒットした）

```
<?php
$postdata = file_get_contents("php://input");
if (isset($postdata)&&strlen($postdata)>0) {
  $handle = fopen("file-name.ogg", "w+");
  fwrite($handle, $postdata);
  fclose($handle);
} else {
  echo "r=error";
}
```

## 再生するための調査
「そもそもPepperくんで取得した映像や音声はそのまま自分で再生できるのか」という疑問がありましたが、
同じくデフォルトであるボックスの中に `Play Video`, `Play Sound`　というものがありました。
タブレットやスピーカーで再生ができるボックスですが、設定方法が少しややこしかったです。
<img width="407" alt="スクリーンショット 2017-09-17 15.51.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/8d6ec75d-ebc7-da40-aeae-67175f4e38f9.png">
<img width="521" alt="スクリーンショット 2017-09-17 15.51.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/30152/578eb3b0-698f-9e4b-1aed-17ffdec5b57c.png">
どちらの設定もどこ基準のパスか、みたいなのがわからず
（Soundの方はファイルをプロジェクトフォルダの中から選択する方式でした）
ここの調査に結構時間がかかった印象です。 このあたりは [こちらのブログ](http://rch850.hatenablog.com/entry/2017/09/13/235819) を見てください。

## Pepperくんにsshログイン
NAOqiという独自OSで動いているという話でしたが、`nao@robotname.local`でsshログインできたので
いろいろ中身を覗くことができました。`nginx.conf`を見て適切な場所に動画と音声ファイルを配置してみたりもしました。
`$ qicli call ALTabletService.playVideo "/opt/aldebaran/www/apps/movie.mp4"` 
みたいなコマンドを叩くとサクッと動画を再生させられるのでデバッグに便利です。

複数人が一台のPepperくんを共有して開発している状態だったので、Choregrapheで接続を
要求したり解除したりが結構忙しい状態でした。
「ffmpegで結合した動画が再生できるのか」くらいの調査であれば、sshログインして`qicli`コマンドをサクッと叩くので
十分でした。他の人がタブレットを使うコードを走らせていない前提ですが。
（「Pepperいただきますー」みたいなやり取りが発生してそこが楽しくもありました:ok_woman:）

## まとめ
- Pepperくん初めてさわったけど楽しい
- Choregrapheは複数人で開発するときにもうまく接続が競合しないようにできている
- Pepperくんにsshで入ると結構楽しい