はじめに
点群処理といえばコレ、といったくらいメジャーなPoint CLoud Library(http://pointclouds.org/)をwidows + visual studio 2017でプログラミングできるようにしていきます。
...とはいっても、先行的に@UnaNancyOwenさんなどがall-in-one packageを作成しており、導入を楽にしていただいています。とても助かっていますw
環境
- OS:Windows 10 Home Insider Preview (64-bit)
- visual studio community 2017(version 15.6.7)
- cmake 3.11.0(本稿でインストールします)
- 今後C++で実装していきます
参考
- Point Cloud Library 1.8.1 has been released(http://unanancyowen.com/pcl181/)
- Visual Studio 2015でPCL1.8.0を使う(http://pcl.hatenablog.com/entry/2016/12/12/003738)
- PCLでPCDデータを読み込み可視化 | PointCloudConsortium
1 . パッケージのダウンロード
まずはじめに、パッケージをインストールしましょう。
http://unanancyowen.com/pcl181/
にアクセスします。次に、以下の図1の中の自分の環境に合わせたものをダウンロードします。 (私の場合、PCL 1.8.1 All-in-One Installer MSVC2017 x64です。)
2 . パッケージのインストールと設定
ダウンロードしたら、exeファイルを起動してインストールしていきます。
今回、PATHは自動で追加しないようにします。
(最近のブログを見ると、追加しても大丈夫になってるっぽい。)
他は、defaultのままで大丈夫です。
次に、環境変数を設定していきます。
大雑把に説明すると、「PCLの実行ファイルはここにあるよ!」ということをPCに教えてあげます。
「winsowsキー(窓が書いてあるキー)+R」で「sysdm.cpl」をファイル名を指定して実行し、システムのプロパティを呼びます。
そして、詳細設定タブ->環境変数をクリックすると、図2のような画面が現れるはずです。
システム環境変数において、「PCL_ROOT」「OPENNI2_REDIST64」があることを確認してください。
(なければ、図2と同様に上記二つの変数と値を入力してください。)
次に、pathを設定します。pathの列をクリックし、編集ボタンをクリックすると、図3のような画面が現れます。 図3の下部5行を追加してください。(3rdPartyの部分は要らないかもですが、念のため)
3 . CMakeのインストール
PCLはCmake(https://cmake.org/)でのプロジェクト生成を推奨されています。そこで、CMakeをインストールします。 公式ページのdownloadから環境に合わせたwindowsインストーラーパッケージをダウンロードし、インストールします。 この際、PATHを自動登録し、デスクトップアイコンにチェックを入れましょう(この辺は好みでw)
インストールしたら、「winsowsキー+R」で「cmd」を実行、コマンドプロンプト上で「cmake -version」と打ち、以下の図4にようになればOKです。 ここで、一度PCを再起動させてください。(環境変数の変更を適用するため)
4 . CMakeによるプロジェクト生成
Point Cloud Library 1.8.1 has been releasedhttp://unanancyowen.com/pcl181/に、「Basic CMakeLists for PCL」の項があります。 Basic CMakeLists.txt for PCL(https://gist.github.com/UnaNancyOwen/f4dcd74ab870a0fc9e7a)の右上にDownload ZIPをクリックし、解凍し、フォルダ名を分かりやすいように変更しましょう。今回は、図5のように、フォルダ名を「sampleProject」に変更しています。
次に、CMakeを起動し、上部二つのダイアログボックスに先ほどのsampleProjectのパスを指定します。 configureをクリックし、お使いの環境のvisual studio(今回ならvisual studio 15 2017 WINI64)、use default native compliersを選択、Finishボタンをクリック。 そのまま「Generate」をクリック、Generate doneというログが出たら、「Open Project」でプロジェクトを開きましょう。
5 . サンプルプロジェクトの実行
以下の図6のようなプロジェクトが開かれていると思います。この状態で、「Ctrl + F5キー」を押すと、main.cppが実行されます。
main.cppの実行を確認したあとは、PCLのサンプルを実行してみましょう。
project->Source Files->main.cpp をダブルクリックして開き、以下のコードに置き換えて「Ctrl + F5キー」で実行してみてください。
(source codeはこちらのものを変更しています:http://www.pointcloud.jp/blog_n14/)
#include <pcl/visualization/cloud_viewer.h> #include <iostream> #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> int user_data; void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) { viewer.setBackgroundColor(1.0, 0.5, 1.0); pcl::PointXYZ o; o.x = 1.0; o.y = 0; o.z = 0; viewer.addSphere(o, 0.25, "sphere", 0); std::cout << "i only run once" << std::endl; } void viewerPsycho(pcl::visualization::PCLVisualizer& viewer) { static unsigned count = 0; std::stringstream ss; ss << "Once per viewer loop: " << count++; viewer.removeShape("text", 0); viewer.addText(ss.str(), 200, 300, "text", 0); user_data++; } int main() { pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>); pcl::visualization::CloudViewer viewer("Cloud Viewer"); viewer.showCloud(cloud); //This will only get called once viewer.runOnVisualizationThreadOnce(viewerOneOff); //This will get called once per visualization iteration viewer.runOnVisualizationThread(viewerPsycho); while (!viewer.wasStopped()) { user_data++; } return 0; }
マウスのホイールを引き、左クリックを押したまま移動で、原点を中心に回転できたりします。 すると、以下の図7のような画面が出てくると思います。これが出てきたら、PCLのセッティングは一旦完了となります。
まとめ
windows10 + visual sturido 2017の環境にて、PCLのセットアップを行いました。 今後は、さまざまな点群処理の実装を行っていこうかと思います。