Point Cloud Library(PCL)

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 など).

ちなみに著者は,社会人を辞めて博士課程に戻った当時に運営していた個人ブログ上で,PCLのチュートリアル的な解説記事を沢山書いていた時期があった.よって,最近は仕事の機会がなくて触らなくなったものの,PCLについては詳しい.SSIIでチュートリアルを行ったことをきっかけに,解説講演によく招待していただいたり,有料の技術セミナーも行なっていた.

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は統合されている.ROSの中でも,3D点群を入力とするリアルタイムのPerception処理をPCLが担当する構成となっていたが,のちにPCL単体がプロジェクトとして独立することになった.またPCL登場の時期に,Microsoft社からKinectセンサーが登場すると,OpenNIライブラリを経由してPCLからもKinectの点群をリアルタイム処理できるようになり,安価なデプスセンサーを用いた初期研究が当時流行した.

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

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 のスキャナなどにも対応している.

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

外部参考サイト

関連ページ・関連記事