今回も10月15日、16日に行われたイベントである「信州マッシュアップアワード12 in 塩尻」のレポートで、前回の続きになります。今回は二日目の話です。
一日目でペッパー君に何とか松岡修造っぽく喋らせるようになりました。一日目は開発時間がたっぷりありましたが、二日目は時間があまりないのでした。特にロボットであるペッパー君は、他の開発チームと違って、自宅で動作を試したり確認することができません。
小型ロボットなら家に持ち帰ることができるのでしょうけど、ペッパー君はかなり体重が重いのです。バッテリーが10時間ほど持つそうなので、バッテリーの重さによるところが大きいのでしょう。何にしても二日目の朝9時半頃から来て開発となりました。
発表は午後4時なので、昼食時間を考慮しても開発できる時間はだいたい6時間になります。じゃあ6時間まるまる使えるかというと、残念ながら駄目なのです。これはペッパー君のハードウェア的な問題なのですが、熱でダウンしてしまうことが多いのです。
「僕、疲れたよ」というセリフを吐き、ひゅ〜んとうなだれてしまったら30分は使えません。さらに、他の一チームもペッパー君を使うということなので、午後3時には全ての開発が終わっていないといけません。残された開発時間はリハーサルも含めて4時間ほどです。
私の所属するチームは技術力がないので(ロボット開発は全員素人だし)、その分、プレゼンやアイデアでカバーする必要があります。
リハーサルをやってみて、修正するとなると、すべての音声とモーションは遅くとも午後2時には完成していなければなりません。もし、ペッパー君が二台ではなく四台あれば、ギリギリまで開発しても大丈夫だったのですが。
また、ペッパー君に接続できなかったりなど、いくつかトラブルがありました。ペッパー君は(多分)DHCPで自分自身のローカルIPアドレスを持っています。前面のタッチパネルの奥にある胸のボタンを軽く押すと、自分の名前とIPアドレスを言ってくれます。
ペッパー君を認識しない場合は、直接IPアドレスを入力することになります。また、ペッパー君は誰かが使うと、他の人からの制御は受け付けません。リクエストがあると画面にダイアログが出て、接続を切るか拒否するか選択することになります。
今回はペッパー君が二台だったので、こういうシーンはあまりなかったのですが、一台だったら開発は間に合わなかったと思います。
ちなみにエラーなどの問題が発生すると、以下のようにボックスが赤く表示されます。思ったほどエラーになることはありませんでしたが、やはり期待通りに処理させるには、様々なノウハウが必要だと実感しました。
https://twitter.com/openspc/status/787566517038649344
午前中にはだいたいのモーションができあがっていました。まあ、松岡修造っぽいと言えば修造っぽいかなあ。思ったほど高速に動かせないのと、様々な制限があって、プレゼンを工夫しないといけませんでした。
https://twitter.com/openspc/status/787492237294698497
https://twitter.com/openspc/status/787492720449159168
・モーション関係のページ、ライブラリ
http://qiita.com/Atelier-Akihabara/items/adbcbf5de1c04767ca93
http://pepper-atelier-akihabara.jp/archives/280
まず、室内を走るということで「音声認識で開始」するようにしました。ペッパー君のセンサーはいろいろありますが、実際にトリガーとして使えるのは左バンパー、右バンパー、後部バンパー、頭部(三か所ある)です(手にもセンサーがあります)。
室内を四周するのですが、どこかで倒れ込み、倒れ込んだところを修造ペッパーが励まします。問題は倒れ込んだかどうかを、どう判断するかです。結論から言えば、倒れ込み判定は無理みたいです。
そこで、倒れ込むと同時にペッパー君の左バンパーを手で押すことにしました。これなら確実です。
ところが、近くで倒れ込むと安全装置が機能して、ペッパー君の腕が動きません。ペッパー君は家庭用として作られているため、プログラムで腕を動かしても近くに人がいると当たらないようになっています(ちなみにペッパー君本体にも当たらないようになっています)。
必要不可欠な配慮ですが、これは困りました。仕方ないので、距離センサーの範囲の変更を試みました。
マッシュアップアワードでは、メーカー等から開発のアドバイスをもらえるのが最大の利点です。この範囲を変更する方法を教えてもらったのですが、Python言語ということで、結局時間切れで挫折しました。実は誰もちゃんとPythonを使ったことがないというオチで……。
・Pepper 狭いところを通れるように
http://tkawata.hatenablog.com/entry/2015/04/19/233535
ペッパー君には顔認識機能があって、自動的に追従させることができます。試しにやってみると、1.5m以内は問題なく追従できます。2.5mあたりまでも大丈夫です。ところが、この範囲を超えると見失ってしまいます。
逆光の場合に見失うのは、初日の開発テストで分かっていたのですが、2.5mを超えると見失ってしまうというのはノーチェックでした。顔認識ができれば、ペッパー君が走者を目で追うということができてよかったのですが。
次に音声によるスタート処理に移りましたが、なんとうまく音声を認識してくれません。ペッパー君は音声認識のレベルを設定できるのですが、デフォルトの30%でも認識してくれないことがあります。
10%にまで下げると、無関係な言葉でも反応してしまいます。100%だと正確な発音以外受け付けてくれません(やってみたけど無理)。そこでペッパー君がどのくらい正しく認識したかを、表示する方法を教えてもらいました。
Choregrapheの表示メニューからダイアログを選択すると、認識した言葉やペッパー君自体がしゃべった言葉が表示されます。四人のうち誰を一番認識するかを試して、走者を決めました。私の言葉は滑舌が悪いのか最低でした……。
ということで走者が決定したので再度リハーサル。まあ、何とか見られる程度にまでなりました。幸いにして、まだ午後2時。よく見るとペッパー君が一台余ってます。このペッパー君にプレゼンもやってもらうことにしました。喋りながら、身振り手振りで説明させるわけです。
モーションと喋る時間を合わせるのですが、腕の動きはじめの秒数を調節しなければいけません。しかし、0.25秒など細かい指定をしても難しいとのことでした。でも、やってみると0.5秒程度なら、あまりずれることなく合わせることができました。
ちなみに、個体差(モーターの差)が結構あるとのことで、同じプログラムを他のペッパー君で走らせても、期待通りにならないそうです。
無事に開発も終わり、発表となりました。ここで、思わぬアクシデント。ペッパー君は、充電のために後部バンパー付近に充電口があります。この充電口が開いていると、移動しないようになっているのです。
この充電口の蓋を閉じておかなかったので、松岡修造っぽく応援しながら移動するという動作を実演できませんでした。まあ、こういうこともあります。
何にしても、二日間に渡ったペッパー君の開発は予想以上に面白く、またロボットならではのノウハウが必要というのも実感しました。ということで、ペッパー君は棺桶……じゃなくて、箱に入って佐川急便でどこかへ運ばれていきました。
https://twitter.com/openspc/status/788277286105559040
さよなら、ペッパー君。
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
ペッパー君の開発は面白いので、機会があればぜひ体験してもらいたいなあと思います。でも、これを一家に一台となると……どうなんでしょうね。居留守番としては結構使えるかと思いますが。
あと、モーターの加熱によるダウンだけでなく、タッチパネルの異様な反応の悪さや、Web app(アプリケーション)のクラッシュ頻度の高さはどうにかならないかなあと。また、再起動に5分以上かかるのも、開発時の難点と言えば難点でした。
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/
・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/
・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/
・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/
・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/
・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/