##はじめに
PCLで簡単な物体認識を行う際,自前で点群データを作成する必要があります.
点群データの作成には,様々な方法があるのですが,今回は,CADデータでモデリングしたオブジェクトを点群データに変更する手順を紹介.
##動作環境
今回の記事は,windows10側でモデルを作成.ubuntu18.04で点群データに変換しました.
仕様は表にまとめています.
共通
項目 | 値 |
---|---|
CPU | core i7-6820HQ |
RAM | 16GB |
GPU | NVIDIA Quadro M1000M |
windows側
項目 | 値 |
---|---|
OS | Windows 10 pro |
CAD | Solid Works 2018-2019 |
Ubuntu18.04側
項目 | 値 |
---|---|
OS | Ubuntu18.04 |
変換ソフト | Meshlab |
pcl | 1.8 |
ROS | melodic |
##CADでモデルを作成 (.STL)形式で保存
windows側での操作
今回はSolid Worksを使用しました.
Solid Worksは幅広い分野で使用されCADソフトの中でも,シェア率が結構高めです.
AUTOCADやFUSION360等を使用しても大丈夫だと思います.
Solid Worksは学生であれば,ほぼ無償で使用することができます.
とりあえず,認識する対象をCADで作成してみました.
今回は,おもちゃの飛行機をリバースエンジニアリングしました.
こんな感じです.
このパーツファイルを(.STL)形式で保存します.
アセンブリしたものを使用する際は,一度,指定保存で(.SLDAEM)をパーツファイル(.SLDPart)に変換.その後変換したパーツファイルを(.STL)形式として,指定保存します.
##点群データ(.pcd)形式に変換
ここからはubuntu側での作業となります.
参考にしたサイトはこちら
変換には,pcl_tools
が必要となります
インストールしていない場合は,
sudo apt-get install pcl-tools
でインストールできます.
- まずmeshlabを開き,(.STL)形式のデータをインポートします.
- 次に,(.obj)ファイルでエクスポート(指定保存)します.
- 一度,meshlab閉じ,再び起動させ(.obj)形式のデータをロードします.
- 次に,スケールを合わせます.
Solid Worksでは一般的に[mm]
でモデルを作成することが多いです.しかしmeshlabの基本単位が[m]
なので,スケールサイズを変換する必要があります.
meshlabのFilters
→Normarls,Cnrvatures and Orientation
→Transform:scale
を選択します.
このとき各軸を図のように0.1倍づつしてあげて,Apply
をクリックしclose
します.
Aplly
をクリックしないと,モデルに適用されないので注意してください.
ここまでできたら,(.obj)形式で再度上書き保存し,一度meshlabを閉じてください.
5.再びmeshlabを開いて3
の操作を行ってください.これにより,サイズを[mm]
に合わせることができます.※一度で,スケールサイズを0.001倍すると自分の場合うまく行きませんでした.
6.(.obj)から(.pcl)形式に変換.
変換は以下のように行います.
pcl_mesh_sampling input.obj output.pcd -leaf_size 0.001
引数とかは,参考サイトに書いてあるので割愛.
これで,(.pcl)形式の自前データを作成することができました.
グラフィカルに確認したい場合は,
pcl_viewer output.pcd
生データを見たい場合は,
gedit output.pcd
で見ることができる.
こんな感じ(一部を抜粋).
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 43185
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 43185
DATA ascii
0.0087611452 -0.050566815 0.0059146006
0.0059727603 -0.049213119 0.0059028571
0.0011607565 -0.04599423 0.0059653334
0.036394902 -0.044901699 0.0059582125
0.037355382 -0.044040166 0.0059934631
-0.0069311424 -0.040136784 0.00594847
-0.0087683918 -0.039120279 0.0058913622
-0.0094063086 -0.038501743 0.0059710327
-0.015966881 -0.030564643 0.0059039053
このように,PCLでは[m]
が基準となって,データが格納されている.
##終わりに
Solid Worksとmeshlabでデータをインポートした際に,スケールサイズか変わっていることに気づかず,苦労しました...
自前で作成したデータをもとに,PCLで簡単な物体認識をする内容は,また今度書きたいと思います.