AR Sandboxの調整、校正法 (2019/11/03作成)

sandbox_image1.png

AR Sandbox利用できます

  • ここで紹介しているAR sandboxは研究所の第3研究棟(旧医療センター)1階に置いてます。どなたでも見学可能です。同じ部屋にダジックアース(地球や惑星表面を球面に投影する装置)や偏光顕微鏡も置いていて、そちらも利用可能です。将来的には展示室として、平日9時〜17時に利用できるようにする予定ですが、現在はまだ準備中なので、ご利用を希望される場合は事前にお知らせください。イベント用に貸し出しもできるとは思いますが、AR sandboxはかなり重いので運びづらい、背が高いので上側を分解して、現地で再組み立て及び調整が必要になります。

AR Sandboxの調整、校正法

  • 先日、AR Sandboxを自作しましたが、調整にちょっとてこずったので、方法をまとめておいきます。基本的には、Oliver Kreylosさんの書かれているWebページ(http://idav.ucdavis.edu/~okreylos/ResDev/SARndbox/LinkSoftwareInstallation.html)とyoutubeの調整法の解説ビデオ(https://www.youtube.com/watch?v=EW2PtRsQQr0)を見ればいいのですが…
  • ひとつやりづらいのは、プロジェクターにつないでしまうと、画面が砂の上に表示されて、かつかなり拡大されているので、terminalでの操作が難しくなります。必要な場合は、一時的に液晶ディスプレイにつなぐ必要がありました。
  • 私はKreylosさん推薦のLinuxのMint 19 Mate 64 bit版を使ってます。PCはかなり古いのですが、以前第一原理計算に使っていたもので、i7 6coreでまだ十分使えるものです。グラフィクスボードはGTX 1060 6 GBを使いました。ボードを最初に使ったPC(最新)では、どうやってもNVIDiaのドライバーをインストールできませんでした。この古いPCに変えたら、問題なくインストールできた。ここがAR Sandboxの一番の難所でした。Vrui, Kinect, SARndboxのインストールまでは全く問題なし。KinectカメラはXBOX 360 Kinect Sensor。プロジェクターにはBENQのMW632STを使用してます。

Kinectカメラのキャリブレーション

  • Kinectカメラを接続して、キャリブレーションをする。以下をterminalから実行。
    sudo /usr/local/bin/KinectUtil getCalib 0
  • 古いKinectカメラでは、さらに追加の調整が必要だが、多分不要としてスキップ。 ただ、モデル番号がわからなかったので不安ではある。

Kinectカメラの方向調整

  • Kinectカメラを接続して、以下をキャリブレーションをする。以下をterminalから実行。
    ~/src/SARndbox-2.6/RawKinectViewer -compress 0
  • 2つのイメージが出てくる。左側が高さのイメージで、たとえば手を砂の上に置いてみると、手の形が見えるはず。右側には実際のイメージがある。砂箱の全体が見られるように、カメラの方向を調整する。

base plane equationの決定

  • これは砂を平らにした時の表面を基準面として使うようにする校正。しかし、砂面を平らにするのは大変なので、ビデオの例のようにフラットな板を砂箱の上に置くのがいいようだ。私は段ボールの大きいのを使った。以下を実行。
    ~/src/SARndbox-2.6/RawKinectViewer -compress 0
  • 「1」キーを押すと、メニューが出てくるので、Extract Planesをマウスカーソルで選んでおいて、「1」キーを離すと、「1」キーがExtract Planes機能にアサインされるので、後で使う。前同様に左に高さのイメージが出ているので、zキーを押しながら、マウスを移動させると、イメージが移動する(マウスはクリックしない)。左側イメージを中央に持ってきて、マウスホィールで像を拡大。マウスカーソルをイメージの右上側に持ってきて、そこで「1」キーを押しながら、マウスを左下に移動させて、「1」キーを離す(マウスに沿って、長方形が見えるが、場合によって見辛いことがある)。「1」キーを押した時に、メニューが出るようなら、先ほどのアサインが失敗しているので、再度行う。
  • 上記操作で、basic plane equationが求まっているはずなので、Rawkinectviewerを実行したterminalを見る。2つの数値の列が出ているはず。ESCキーでRawkinectviewerは終了。エディタで~/src/SARndbox-2.6/etc/SARndbox-2.6/Boxlayout.txtの最初の行を編集する。それにはterminalに出て来た数字2列の下側の列を使う。注意は最後の数字の前に=があるが、これはカンマに変えて、Boxlayout.txt(実際にはlは大文字、以下同様)を編集する。(0.020, -0.030, 0.9990), -99.5のような感じになる。最後の数字がKinectカメラとフラットな板(または砂上面)との距離(cm単位)になる。実測距離と一致するはず。一部のKinectカメラを使った時に、最後の数字がプラスでterminalに出てくることがあるので、その場合はBoxlayout.txtの方ではマイナスに直す必要がある。
  • なお、フラットな板を砂箱の上面に置いた場合は、砂面の高さとは違うので、得られた高さを補正する必要がある。Boxlayout.txtの高さ(最後の数字)のところを、実際の砂面の高さに直す必要がある。terminal出力で-70になっていて、砂面から板が20 cm上にあったなら、-70-20で-90とする。
  • なお、キーのアサインは記憶されていないので、Rawkinectviewerを再度起動したら、またアサインする必要がある。

3D box corner positions

  • こちらは四隅の位置を測定する。順番があり、左下、右下、左上、右上の順番で測定する。ただ順番間違ってもBoxlayout.txtに書きこむ順番を上記のように直せば済むと思う。測定では、base plane equationの時と同じように、Rawkinectviewerを起動して、「1」キーにMeasure 3D Positionsをアサインする。同じように左側の高さイメージを拡大、Average Framesでイメージを凍結。そして先ほどの順番で、マウスカーソルを4隅に移動させて、「1」キーを押すと、その位置がRawkinectviewerを起動したterminalに表示される。4隅が済んだら、4つの数字列が出力されているはずなので、それをBoxlayout.txtの先ほどのbase plane equationの後にコピーして、Boxlayout.txtをセーブする。
  • 私はビデオに倣って、イメージの均一な部分の一番端をクリックして決めたが、後でSARndboxを動かしてみると、端の方にプロジェクター表示がおかしい領域ができてしまう。そこで、均一な部分よりも少し外側を指定するとかなりマシになったが、ちょっと試行錯誤が必要だった。

プロジェクターの位置調整

  • 以下を実行すると、グリッドパターンがでる。F11キーを押すとフルスクリーンモードになる。
    XBackground
    これを使ってプロジェクターの方向、光学的なズームとフォーカスの調整を行う。少し映写が砂箱からはみ出すのは問題ないらしい。

プロジェクターとカメラの調整

  • ここの校正では円盤状のディスクを使うので、まずはそれを作る。直径12 cmの円と、その円の中心を同じにする十字を描いたものをPC上で作って、印刷する。それをハサミ等で切り取り、不要なDVDかCDの表面に中心を合わせて貼る。これの裏面に棒をテープで固定する。これは円盤を手で持ってしまうと、円盤が認識されなくなるので、棒を使って円盤が手から離れるようにする必要があるため。校正中に回転するとよくないので、回転しやすい時は棒を2本にする(少し離して固定)。この円盤位置を高さイメージから読んで、それを今の位置と比較することで校正を行うことになる。
  • この校正には以下のコマンドを使う。4:3 (100 x 75 cm)の場合は、<width>のところに1024、<height>のところを768にする。F11キーを押して、全画面表示にする。
    ~/src/SARndbox-2.6/bin/CalibrateProjector -s <width> <height>
  • この校正では、先の円盤をプロジェクターが示した十字のところに重ねて、「1」キーを押すことを繰り返す。その機能を割り振るためには、「1」キーを押して、出て来たメニューから、Captureを選択して、「1」キーを離す。さらに、バックグラウンド機能のキーアサインのために、出て来たダイアログで「2」キーを押して離す。「2」キーはこの校正中に穴を掘ったりして、高さ分布が最初と変わった時に、円盤が認識されなくなることが起こる。その場合は「2」キーを押すと(円盤や手は外に出しておく)、今の高さ分布が読み込まれて更新される。
  • Calibrateprojector実行すると、白い十字が左下側に出ているはずである。ウェブページの方には書かれてはないが、ビデオでは十字で描かれた部分より内側(右上側)にマウスカーソルを持っていって、そこで一度左マウスボタンをクリックする必要があると言っているので、やっておいた方がよい。
  • そして作成した円盤をその十字に合わせるが、その時、円盤に相当するものがプロジェクターで示される。それの位置が実際の円盤とずれていても問題はない。また、その色が緑であれば、円盤として認識されているが、黄色の場合は円盤として認識されていない。その場合は、高さや円盤と手の距離(棒の持ち方)を変える。また、円盤より小さいものを下に置いて支えてみるなど、緑色に変わるようにする。なお円盤が周りの砂と同じ高さになると、緑にはならない。緑になったら、円盤の位置を調整して、プロジェクターからの白十字と円盤の十字がなるべく一致するようにする。まだ緑であることを確認して、「1」キーを押す。うまくいくと、白い十字は次の位置に移動するので、これを繰り返す。なお円盤の高さは色々と変える。場合によっては砂を掘って、低い位置で合わせる必要もある。その場合は、周りの高さが変化してしまったため、イメージで黄色いところが出ているはずである。「2」を押して、バックグラウンドを更新する。そうしないと円盤が認識されない。「2」キーを押すと、一度全面が赤くなって、それからまた元に戻る。12箇所でこの校正を行うと、また最初の位置に戻る。うまくいっていると、2ラウンド目には白い十字に加えて、赤い十字が現れる。これが出ない時は校正がうまくいっていない。赤い十字は、円盤の十字に近いところを追いかけて出るはずである。高さを変えて、12点また実施する。
  • 注意する点は、「1」キーは一度押すと、緑円盤になった場合だけキャプチャーする。棒を手持ちで校正している時に、ちょうど緑と黄色の境界で、交互に色が変わっているところで押すと、しばらく認識されず、手を動かしたり、次の場所に移動しようとした時がキャプチャーされることがある。これが起こった時は最初からやり直した方がよい。そのため、確実に緑円盤になっているところで、「1」キーを押すようにする。
  • この校正は自動的には終わらないようなので、適当なところでEscキーを押して、終了する。そして、起動したterminal上の表示を見る。うまく行かなかったので、再度やるように指示されていることもあるので、その場合は再度校正を行う。校正中はterminalが見えないので、何度も繰り返して、うまくいってなかったと知って、ガッカリしたことも最初あった。2ラウンド目で赤い十字が出ない時は要注意。
  • この校正では特にファイルに書き込むことなどはないので、プログラムを終了したらおしまい。この校正では黄色い外枠もでるのだが、これが私の場合は結構小さいが、ビデオでは全く出てない。ちょっと大きめにcorner positionを取ると、黄色い枠も広がるようだ。この辺りの関係がまだよく分かってない。
  • この校正が終わると、AR sandboxを動かすことができるようになる。

AR sandboxを以下のコマンドで動かす。

~/src/SARndbox-2.6/bin/SARndbox -uhm -fpv
  • 最初画面が砂箱全体を覆ってないので、F11で全画面表示にする。ちゃんと砂の高さに対応した等高線が描かれているだろうか、位置がずれていないかをチェック。明らかにずれているときは調整・校正のやり直しが必要。Escキーで実行を止められる。

追加の設定など

  • SARndboxには色々なオプションがあるが、それらはSARndbox -h をterminalで実行することで、表示することができる。
  • configuration file(.cfg)を作っておくことで、校正が少し楽になる。webページに書かれているとおりに、Vruiのconfiguration fileを作っておく。これはCalibrationprojectorを使う時にキーを自動的にアサインしてくれるので、少し便利。
  • 同様にSARndbox用のconfiguration fileもwebページに書かれている通りに作る。こちらの場合は、そのまま実行すると、「1」キーが雨を降らす、「2」キーが乾燥させる機能を持つようになる。また、起動時に自動的に全画面モードにしてくれる。キーはconfiguration fileを直せば、別のキーにアサインすることができる。
  • デスクトップにSARndboxの起動用アイコンを作る。これはwebページに記載のそのまま実行することで、可能である。起動用シェルスクリプトを作り、それをデスクトップアイコンと連携させるだけ。私は同様に水から溶岩、溶岩から水に変えるスクリプトを作り、デスクトップアイコンとして置いている。溶岩にする方法については、法政大学社会学部の澤柿ゼミのwiki(https://semi.sawagaki.0j0.jp/)を参考にさせてもらった。
  • それ以外にもデュアルディスプレイの時に別画面に表示する方法なども書かれているが、私は行なっていない。
  • 最初、雨を降らせられなかった。よく調べてみると、手をかざす時に指を離す必要があった(パーにする)。私は最初は指を離さないで試していた。離すように変えたら、認識されて、局所的に雨を降らせることができるようになった。

外部スイッチ

  • 上記の設定をそのまま使うと、キーボードの「1」、「2」キーを押すと、雨を降らせたり、乾燥させたりできるが、利用者にはキーボードを直接触って欲しくない。そのため、外部スイッチ(砂箱に取り付けたスイッチ)で制御している例が多いようだ。実際youtubeの調整の説明でも、「1」キーに対応するスイッチが付いている砂箱を使っていた(調整時にも使える)。
  • これを実現するには、キーエンコーダーを使うのが手っ取り早い。私のところでは「バード電子」のWATT-USB2を購入した(専用ケーブルも)。これは実質的にUSBキーボードとして働くもので、USB端子でPCとつなぎます(電源はPC側からもらう)。WATT-USB2の場合、「1」キーの信号を出すには、5番と12番端子を押しボタンスイッチにつないで、短絡することでできる。パーツが届いたので、早速作成して、砂箱に取り付けた。
    sw_box.png

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-03 (日) 11:28:46 (37d)