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

概要

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については詳しい.をきっかけに解説講演に学会等でよく招待していただいたり,トリケップスなどのセミナー会社様で,有料の技術セミナーも行なっていた.

親ページ:コンピュータビジョン・ロボットビジョン向けのライブラリ一覧

関連記事: OpenCV:コンピュータビジョン向けのオープソースライブラリ

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

TUM (ミュンヘン工科大学) でロボット向け点群処理を研究していたRadu B. Rusu が,インターンを経てWillow Grage社に参加した.そして2011年のICRAで,Point Cloud Libraryの論文 [1] がRusuらによって発表されたあと,以降はWillow Garage社により開発がされる.当時は,まだ安価なデプスセンサーや点群センサーは市場に存在しなかった時代である.よって,ロボット研究者たちは,たとえば北陽電機社やSICK社などの(少し高価な)レーザーレンジファインダ(LIDAR)を点群センサーとして用いて,自律移動式のロボットを研究していた.しかし,当時のロボット業界には決定的な点群処理センシング処理用のライブラリがなく,各研究所が自前でバラバラのソフトウェアを書いていた.そこで,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推定や,自動運転センシング向けの物体検出の目的では,点群処理を深層学習フレームワークで行うケースも増えている.他にも把持ロボットや自律移動ロボット向けには,「(深層)強化学習」の研究が非常に盛んになってきていることなども,点群処理の研究開発が深層学習ライブラリに移行してきている理由でもある.

I/Oモジュールでの,PCL の各種点群センサーへの接続

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

初期のPCL version 1.0の頃から,OpenNIをラッパーすることで,OpenNI経由で各種センサーによる点群データのリアルタイム取得に対応しており,当時は 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(2)対応の各種センサーからリアルタイムストリーミングする.
    • QHull :sufraceモジュールでのconvex/concave hullアルゴリズムに使用.
    • Qt :visualizerモジュールのPCLVisualizerウィンドウだけなく,QtでしっかりとしたGUIも組みたい場合に使用.

References

外部参考サイト