Point Cloud Library (PCL): 3D点群処理むけライブラリ

記事を共有する:

1. Point Cloud Library (PCL)とは [概要]

Point Cloud Library (PCL) とは,3D点群 (Point Cloud)を入力とする「ロボットビジョン」や「3D幾何処理」のアルゴリズム群を集めた,オープンソースのソフトウェアライブラリである (BSDライセンス).PCLは,C++言語で開発されており,Windows/ Linux/ Mac OS Xで動くクロスプラットフォームのライブラリである.

Willow Garageで保守されている頃に姉妹プロジェクトであったOpenCVと同様に,PCLも機能単位でグループ化し,サブライブラリ化している設計である(filters, features, registration, io など).

2. PCL のモジュール

この節では,PCLの各モジュールの概要を紹介する.各モジュールごとの子記事を用意するので,より詳細についてはそれらを参考にされたい.

また,PCLのgithubサイトからもリンクされている、以下のサイト(readthedocs)にはチュートリアル集が掲載されており,モジュール一覧としても使えて参考になる:

PCLのモジュールは,以下の(汎用的な)基本モジュールと,(応用目的ごとの)発展モジュールで分類できる:

  • 基本モジュール群:
    • io
    • common
    • visualization
    • geometry
  • 発展モジュール (応用別)
    • features
    • kdtree
    • keypoints
    • octree
    • registration
    • segmentation
    • surface

3. PCL の歴史 : ロボットコミュニティからの登場

TUM (ミュンヘン工科大学) でロボット向け点群処理を研究していたRadu B. Rusu が,インターンを経てWillow Garage社に参加した.そして2011年のICRAで,Point Cloud Libraryの論文 [1] がRusuらによって発表されたあと,以降はWillow Garage社により開発がされる.当時は,まだ安価なデプスセンサーや点群センサーは市場に存在しなかった時代である.よって,ロボット研究者たちは,たとえば北陽電機社やSICK社などの,少し高価なレーザーレンジファインダ(LiDAR)を点群センサーとして用いる,自律移動式のロボットを研究していた.

しかし,当時のロボット業界には決定的な点群処理センシング処理用のライブラリがなく,各研究所が自前でセンサーとI/O接続用のソフトウェアを書いていた時代であった.また,ロボット向けの他の点群処理用の他の処理も標準的なソフトウェアライブラリも無く,それらの処理も各社や各研究室が独自にソフトウェア化していた.そこで,「OpenCV のような業界標準的でオープンな点軍処理ライブラリがロボットビジョン向けにも欲しい!」という機運が,ロボットやロボットビジョン業界の研究者にも高まり,Point Cloud Library が登場するきっかけとなった.

Willow Garage社が当時から開発していた ROS (Robot Operating System) にも,(ビジョン処理担当として)PCLは統合されている.3D点群を入力とする「リアルタイムのPerception処理」を,ROSの内部でPCL(の前身)が担当する構成となっていたが,のちにPCL単体がプロジェクトとして独立することになった.また,PCL登場の時期に,Microsoft社からKinectセンサーが登場すると(2011年ごろの話),OpenNIライブラリを経由して,PCLからもKinectの点群をリアルタイム処理できるようになり,安価なデプスセンサーを用いた初期研究が当時流行した(著者の研究室でも,当時ボスの青木先生が,新学期に20個一気に購入していた).

一方,深層学習の登場以降は,PointNet (https://stanford.edu/~rqi/pointnet/) や,自動運転車に据え付けられたLiDAR点群からの3D-CNN物体検出をはじめとする「深層学習による3D点群処理技術」が登場した[2][3].それらの把持ロボット向けの物体認識・6DOF推定や,自動運転センシング向けの物体検出の目的では,点群処理をPyTorchなどの深層学習ライブラリで行うケースも増えている (※ PCLは,深層学習登場より前の技術が,主に実装されているライブラリである).他にも,把持ロボットや自律移動ロボット向けには「(深層)強化学習」の研究が非常に盛んになってきていることなども,点群処理の研究開発も深層学習ライブラリに移行してきている.

2.1 「I/Oモジュール」を用いた,各種点群センサーへの接続

ToF (Time of Flight) 方式の点群センサーや,3D LiDARセンサーが,特に,自動運転向けの点群取得可能なセンサーとして開発競争の激化が激しい.そこでPCLのI/Oモジュールにも,新登場するToFセンサーやLIDARセンサーから,リアルタイムで点群取得ができるクラスが追加されていった.

初期のPCL version 1.0の頃から,OpenNIをラッパーすることによる「OpenNI経由での各種センサーによる点群データのリアルタイム取得」に対応している.PCL1.0の当時は,Microsoft Kinect (初代)とAsusのXtion(エックスション)Proの2種(ともに旧PrimeSense社の安価なデプスセンサー)を使用することができた.PCL1.7になると,新たにVelodyne Lidarからのストリーミングに対応し,PCL1.8 では マシンビジョン会社のIDSの Ensenso ステレオカメラ,Sony DepthSense のデプスカメラ, davidSDK のスキャナなどにも対応している.

4. PCLの設計の特徴: 複数の外部ライブラリへ依存

新たなライブラリであるPCLを,短期間で構築し,車輪の再発明を防ぐ目的で,PCLは以下のような複数のC++の外部ライブラリに依存している設計でが取れた.よって,使用する際には,これらも同時にインストールしてリンクする必要がある:

  • 必須ライブラリ群
    • Boost :共有ポインタやマルチスレッド化に使用.
    • Eigen :行列・線形代数演算の,バックエンドとして使用.
    • Flann :kdtreeで高速近似による最近傍探索を行う際に使用.
    • VTK :pcl visualizerモジュールでの3D点群可視化ウィンドウの描画に使用.
  • オプションライブラリ群
    • OpenNI:点群をOpenNI対応の各種センサーから,デプスを実時間ストリーミング.
    • QHull :sufraceモジュールでのconvex/concave hullアルゴリズムに使用.
    • Qt :visualizerモジュールのPCLVisualizerウィンドウだけなく,QtでしっかりとしたGUIも組みたい場合に使用.

関連書籍

References

外部参考サイト

関連ページ・関連記事