360度パノラマカメラ2 現実空間伝送法
技術的進化
本稿は、
■パノラマ映像を遠隔地に転送し、より見やすい形で提示する
ことを目的とするメモ書きである。
前の作品からの変更を検討する点は、以下の通りである。
- 機能追加(ARToolKitによるパノラマ映像の3D表示)
- 機能追加(レイテンシーと劣化の少ない通信)
- 速度改善(OpenGLによるGPU処理)
- 速度改善(元映像の高速な取り扱い)
ARToolKitによるパノラマ映像の3D表示
既に広く応用されていて、真新しいことは何もないARToolKitだが、以下のことを簡単に実現できる。
- 3Dモデルだけでなく、映像も実空間に投影できる
- マーカを動かすことで、オブジェクトを見ている方向を直観的に操作できる
このため、ある場所のパノラマを離れた場所で見られるような、以下のようなモデルを考えた。
- ARToolKitのマーカの周辺に、円筒形のモデルを配置
- そのモデルに、パノラマ映像をどんどん貼っていく
- マーカを動かすことにより、即座に見ている方向の変化を検出する
これをAndroid 2.2 FroyoにNyARToolKitを用いて実装したが、性能は比較的足りているものの、いかんせん画面が小さいため、わかりにくいという結果になってしまった。なので、これをC言語版のARToolKitに移植することにする。
OpenGLの利用
基本的に、前回のパノラマカメラでは、全てOpenCVによる画像処理によってパノラマを実現してきた。しかし、パノラマ処理には重い負荷がかかり、以下の環境
で、
- 1600x1200->2400x500(くらい): 5fps(くらい) CPU 100%
- 720x480->460x140: 30fps CPU 50%
という程度の処理速度である。一方、今回は実用的な画質を目指しているため、
- 1080x1080->1920x480(くらい) 20fps
を実現したい。まあ適切なチューニングを施して、デュアルコアを有効に使えば実現できなくもなさそうだが、今回は同じマシンでARToolKitも動かす予定のため、できるだけ処理は減らしたい。
そこで考えたのが、テクスチャマッピングで全方位映像を直接ポリゴンに貼付けるという方法である。現在のパノラマ展開方法は、テクスチャマッピングの原理そのままであるので、展開処理と3D描画を同時に行うことができる。
以上は、次の手順で実装する。
- ARToolKitのシンプルな3Dモデルが出て来るサンプルを動かす<-動いた
- 自作の円筒形のモデルを表示できるようにする<-動いた
- それにテクスチャを貼る<-動いた
- テクスチャをリロードできるようにする<-動いた
高速な無圧縮通信
遠隔映像システムでは、映像の伝送が問題になる。今回の場合、距離によらない伝送を目指しているが、特に遠隔会議などでは、10/1秒の遅れが人の行動に影響を及ぼす場合がある。そこで、無圧縮で伝送を行うことで、処理の遅延を減らす方策を考えた。
無圧縮の場合、例えば全部24bitカラーとして、今回検討する機材で可能な映像のビットレートを算出すると
- 640x480, 30fps->211Mbps
- 960x720, 20fps->316Mbps
- 1280x720, 20fps->422Mbps
- 1280x720, 30fps->633Mbps
- 1080x1080, 20fps->534Mbps
- 1080x1080, 30fps->801Mbps
- 1920x1080, 20fps->949Mbps
- 1920x1080, 30fps->1424Mbps
この程度の帯域を実現できる伝送路は
- Ethernet(1000BASE-T/TX):最も有力だが安定性に不安
- USB2.0:最大速度が遅く、カメラも接続するとバスの問題で速度が出ない可能性
- IEEE1394:カメラで使う可能性、安定した伝送路。ついているパソコンが少ない。
- HDMI:最も高速で、Ethernet通信が可能。ただし対応機器をそろえる必要。
この中から、接続の簡単さと汎用性、安さから1000BASE-Tで、クロスケーブルを選択した。なお、以下は判断から除外した。
- 光や10G以上のEthernet、USB3.0、サーバ間接続バス
通信にはソケット通信を用い、1回の送信で1フレーム(1MB-6MB)を送信した。この設定で速度試験を行ったところ、実効速度は340Mbps程度のようだ。
統合
以上をあわせたシステムの構成図は以下のとおりである。
なお、これは「今あるもので」「適当に」作ったシステムである。画質や通信帯域には明らかな改善が必要である。このシステム全体で25万かかっていないと思うし、今ならもっと安くいいものが作れると思う。
このシステムを何に使うか
まあ大体完成して、1週間後にはYouTubeか何かでデモ的なものを見せられると思う。ただ、その前に大学院での実験があるので、それを念頭に置いて、パノラマが「ただ面白い」を超えて何ができるかを考えてみる。
実は、このシステムの元はパノラマではなく、遠隔共同作業用のロボットを、機械いじりが苦手だからパノラマとARを使って再現したものだ。例えば、ロボットなら首を振って周囲を見渡すことができるが、それができない代わりにパノラマで360度の映像を取得しておいて、ARToolKitで表示する領域を制御できるようにする、といったものだ。だから、このシステムの目的も、机とかじゃなくて部屋とかそういう人が歩ける範囲で作業をするのを、遠隔地から支援してやるというものだ。
大きなロボットが共同作業の場にいることは、凄いメリットだ。人間と同じくらいの存在感があり、体の配置や手の動きなど、共同作業を行う際に必要なノンバーバルなコミュニケーションを再現することができる。これにAR(もしくはもっと広くVR全般)で対抗するとしたら、テレプレゼンスを異常に洗練させるか、もしくは大きなロボットではできない、小さいからできることをしなきゃならない。