ページ

2015年1月18日日曜日

Kinect 360を使ってRTAB-mapで部屋を3Dスキャンしてみた

RTAB-mapという3次元スキャンアプリケーションが面白そうだったので、手元にインストールして動かしてみました。動作させた環境はWindows8 + Kinect 360です。

--

まず、公式チュートリアルのWin64 Binariesに従ってインストールを行います。

1) Open NIのインストール
2) PrimeSense Sensorをインストール
3) rtabmapをインストール

ところが、Windows 8を使っている場合、この状態でKinect 360を接続してrtabmapを起動してもSouceを選択する段階で、

  • OpenNI PCLを選ぶと強制終了
  • OpenNI CVを選ぶと、"Camera initialization failed..."とでて、ログには"CaptureRGBD: Failed to create a capture object!"と表示

で、失敗してしまいます。

これは、Kinect 360のドライバが正しくインストールされていない時に起こる問題のようです。
Windows 8 では署名されていないドライバがインストールできなくなってしまったので、
通常の方法ではPrimeSenseのKinect 360ドライバをインストールすることができません

なので、このページを参考に、

  1. テストモードへの移行 *1
  2. ドライバー著名の矯正を無効化 *2
  3. Windows Smart Screenの無効化

をする必要があります。

*1) これはやらなくても大丈夫なようです
*2) Win8.1では、[チャーム]>[設定]>[PCの設定変更]>[保守と管理]>[回復]>[今すぐ再起動する]>[トラブルシューティング]>[詳細オプション]>[スタートアップ設定]です


すべての手順を実行したら、C:\Program Files\OpenNI\Driverにあるドライバを実行すればRTAB-mapを実行する準備が整います。

--

インストールが完了したら、あとは公式チュートリアルに沿って実行すれば簡単に3Dスキャンが行えます。

まず、FileからNew databaseで新しいデータベースを作ります。
※最初にこれをしないと次以降の作業ができないので注意してください。

RTAB-mapはこのデータベースによって各スキャンの対応する特徴点をグラフで管理しているようです。特徴点ベースでループを見つけたら、グラフ全体を補正して整合性を保とうとします。これによって、スキャンの際に歪みが蓄積されないようになっています。

次に、Detection > Select Sourceから、Select Sourceを選びます
OpenNI PCLと、OpenNI CVが選べるのですが、PCLのほうだとたまに落ちることがあったので私はOpenNI CVを使っています。

この状態でStartすれば、部屋の3次元スキャンを行うことができます。

スキャンの際の留意点なのですが、SURFでの特徴量抽出を行って2枚の点群をマッチングしているので、素早く回転したり、特徴点が抽出しにくい(白い壁など)環境だと自己位置を見失ってしまします。

ただ、特徴点が多くサンプリングできるようなごちゃごちゃした環境( == 私の机の周り)ですと、ほとんどロストすることはありませんでした。




実行画面はこんな感じになります。左上が直前のシーンの特徴点情報、左下がループ検出結果、右側が各シーンを合成した3次元スキャン結果です。ビューワも軽いのでグリグリ動きます。



少し引いてみてみると、ループ検出のお陰で部屋がしっかり四角くスキャンされているのがわかります。

File > Exports 3D cloudsを選べば、*.ply, *.pcd形式で点群を出力することができます。
出力時のオプションでボクセル化やメッシュ化することもできるので、3Dソフトウェアで扱う際に重宝しそうです。



先ほどのスキャン点群をボクセル化 + メッシュ化するとこのような感じになります。

デフォルトの設定だとだいたい100万ポリゴンぐらいのデータになります。
ただ、ボクセルサイズを大きくすれば点群を間引くことができるので、Unityなどで使う場合にはエクスポートの設定をいじったほうが良いと思います。

公式ページの動画ではかなりきれいなマップが出来たのですが、手元で実行した限りだとループ検出がうまく働かない場合があるようでした。Kinectの最小検出距離もあるので、もう少し広い環境で試してみたらもっときれいなマップができるかもしれません。

0 件のコメント:

コメントを投稿