>   >  Unityでつくるインタラクティブコンテンツ:第7回:プロジェクタのキャリブレーションをする
第7回:プロジェクタのキャリブレーションをする

第7回:プロジェクタのキャリブレーションをする

第5回から引き続き、測域センサを用いたコンテンツの制作を進めていきます。今回はプロジェクタによる投影位置をより使いやすいよう調整します。

TEXT_高田稔則 / Toshinori Takata(Codelight
EDIT_小村仁美 / Hitomi Komura(CGWORLD)

<1>プロジェクタの投影サイズとUnity上の表示サイズを合わせる

こんにちは、高田です。番外編を1回挟んでしまいましたが、今回は引き続き北陽電機の測域センサを活用したコンテンツ制作を進めていきます。3月初めに事務所を引っ越し、作業スペースが大きく取れるようになったので、プロジェクタなどを利用した場所を使うコンテンツがかなり作りやすくなりました。

前回のソースで基本的な位置検出はできました。しかし、実際に試してみるといくつか使いにくい部分があるため、それを修正していきます。今回説明するコードもGitHubにプッシュしてあります。

●今回のコード
https://github.com/toshinoritakata/URG

測域センサを使うコンテンツで一番多いのは、壁に手をかざすとそこに何かの反応が起こるパターンです。これを実現させるためには以下の3つの要素を合わせる必要があります。

1.プロジェクタの投影範囲
2.センサの取り付け位置
3.実空間でタッチされた場所

まず、1つめのプロジェクタの投影範囲から考えてみます。Unityの画面が投影された場合の実際の大きさを調べる必要があります。今回は1メートルのオブジェクトが1メートルの大きさで画面に投影されるようにします。


まずは壁に画像がゆがみなく投影されるようにプロジェクタの位置を調整します。今回は床置きしたプロジェクタを壁に投影させました。プロジェクタのテストパターンを投影してできるだけ歪みが出ないように調整します。このときレーザー水準器があれば確認が楽になります。


テストパターンを投影


確認に使用したミニレーザー水準器

プロジェクタの位置が決まれば、続いてUnity側の設定を行います。UnityでQuadオブジェクトを作成します。Unityの単位はメートルなので、実空間で考えると1メートルの板が作成されたことになります。次にカメラを正投影に設定し、Quadが適当な大きさになるようカメラのサイズを調整します。正投影にしたのは設定が簡単になること、今回のコンテンツではパースペクティブが不要だからです。


これをプロジェクタに投影して、1辺のサイズをメジャーで測ります。


測ってみると1辺の長さが620mmでした。これを1,000mm(1メートル)の大きさに投影させるためには以下のように設定します。現在のカメラのサイズが1.16と設定されているので、以下のように変更します。


ここで計算された0.719をカメラのサイズに設定します。Unity内で1メートルのオブジェクトが実際に1,000mmの大きさで投影されるようになりました。


なぜmm(ミリ)を使うのか不思議に思うかもしれません。実際の現場では長さを表すのにmmを使うことがほとんどです。図面の表記や打ち合わせでもmmを使われるので、慣れておくと良いと思います。

次にセンサーの様子をプロジェクタで投影してみます。


このようになりました。センサの取り付け位置とプロジェクタが投影する画像がずれているので合わせていきます。黄色い部分がセンサの検出結果です。扇形の中心が測域センサの中心を示しています。この位置が設置されている測域センサの位置とどのくらい離れているかメジャーを使って測ります。今回は縦方向に760mm、横方向に60mmずれているようです。

先ほど行なったカメラ設定によって、投影されている画像は実空間の縮尺と一致しているので、Unity内のセンサの位置をずれ分移動します。URGSensorViewerスクリプトにオフセットを設定できるようにしたので、計測した値をミリ単位でそのまま設定します。回転は見た目で調整します。

これで設定完了です。目印としてセンサから1,000mm離れたところに障害物をつけてあります。このように、センシング結果を合わせてゆくことをキャリブレーションといいます。キャリブレーション結果を見ると大体合っていると思います。

キャリブレーション済み結果

次ページ:
<2>ノイズ除去

その他の連載