Tech Sketch Bucket of Technical Chips by TIS Inc.

Point Cloud Libraryからkinectを利用してみる

Pocket

Point Cloud Library(PCL)

Point Cloud Library は3D空間上の点の集合に対して、解析、操作、保存、表示などを提供するBSDライセンスのライブラリです。
PCLを利用してkinectの入力を取り扱うことで「現実空間」を「コンピュータ上の3次元の空間」に取り込むことが可能になります。
これによって以下の動画のように、通常のカメラ画像の情報に追加する形で、kinectからのdepthセンサの情報を利用することで特定の画素までの距離(depth)もリアルタイムに表現可能になります。


今回の記事ではPCLの紹介と、上記の動画を撮影するのに利用したPCLに付随するサンプルアプリケーションを動作させる手順の説明をします。

KinectとPCL

PCL

PCLは3D空間上の点の集合に対して、解析、操作、保存、表示などを提供するライブラリです。
BSDライセンスで提供されています。

個人レベルではROS(Robot Operation System)でロボットの目としてkinectなどの深度センサを利用した際、入力の解析に利用する例が多いようです。
企業レベルではTOYOTAやHONDAが協賛しているので自動車やロボットの分野での利用がされているものと思われます。

Kinectとの連携

前述のとおりkinectは深度センサを搭載しているため、深度(kinectから物体までの距離)を取得できます。
深度と通常のRGBカメラ画像の情報を"同期"して取得することで、それぞれの画素がどの距離に存在するのかがわかります。
それぞれの画素がどの距離に存在するかわかると、位置情報(x,y,z)と画素の(r,g,b)が取れます。
この点の集合(ポイントクラウド)をPCLで表示することで最初に示したような動画のように情報が取得できます。

環境構築

前提

本記事は以下の環境で実施しています。

  • 環境
    • WindowsXP (32bit)
    • PCL 1.5.1
    • Visual C++ ライブラリのランタイムコンポーネント
      • VC++の開発環境があれば不要?
    • ハードウェア
      • GPU NVIDIA GeForceGT430
      • CPU Intel Core i5 650
      • メモリ 4GB搭載(OSから認識されているのは3GB程度)
  • 利用デバイス
    • Kinect for XBOX360
  • 進め方
  1. PCLのAll-In-One-Installerを利用し、PCLの動作環境を構築する。
  2. サンプルアプリケーションであるopenni_viewer.exeを起動する。
  3. 動作を確認する。

今回はこの工程でやってみます。

事前準備

過去にOpenNIなどでkinect利用環境を作った場合に確認

  • OpenNI / SensorKinectがインストールされている場合、以下を実施
    • 既に入っているOpenNI / SensorKinectをアンインストール。
    • PCL向けにパッチされたバージョンを次以降の工程で入れなおします。

(1)環境構築

環境構築を進めていきます。

  • Visual C++ ライブラリのランタイムコンポーネントインストール
  • PCLのサイトからAll-In-One-Installerを取得
  • インストールする
    • すべてデフォルトでインストールします。
      • C:\Program Files\PCL 1.5.1\ にインストールされる。
    • インストール途中でOpenNIやSensorKinectのインストーラが起動します。
      • C:\Program Files\PCL 1.5.1\3rdParty\OpenNI以下にインストーラが配置されます。

(2)サンプルの起動

記事の最初の動画の撮影に利用したサンプルアプリケーションのOpenNIViewerを起動します。
OpenNIViewerはPCLに付随するサンプルアプリケーションで、kinectから取得できるポイントクラウドを表示します。

  • kinectをコンピュータに接続
  • C:\Program Files\PCL 1.5.1\bin\openni_viewer_release.exeを実行。

起動すると以下の3つのウィンドウが表示されます。

  • ログが流れるコマンドウィンドウ
  • 通常のRGBカメラの表示がされるウィンドウ
  • PCLによって可視化されたポイントクラウドのウィンドウ

この時点で、kinectが取得しているカメラ画像とポイントクラウドが表示されるはずです。

(3)動作確認

冒頭の動画では、以下の写真のようなところにkinectを向けてopenni_viewer.exeを起動してみました。

pcl_screen.PNG

ポイントクラウドのウィンドウでマウス操作を行うと動画のように視点を変更することができます。
大量の点(ポイントクラウド)によって映像が作られているのがわかるかと思います。

ポイントクラウドを表示するウィンドウをアクティブにしてキーボード操作をすることでは以下の操作や設定が可能です。

  • ドラッグ
    • ShiftキーやCtrlキーと組み合わせて操作をすることで細かく視点切り替え可能
  • + / -
    • 点の大きさ変更
  • q
    • 終了

まとめ

このように、kinectの入力をpclを利用して表示してみました。

kinectとPCLを組み合わせることで、これまでのRGBカメラになかった空間的な入力データが発生していることを直感的に理解できたかと思います。

kinectの入力をPCL上で有効に利用することができれば、今回動作確認に利用したような"入力を表示するだけ"ではなく、空間的をリアルタイムに情報解析することや3次元スキャナとしての用途、記録したポイントクラウドのデータを元に解析をするなどの利用が期待できます。
PCLのサイト上では、物体の移動のトラッキングの紹介動画やオブジェクトの検出、特徴点の検出などのチュートリアル(英語)もあります、ぜひ参考にしてください。

また、今回はPCLが動作する環境を構築しましたが、PCLを用いた開発を行うためにはさらにVisual Stdioなどの開発環境のインストールが必要です。
具体的な構築手順については、参考サイト(リンク)をご覧下さい。

トラブルシューティング

手順どおりやれば問題は出ないはずですが、実際にPCLを利用して開発をしようとしたときに筆者がつまづいた点とその対処法を記載します。

  • 画面の更新が遅い
    • グラフィックボードを搭載すると劇的に変わります。
  • VCOMP100.DLLが見つからない
  • VCOMP100D.DLLが見つからない
    • Microsoft Visual Studio 2010 Ultimateの評価版をインストール。

利用ツール等へのリンク

  • Point Cloud Library: pcl
  • 動画キャプチャ: fraps
  • 動画変換: vlc

参考サイト

エンジニア採用中!私たちと一緒に働いてみませんか?