2014/12/05 ■ リアルロボットバトル・バトロイド視覚システム解説(Oculus Riftで2mサイズの戦闘ロボットを操縦してみた) Twitterでつぶやくこのエントリーをブックマークに追加このエントリーを含むはてなブックマーク

(2014年11月30日放送 日本テレビ「リアルロボットバトル日本一決定戦!本番まで待てない見所SP」より)

この投稿はドワンゴ Advent Calendar 2014 5日目の記事です。
12月2日に日本テレビ系列で放送された「ロボット日本一決定戦!リアルロボットバトル」という番組、ごらんになったかたも多いかと思います。2m級のロボットが動く!戦う!殴り合う!リアルなロボット(物理)が戦う姿なんてそうそう見られるものではありません。
そして、この中の「人機一体・金岡博士チーム」の制作したロボット「MMSE Battroid ver.0」。番組中ではなかなかにヒール的な扱いになっていましたが(笑)、これバイラテラルのマスタースレーブシステムで動作するかなり本格的なロボットです。そして放送中、このバトロイドを操縦する金岡博士の頭にはOculus Riftが装着されておりました。バトル本番ではあまり使われなかったため本放送の番組中では触れられませんでしたが(事前放送では触れられていた)、このOculus Riftを使い視点もそのままロボットに「乗り移り」、マスタースレーブによりまさに「人機一体」となって戦えるシステムになっていたのです。
(※バイラテラルのマスタースレーブシステム:操縦者の力がロボットに伝わるだけでなく、ロボットにかかった力も操縦者に伝わる双方向のフィードバックがある)
実はこの「MMSE Battroid」のOculus視点システムは私が(仕事でなく個人の趣味として)作り提供したものだったりしますので、これがどういう仕掛けのものだったのか、この場で簡単に紹介してみることにします。

(2014年11月30日放送 日本テレビ「リアルロボットバトル日本一決定戦!本番まで待てない見所SP」より)

MMSE Battroidの視覚系を設計にするにあたり、要件を整理すると
  • マスタースレーブで制御するバトルロボットの視覚をOculusで再現したい
  • 映像の送信は無線を使用
  • 戦闘なので映像遅延はできるだけ減らしたい
  • なるべく酔わないようにしたい
  • カメラは装甲つきの頭部に装着、前方視界が確保できればよい
  • 立体視は必須ではない(あればうれしい)
となりました。
OVRVisionをいわゆるラジコンのFPVのように頭部サーボで制御し頭の動きに追随させる(頭部カメラをOculusの動きにあわせて動かす)ことも考えましたが、これは頭の動きから映像の動きまでにどうしても遅延が発生するためあっという間に酔ってしまいます。訓練で慣れるかもしれないとはいえ、一発勝負のトーナメント戦で「バトル」以外に訓練が要る要素はなるべく減らしたいのも事実です。


そこで検討の結果このような構成に落ち着きました。ロボットの視点は固定カメラに180度画角の円周魚眼レンズを装着し、前方半球の映像(動画)を得ます。その映像をそのまま映像用の無線機でコクピットに送信し、PCでキャプチャ。円周魚眼の映像を半球に展開してOculusの頭部方向からの視覚を再現する、という構成です。立体視はあきらめるかわりに、低遅延・低ストレス(酔わない)・頑健性を重視しました。なおカメラをステレオにして前方のみでも立体視対応することも考えましたが、2カメラ伝送は映像無線系の帯域が心配だったため今回は安全側に倒す(=単眼とする)ことにしました。

上記の構成図、よく見ると「カメラの映像をOculus Riftで見る」という構成(図中で言うと、Operatorブロックのうち上半分)だけでなくPCが2台構成になっています。この追加のPC(下半分)は「Oculus視点でどういった風景が見えているのか」を同時に(Oculus風のレンズ歪みがない状態の映像で)記録、録画するために用意しました。Oculus側の視点情報を常時UDPでブロードキャストするようにし、それを受信して同じ方向の「歪みのない」映像を別PCで出力しています。これは後で資料用に録画しておくだけでなく、メインPCが故障したときのバックアップ機としても機能します。

(2014年11月30日放送 日本テレビ「リアルロボットバトル日本一決定戦!本番まで待てない見所SP」より)

この構成ですと、解像度は若干落ちますが前方180度の視野が得られ、映像遅延はPCでの処理も含めて数十~100ms程度(映像遅延≠ヘッドトラッキング遅延)、ヘッドトラックに対する視野の追随は完全にOculus Rift~PCローカルの範囲で行っていますのでトラッキング遅延は通常のOculusコンテンツと同等となります。

カメラ・レンズ部


当初はさらにバトル中の揺れに対する酔いを軽減するため、カメラ自体に光学式手ぶれ補正の機構を持つ民生ビデオカメラの使用を検討していました。が、これはロボットバトルという環境を考慮すると
  • 映像出力端子(HDMI)が脆弱(ロックできない、端子へかかる力に弱い、振動に弱い)
  • 映像出力端子が現行機ではカメラの横についている(ビデオカメラ後部はラージサイズも装着可能なバッテリーの定位置となっている)ため横からの攻撃時などより端子に無理な力がかかりやすい
  • 液晶パネルを開いたままでないと電源や映像の端子にアクセスできない機種がほとんど。液晶パネルも衝撃に弱い
といった弱点があり、バトルには耐えないだろうと判断しやめることにしました。


そのかわりに、カメラはHD撮影できる監視カメラ(塚本無線 WTW-HB3G1)を採用。ロック可能で頑強なHD-SDI端子(BNC)で接続可能で、暗所にも強い。また選定時は想定していませんでしたが、映像出力形式が変更できる機能がありカメラ自体からプログレッシブ出力(29.97p)が可能でした。動きがありPCでの画像加工が前提となっていたためプログレッシブ出力ができるのは非常に良かった点でした。
円周魚眼レンズについてはコストもあり監視カメラ(SD解像度)用のCSマウント円周魚眼レンズ(FUJINON YV2.2×1.4A-SA2)を採用しましたが、これは画角は充分だったもののレンズ自体の解像度があまり高くなく、収差も含めてカメラ自体の解像度に負けていた印象があります。しかしこれはHD対応のレンズにするとレンズのお値段が跳ね上がるので難しいところです。

無線部


カメラ+円周魚眼レンズで前方180×180度を撮影した映像をHD-SDI無線映像送出機を使って映像としてそのままコクピットに送信します。今回採用した無線機はCAM-WAVE CW-3。映像遅延1ms以下をうたう超低遅延送信が特徴です。できるだけアンテナ(送受信機)はともになるべく高い位置に設置し、見通しを確保するよう配慮しました。5GHz帯を使う無線機ですが、今回非常に安定して動作しており、バトルのスタジオ内ではまったく問題なく・遅延なく送信できていました。

受信部

Photo by Josef F. Stuefer (CC)
このような映像が無線で送信されてくるので、この映像を元の視野に復元します(実際のカメラ映像を保存し忘れていたので別の円周魚眼写真で概念のみお伝えします…)BlackmagicDesign DeckLink Mini Recorderを使いHD-SDIでキャプチャし、半球に正しくマッピングしてやります。

あとはマッピングした半球の中央にカメラを置けば、Oculus Riftにより前方の視野が再現されるというわけです。
元のカメラが固定設置なので、前方180×180度視野といえどもOculusで「横を向く」と視野の限界・境界線が見えることになります。が、実際に装着してみると意外と左右の視界端は気にならず、普通に前方が見えているような感覚で使用することができます。映像遅延はまったく気にならずほぼリアルタイム、トラッキングの遅延はないのでカメラに由来する酔い・ストレスは狙い通りありませんでした。
元の映像が円周魚眼をフルHDで撮影したもので、レンズ性能もあいまって解像度は若干甘いところがありますが、DK2で見ると甘さが目立つ程度、という感じです。これは魚眼レンズを良いものにすればある程度解決するかと思います(値段が1桁違いますが…)


Oculus Rift本体は、DK1・DK2ともに持ち込みましたが最終的にDK1を採用しました。映像の解像度自体があまり高くなくDK2のメリットが活かしきれないこと、試合時間はそれほど長くなくDK1のトラッキングドリフトも問題にならないこと、アプリケーション的にポジショントラッキングが必要なく、(ジャイロのドリフトを補正するためとしても)DK2用のトラッキングカメラを安定して設置できる場所も確保が難しそうなこと、あたりが理由でDK1とDK2でたいして差が出ない上、DK1ですとディスプレイをミラーリングして手元で確認したりなど取り扱いが全般的に簡便なためDK1のほうにメリットが大きいと判断しました。

この「Oculus本体に出す映像と同じものを手元でミラーリング表示できる(分配できる)」というのはいろいろなデモや運用をやっていると結構頻繁に欲しくなる状況で、これを理由にデモでDK1を使う機会がまだ結構あったりします(そしてそのたびに「DK1www」と笑われるのですがw)。公式にミラーリングアダプタとか出してくれないかなあ。DK2のDirect HMD Access+ミラーリング表示がもっと安定して動いてくれるようになる、でもいいのですが。

なぜ本番バトルではこの視覚システムを使わなかったか




ここでも書きましたが、このシステムでMMSE Battroidを操縦してもさほど酔いません。本番バトルで使わなかったのは酔いが原因ではありません。また、Oculus Riftの視覚システムが駄目だったり故障していたり(もしくは最初から動かなかったり)したわけではなく、本番中もきちんと動作していました。単にこれはロボットの製作期間が押しに押してしまった結果、最終的にカメラ(視覚系)とロボットの駆動系をすべて結合してテストできたのが搬入直前であり、全般的に練習不足だったため、です。操縦者の動きとバトロイドの動きのシンクロ率がまだ理想的なものではなかったため、この時点ではバトロイド自身も含めて全体を見ながら操作する必要があった、ということです。

このロボットバトルのあと、本番の反省を活かし引き続きMMSE Battroidは金岡博士によりもろもろチューニングが行われており、いまではOculus Rift(視覚系)をつけて操縦したほうがずっと直感的に操縦することができるようになっています。私も先日(12月2日)初めて操縦させてもらったのですが、当初Oculus無しでしばらく練習してみたもののなかなか思うように動かせず、けっこう難しいなあ…と思っていたのですが、数分練習した後Oculusを装着してみたら一気に自由自在にコントロールできるようになりました。誇張ではなく。
まさに人機一体、ロボットに身体感覚が移行したような気分とはこのことです!

数分練習しただけでこの程度まで動かせるのです(Oculusを見ながら、順に「肩」や「腰」のコアを想定してパンチを出しています)。本当にこのシステムには非常に可能性があると実感しました。

ところで…

(2014年12月2日放送 日本テレビ「ロボット日本一決定戦!『リアルロボットバトル』より)

ここまで読んだアナタ、ぜひこのページ(「人間パワー増幅技術と不整地二足歩行技術に基づく巧緻な搭乗型重作業機械の開発」に係る質疑応答)も読みましょう。熱いです!

Related Posts with Thumbnails