北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

3Dスキャナの点群データをLabVIEWで処理してみる

多面体の木工工作をしていると面間の寸法や角度誤差を知りたくなります。面間の寸法はノギスで測れますが、多面体の角度がどの程度正確にできているか調べる手ごろなツールが見当たりません。

わたくし、パズルのマダラボが取り組んでいるのは内接球を持つ切稜立方体で、立方体の辺を45度で12回切り落として作る18面体です。

木工.jpg

この18面体を56個使ってパズルを作成しています。精度が悪いと組み立てたときに隙間が大きくなってしまいます。

 

使用した3Dスキャナは「 Revopoint MINIブルーライト3Dスキャナー」です。30mmの内接球の切稜立方体なので手ごろな感じです。

MB071097.JPG

 

PLY形式で保存して、MeshLabという3Dメッシュの加工などをするアプリケーションを使ってメッシュの不要部分や多すぎる測定点を間引きます。ファイルをPLY形式のテキストタイプで保存しました。

 

スクリーンショット 2022-11-07 17.02.39.pngスクリーンショット 2022-11-07 17.08.41.png

 

台に置いた面がスキャンできなかったので相対する上面もデータを消し去りました。解析できるのは16面となります。

 

main_PointCloud.viのフロントパネルです。LabVIEWの3D表示もいつの間にかレトロな雰囲気です。無いよりはすごく良いのですが、使いにくいですね。実行ボタンを押すと指定のPLYファイルを開いて、相対する面間距離、相対する面間の傾き、すべての面の間の角度誤差を表示して終了します。

 

mainfp.png

 

点群データというだけあって、たくさんの点があるだけなので、面をグルーピングしなければいけません。まず、データの重心を原点にします。原点に内接球の中心があると考えたときに各面の接点は原点に近いので、原点に一番近い点を見つけます。その点の周りにある点を面データとして、データから取り除きます。残ったデータの中で原点に一番近い点を見つけて同様に次の面データとして、データから取り除きます。

順次、16面の面データを決定します。

面データごとに平面近似を行います。重心から平面への法線の足の座標を得ます。

データの重心は内接球の中心としてはあてにならないので、各面の「重心から平面への法線の足の座標」から球面近似で球の中心を求めます。その中心を座標原点にして同じ操作を行います。念のため2度繰り返します。

 

なお、説明を省きましたが、データの重心を原点にしたあとで解析に使用しない周辺部を削除するために原点から一定以上離れている点を削除しています。

mainbd.png

 

PLYファイルは単純なので手軽に使えますが、データ点が多いので事前にある程度間引かないと処理が大変だと思います。

 

file_read.png

 

1回目だけ重心を使い、2回目、3回目は球面近似の中心を使います。

origin.png

ベクトルの内積を使って角度を求めます。

vectorAngle.png

平面近似を行います。

plane.png

 

一応点群データの処理もできそうだなという感触を得ました。

興味のある方はデータファイルも添付していますので遊んでみてください。

 

 

メッセージ1/2
1,602件の閲覧回数

加工した18面体の測定結果をわかりやすく表示できるように変更しました。

パズルピースとして重要な部分は12個の六角形の面ですので0から11までの番号を付けることにしました。スキャンするときにデータの座標と面の方向を一致させることは難しいので、X軸に近い面をX軸に直交するようにデータを回転させることにしました。その面を0として近所の5枚の面を番号付けして、それぞれの対面を合計が11になるように番号付けしました。サイコロの場合に1の反対に6があるようなイメージです。

 

対面との距離と角度が重要で、さらに面間の角度も重要ですので、次のように一覧できるように結果をまとめて表示しました。

結果.png

メインのVIは多少整理しました。

メイン.png

LabVIEW Community 2022 Q3のMac版で作成して、Windows版でも動作を確認しています。スキャンデータも添付しましたので、興味のある方は動かしてみてください。

 

 

 

 

 

 

 

 

 

すべてをダウンロード
0 件の賞賛
メッセージ2/2
1,312件の閲覧回数