はじめに
レーザー測距センサー Velodyne LiDAR VLP-16 を使ってみる機会に恵まれたので、3次元点群処理ライブラリ PCL (Point Cloud Library) で、測距データをリアルタイムに可視化しながら、PCD (Point Cloud Data)ファイルに出力してみました。
Point Cloud Library with Velodyne LiDAR
まずは Velodyne LiDAR VLP-16 PCL で検索してみると、そのものずばりの記事「Point Cloud Library with Velodyne LiDAR」が見つかりました。
PCL 1.8.0 に Velodyne LiDAR からデータを入力するための Grabber が追加されているとのことで、
サンプルプログラムまで公開してくださっています。ありがたいです。
早速、CMakeLists.txt と main.cpp をフォルダ D:/velodyne/ を作って保存しておきます。
PCL 1.8.0 のインストール
手元の環境は PCL 1.6.0、Visual Studio 2013 なので、こちらの「Point Cloud Library 1.8.0 has been released」から PCL 1.8.0 All-in-one Installer MSVC2013 x64 をダウンロード、インストール。
環境変数 PCL_ROOT を変更します。
PCL_ROOT=C:\Program Files\PCL 1.8.0
CMake
CMake を起動して [ Configure ] からの [ Generate ]。
これで Visual Studio のソリューションファイルを生成してくれます。
[ Open Project ]で Visual Studio が起動して、ビルド、実行、無事サンプルプログラムが動きました。
定期的にPCDファイル出力
PCL では C++ライブラリ boost が多用されているので
boost::timer を利用して定期的にPCDファイルを出力してみます。
#include <boost/timer.hpp>
main.cpp#L98-L110 の while ループの前でタイマー起動。
boost::timer t;
ループの中でタイマーを定期的にリスタートして、pcl::io::savePCDFile
で velodyne.pcd ファイルに出力します。
if (t.elapsed() >= 5.0) { // 秒
t.restart();
pcl::io::savePCDFile("velodyne.pcd", *cloud);
}
おわりに
PCL付属の pcl_viewer で velodyne.pcd を開いてみると
上の方、部屋のドアが開いていて廊下の壁が見えているのが、なんとなく分かると思います。