北東北 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/5
2,395件の閲覧回数

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

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

 

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

結果.png

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

メイン.png

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

 

 

 

 

 

 

 

 

 

すべてをダウンロード
メッセージ2/5
2,105件の閲覧回数

久しぶりにこのプログラムを使って三角山パズルの要素"内接球を持つ切稜立方体"の最近の出来栄えを測定してみました。記事にしてみましたので興味のある方はご覧ください。

 

【三角山パズル製作記】3Dスキャナーで探る三角山パズルの幾何学と手仕事の精度

 

小型3Dスキャナ.JPGRevoScan5画面.pngMeshLabで不要部分を削除.png

メッセージ3/5
242件の閲覧回数

いつも興味深い投稿をいただき、ありがとうございます。

インスピレーションが湧きます。

 

これまでのVIでは、重心を原点とした上で、1つの点群データの中で解析されていると思います。

一方、工業製品の3次元点群処理による形状評価だと、CADとスキャンデータを比較した偏差解析をよく見るのですが、三角山パズルの精度評価ではそこまで必要ない、という理解でよろしいでしょうか?

 

0 件の賞賛
メッセージ4/5
214件の閲覧回数

ayoshimura様

いつも興味深く記事をお読みいただき、そして貴重なコメントをありがとうございます!ayoshimura様のような視点からのご質問は、私にとっても新たな気づきや学びとなり、大変励みになります。

 

おっしゃる通り、工業製品の3次元点群処理による形状評価では、設計されたCADデータとスキャンデータを重ね合わせ、その偏差を解析する手法が一般的であり、非常に有効な方法だと認識しております。

今回の記事の狙いは、スキャンデータで得られる点群データ(PLYファイル)は何も特別なものではなく必要であればLabVIEWで処理をすることができること、点群データから自動的に面に属する点群を抽出し面間の関連性を評価することで効率的に出来栄えを評価できるという例を示したかったのです。一般的な加工部品などの例であればデータム基準のアプローチとなって、読んでいただいた方に分かりやすい例になったかと思います。

 

今回、私自身の興味の対象が三角山パズルに使っている「内接球を持つ切稜立方体」の精度評価でしたので、重心を基準とした解析アプローチを採りました。「内接球を持つ切稜立方体」は、全ての面が中心から等距離にあるという特徴を持っています。そのため、特定の基準面を設定してCADと比較するよりも、まずは「各面がどれだけ均等に中心から配置されているか」「各面の平面度や相互の角度がどれだけ理想に近いか」といった、ユニット自体の幾何学的な整合性を評価することが重要だと考えました。重心を基準にすることで、この「中心からの均等性」を直接的に見ることができます。そして、「面同士の角度」「対面の平行度や距離」といった要素が、一定の許容範囲内に収まっているか、そしてユニットごとの「ばらつき」がどの程度なのかを把握することを主眼としました。

 

製作工程も仮想の中心を基準にしたいと考えて、治具を用意して加工しています。(最新の治具の写真を添付いたします。このトピックの初めに使っていた治具の不具合を改良したものです。)

加工機s.JPG

刃物に並行にクランプすることで稜の切断深さの基準を立方体の仮想の重心にできるだけ近いようにしたいと考えています。当初の治具では面を基準にして切断すると面間距離は正確になりますが、角材から切り出した歪んだ立方体を素材としているため、出来上がりの面の大きさがバラバラになってしまう問題がありました。

 

今後とも、忌憚のないご意見やご感想をいただけましたら幸いです。

0 件の賞賛
メッセージ5/5
196件の閲覧回数