概要
目的:3D Lidarで取得した点群データをMeshLabでメッシュ化し、STL出力してシミュレーションに利用する
使用ツール
- MeshLab
今回は以下のデータセットの中からmap_tc19_o085_f-04_t05.pcdを使用しました。
https://github.com/tsukubachallenge/tc-datasets
インストールやメッシュ化の方法については以下のサイトを参考にしました。
http://www.pointcloud.jp/blog_n07/
https://www.kkaneko.jp/tools/ubuntu/ubuntu_meshlab.html
インストール方法
sudo apt -y install meshlab
起動方法
meshlab
手順
- 点群データの取り込み
「File」→「Import Mesh」
データ容量が大きすぎるもしくはダウンロードした際にデータが文字化けすると読み込めない場合がある。その場合は、Cloud Compareなどでpcdデータを読み込み、plyの形式に変換することでMeshLabで読み込むことができる。
1. 法線を計算
- 法線とは各点において面に垂直な方向を示すベクトルである。
- 点群データには座標(x, y, z)しかありませんが、メッシュ化するには「どちらが表面で、どちらが内側か」を把握する必要がある。
- 「Filters」→「Pointset」→「Compute nomals for point seets」
- 以下の画面から- Neighbour numを5に変更してApplyを押す
- Neighbour num(近傍点数): 各点の周囲のk個の近傍点
2. サンプリング
- 点群の点数を大幅に削減してメモリ負荷を下げる。
- 「Filters」→「Sampling」→「clustered vertex subsampling」
- 以下の画面からCell Sizeを1.000→0.500に変更してApplyを押します。
- Cell Size:間引き用グリッドのセルサイズ
- Cell Sizeを小さくする(0.1-0.5%): より多くの点が残る、詳細保持、処理重い
- Cell Sizeを大きくする(2-5%): 大幅に点数削減、処理軽い、詳細失われる
3. メッシュ化
点群データからメッシュファイルを生成します。この作業はファイルの重さによってかなり時間がかかるので辛抱が必要です。
「Filters」→「Remeshing simpleification and Reconstruction」→「Surface Reconstruction : Ball Pivoting」

- 以下の画面は初期値のまま「Apply」を実行
- Pivoting Ball radius (0.000): メッシュ生成に使うボールの半径(0は自動推定)
- Ball radiusを大きくする: 離れた点も繋がりやすい、穴が埋まりやすい、過剰に繋がる可能性
- Ball radiusを小さくする: より精密、穴が多く残る、断片化しやすい
- Clustering radius (20%): ボール半径に対するクラスタリング半径の割合
- Clustering radiusを下げる(10-15%): より精密な接続
- Angle Threshold (90°): 面の角度しきい値
4. フィルター
生成されたメッシュがガタガタでつかいものにならないこともあるので、フィルターをかけてきれいにします。
「Filters」→「Smooth ,Fairing and Deformation」→「Laplacian Smooth」

- 以下の画面からフィルターの強度を設定
- Smoothing steps : 平滑化の反復回数
5. STLファイルの出力
- メッシュ化したデータをSTLファイルとして出力します。
- ここできをつけなければならないのが、図の右側に示すように「Cluster Samples」が選択されていることです。これが選択されていないとSTLファイルは出力されません。
6. 可視化
BlenderでSTLファイルを表示を行うとこんな感じで仕上がります。

まとめ
生成したメッシュファイルをGazeboなどに表示してみようと思います。




