アトラクションを支える技術 その1-Overlooking The Earthの全体像-
こんにちは、代表の堀川です。
ここから数回に渡って弊社が手がけているアトラクションの技術について解説していこうと思います。第1回では、「Overlooking The Earth」というドームプロジェクションマッピング x ロボット x インタラクティブを掛け合わせたアトラクションについて、アトラクションの概要と技術要素の全体像を解説していきます。

まずは簡単に今回解説するアトラクションについて概要を説明します。
このアトラクションは、栃木県にある真岡市情報センター3Fに常設しているもので、施設内に設置された直径5mほどのドームに、360度全天周映像をプロジェクションマッピングし、映像に連動して動くドラゴン型ロボットが解説していく、というアトラクションです。
DSC_0767

一部体験者がインタラクションできる仕組みも導入しており、トーチリングという独自開発したデバイスを使ってドーム映像中の生物を指し示すとその生物の詳細な情報を表示できたり、指し示した場所の映像の色が変化させたりできますし、音声認識の仕組みも取り入れていて、途中投げかける質問に対する体験者からの回答によって、自動的にストーリーが変化したりといった、能動的に楽しめるアトラクションになっています。

コンテンツは複数用意しており、時期ごとに切り替えるなどの運用を行っています。2017年夏に導入した「海のつながり」で海を舞台として10分間程度の3Dアニメーションとなっています。


本エントリでは、このアトラクションを構成する技術要素について見ていきたいと思います。

ハードウェア構成

まず使用しているハードウェアから解説していきます。構成図はこんな感じです。
mooka構成.002

Mac Pro & プロジェクター

プロジェクターやロボットの制御など、本アトラクションは全てMac Pro1台でコントロールしています。プロジェクターはRICOH WX4241Nという単焦点型のプロジェクターを4台利用しています。Mac Proはドーム投影では強力なプロジェクター1台にワイドコンバーターや魚眼などを使用して投影することも多いと思うのですが、あえて4台の業務用レベルのプロジェクターを使っている理由としては、その方がコスト的に抑えられるというのが大きいです。(WX4241Nのkakaku.comでの価格は12万前後のものが多いですが、例えば10000ルーメン規模のプロジェクターですと、100万以上は普通にします)また、通常の個人ユースのプロジェクターですと、照射距離に対して面積が稼げないことが多く、ドーム全体を覆うのに台数がかかってしまうので、短い距離で照射面積の稼げる単焦点タイプのプロジェクターにしました。

なお、ドームの形状ですが球面ではなく十六角錐の形をしています。これは複数台のプロジェクターで投影した際に、全体が一つの曲面ではない方が、各プロジェクターが覆う範囲を分けやすかったからです。後述しますが、プロジェクターの投影補正にはMadMapperというツールを使用しており、全てのプロジェクターの映像が違和感なくつながるように調整されています。

また、少し厄介な点として、プロジェクターは全てHDMIケーブルをつないでいますがMac Proには1基しかHDMIポートがなく、4台分つなぐにはMini Display/HDMIの変換をかける必要があります。Mac ProのFAQによると4台のHDMIモニターへの接続は正式にはサポートされていないですが、こちらのようなアクティブ型のMini Display/HDMIの変換アダプタを使用することで、問題なく4台分HDMI出力することできます。弊社ではまだ試していませんが、世の中の事例では、こういった複数台のディスプレイに対する分割出力では、DualHead2Go/TripleHead2GoやDatapath x4といった製品を間に噛ませることも多いようです。

ドラゴン型ロボット


OLE_robot
映像として連動して動くナビゲーターとして、弊社が独自に製作したドラゴン型のロボットを導入しています。これは3Dプリンタ製で、口部分がサーボモーターで開閉しリップシンクするようになっているのと、目の部分にディスプレイが仕込まれており、表情を付けられるようになっています。口以外に可動部はなく、後述するロボットアームによって全体の動きだけはつけられるようになっています。サーボモーターは、ごくごく普通の双葉のPWMサーボ、ディスプレイは4D SystemsのuOLED-128G2というややマニアックなディスプレイを左目と右目で1台ずつ使っています。色々試した結果、目部分に使用できるくらい小型で、目のアニメーションを表示して十分なフレームレートが出るディスプレイがこれくらいしかなかったというのが選定理由ですが、Arduinoのライブラリが微妙に使いづらく、もっと使い勝手のいいものがあればよいなというのが正直なところです。

これらサーボとディスプレイはMac ProにUSB接続したArduino Unoを経由して制御しています。

ロボットアーム

名称未設定

ロボットアームの先端にドラゴン型ロボットを取り付け、全体の動きをつけられるようになっています。ドラゴン型ロボットの重量が部品など込みで約1kg、また動きを大きく見せるため、アーム長を約50cmとかなりの長さになるのでロボットアームに求められるトルクも大きくなってきます。世の中に流通している安価なロボットアームはせいぜいペイロードが500gとかで、かといって産業用のロボットアームだと費用がかかりすぎるため、検討した結果、MTMシステムズ様が提供している「TsukArm」というロボットアームのカスタマイズ版を購入して使わせて頂いています。

このアームは元々「nanabo」というオープンソースのロボットアームをカスタマイズしたものですが、トルクの高いサーボを組み合わせることで、2kgのペットボトルを振り回せるくらいのハイトルクなアームを実装することができます。

このアームはMac ProにUSB接続したArduino Dueを経由して制御しています。

トーチリング

torchring
ドーム映像とのインタラクションを行うための独自開発デバイスです。Wiiリモコンのように、基本的にはドーム映像のポインティングを行うためのデバイスですが、Wiiリモコンと違うのは360度全方向をカバーしているという点です。体験者はドーム内であればどこからでも、どの方向でも指すことができます。

これを実現するために、HTC VIVEでも採用されているポジショントラッキング技術であるlighthouseの仕組みを使っています。具体的には、現場にHTC VIVEのBase Stationを現場に設置し、そこから発光された赤外線を受信することで位置推定を行うVIVE Tracker相当のデバイスを自作しています。

この開発をしていた2017年6月当時、既に何人か自作された方がいて、その中から以下のレポジトリを参考にしてデバイスを作成しました。
https://github.com/ashtuchkin/vive-diy-position-sensor

このレポジトリに載っているものは、赤外受光センサーが1つで、その点の位置座標しか分からないものですが、受光部を2つ、3つとすることで、方向や姿勢も分かるように拡張できます。今回のアトラクションでは、受光部を2つとし、デバイスが指し示している方向も計算できるようになっています。
以下の写真は、トーチリングの初期のプロトタイプで、右側2つの小さい基盤が赤外線受光部、左の基盤に姿勢位置を計算するマイコンとBluetoothモジュールを乗せています。
torchring_proto

ソフトウェア構成


続いて使用しているソフトウェア構成について解説していきます。

mooka構成.003

anima & Unity & MadMapper

全体の中核を担うのがanimaという独自製作のソフトです(ソース非公開)。これはweb上で映像やシナリオの切り替えタイミングや、3Dキャラクターのアニメーション(今回でいうとドラゴン型ロボットとロボットアーム)を編集でき、PC上で動くelectronアプリからそれらのデータを取得することで、タイムラインに沿ってUnityやArduinoなど他の様々なソフトやハードに対しての制御を行うものです。
たとえばUnity上でシーンが切り替わるタイミングや次はどのシーンが立ち上がるか、などの情報をweb上で設定し、electronアプリはその情報を元にUnityにシーン切り替えのための信号を送ります。
これにより、インタラクションや映像の制御はUnity、ロボットなどのハードの制御はArduinoと、それぞれのツールに得意な領域を任せたまま、その連携タイミングだけをanimaでコントロールできるようになります。また、アニメーション等の情報をweb上で編集できるようにしたことで、後々コードの変更無しで変更できるなどのメリットが生まれます。

プロジェクターで投影する際の投影補正はMadMapperを使っており、UnityからSyphonで映像を転送しています。MadMapperだけでも動画ファイルの再生はできますが、今回はインタラクティブに変化していく映像を投影する必要があったため、Unityで最終的に出力する映像を組み立てています。
madmapperで投影補正をしているところ

madmapperで投影補正をしているところ


ドラゴン型ロボット & ロボットアーム (Arduino)

ドラゴン型ロボットとロボットアームは共にArduino経由で制御しています。Arduinoとanima(electron)はFirmataというプロトコルでやり取りしています。Arduino側にFirmata用の特定のスケッチ(Arduino IDEに標準でついてくる)を転送しておけば、あとはPC側のプログラムから、かなり自由度高くArduinoを制御できます。Firmataを実装したプログラムライブラリも多く、たとえばnode.jsではjohnny-fiveというライブラリが有名です。

ドラゴン型ロボットに接続しているArduinoの方は、目ディスプレイを制御するするため専用のArduinoライブラリを組み込む必要があったため、StandardFirmataという既成のスケッチを改造し、組み込んでいます。

トーチリング

トーチリングにはRN42というBluetoothモジュールが内蔵されており、デバイス中のマイコンで計算された姿勢位置情報をBluetooth経由でPCに転送しています。このBluetoothのプロファイルはSPP(シリアルポートプロファイル)でMac Proから見ると単なるシリアルポートに見えるのですが、Unityから直接シリアルポート通信すると接続が途中で切れるなど動作が不安定だったので、bt-osc-bridgeというBluetooth SPPで読み込んだ内容をOSCで送り直してくれるnode製のプログラムを作り、UnityではOSCでデータを受けています。

まとめ

弊社が製作しているドームプロジェクションマッピング x ロボット x インタラクティブを組み合わせたアトラクションの全体像について解説しました。個々の技術要素はあまり珍しくはないですが、組み合わせて実際の一つの作品に仕上げてみた事例はあまり多くなく、裏側の仕組みの解説はなかなか貴重な情報になるかなと思います。

筆者はアトラクションを製作する会社を始めてもう少しで2年たちますが、もともとWeb・アプリ開発のエンジニアをずっとやっていました。それらの世界と比べると、このような体験型のアトラクション製作ではあまり技術情報が公開されず、自分たちで1からやるのは大変だなと感じます。こういう記事を公開することで、業界の底上げになったらよいかなと思っています。また、ばりばり作っている人のマサカリ的なフィードバックも歓迎ですので、ぜひご意見をください。

次回以降は、各技術についてもう少し突っ込んだ内容を書いていく予定です。
関連記事一覧