Laravelでpublicフォルダを移動する

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

担当した部分

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

まずはChoregrapheのインストールと起動

Softbank RoboticsのサイトからChoregrapheをダウンロードします。
試用版だったからか、特に登録は必要ありませんでした。
インストールしたChoregrapheのバージョンは2.5.5.5でした。

スクリーンショット 2017-09-17 15.32.43.png

起動すると最初にPepperくんではなく、兄弟のNAOが表示されました。
設定画面から「バーチャルロボット」タブを選択して、Pepperを選択してOKをクリックします。
スクリーンショット 2017-09-17 15.33.01.png
一度Choregrapheを終了させて、再起動するとバーチャルPepperくんとご対面できました。
スクリーンショット 2017-09-17 15.33.29.png

カメラとマイクで録画・録音する

事前に何も調べずに、当日いきなりPepperくんを触り始めた範囲で知ったことですが
Pepperくんは音付きの動画を録画できないっぽいです。(間違ってたら訂正します)

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

スクリーンショット 2017-09-17 15.43.08.png

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

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

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

アップロードするための調査

なんてことない、ただのサーバーにHTTP POSTでアップロードするだけなんですが。

Pepper を使ったハッカソンに役に立ちそうなChoregraphe のボックスを4つ公開しました。 お役に立てれば幸いです。 ボックスは https://github.com
のボックスを使わせていただきました。
結局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 というものがありました。
タブレットやスピーカーで再生ができるボックスですが、設定方法が少しややこしかったです。
スクリーンショット 2017-09-17 15.51.17.png
スクリーンショット 2017-09-17 15.51.21.png
どちらの設定もどこ基準のパスか、みたいなのがわからず
(Soundの方はファイルをプロジェクトフォルダの中から選択する方式でした)
ここの調査に結構時間がかかった印象です。 このあたりは こちらのブログ を見てください。

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で入ると結構楽しい
[紹介元] PHPタグが付けられた新着投稿 – Qiita Laravelでpublicフォルダを移動する

関連記事