CNCフライス盤と超音波距離計または赤外線距離計を用いた簡易三次元測定機の開発

とりあえず今自分が出せる OSHW のアイデアを出せるだけ出しておこうと思い連投しましたが、現時点における最後のアイデアとして CNC フライス盤に超音波センサ等の何らかの距離計を取り付け簡易的な三次元測定機とする手法を提案します(既にある気もしますが)。

フライス盤のスピンドルに代えて超音波距離計やレーザー距離計赤外線距離計、タッチセンサ等をアタッチすることで、物体表面の x-y-z 座標の把握が可能となります。実際の計測では、インクジェットプリンターやブラウン管テレビの走査のようにヘッドを往復させながら漸次対象物体の形状を把握するのがシンプルでしょう。

この手法の利点として、制御ソフトウェアの簡素化が可能である点を指摘します。フォトグラメトリや非接触の三角測量法式ではレンズ収差等、計算により修正すべき要素が多々ありますが、CNC フライス盤+距離センサの場合(特に接触式の場合)は位置情報は明白であり、複雑な補正計算を介在させる必要がありません。

活用場面としては、CNC 簡易三次元測定機と CNC フライス盤を接続、レリーフのような半立体物を読み取りと同時に複製する、といった用途が思い浮かびます。木版画の原版や化石標本などはこの手法で精度良く複製できるものと思います。

非接触式(案)

ハイブリッド式(案)

なお、本記述は CC-BY-SA 4.0 でご利用下さい。

参考文献
3次元計測技術
大谷 幸利 氏
https://www.jstage.jst.go.jp/article/isj/53/2/53_128/_pdf/-char/ja

予想通りありました。

My DIY CMM Using My CNC - YouTube

※ CMM は Coordinate Measuring Machine の略です。

動画を見るに、CNC フライス盤と超音波距離計やレーザー距離計赤外線距離計との併用なら実用可能なものを作れるはず。

なお、以下のサイトによると三次元計測機は1960年代から1970年代には既に実用されているそうなので、特許関連は心配なさそうです。

3Dスキャナー開発の歴史・立体測定メソッドの進化について解説

Arduino + 距離センサーの組み合わせで試作出来そう。

行っているのは単純なシリアル通信なので、Ciclop の制御ソフト Horus の改変で GBRLGRBL 搭載フライス盤と併用して用いるフロントエンドも作れそう。完成したらエジプト神話つながりで “Bastet” と名付けたい。そうすると、CNC 用センサーアタッチメントはサイクロプスからの連想で “Polyphemus” がいいかな?妄想が捗ります。

※ GRBLをGBRLと間違えて覚えてました。失礼しました。

「いいね!」 1

こんにちは!
CNCとレーザーの変位計あたりを使ってCMMもどきができないかなと私も考えていたので面白いなと思いました!ラインレーザーでやれたらかっこいいですが高い・・・

似たような機能が個人向けCNC用のソフトウェアにもあります
タッチプローブを使ってテーブル表面の傾き、たわみ等を測定しハイトマップを作成し補正するものです。

Candle(PCB切削向け)

Duet(CNC用制御基板)

制御基板のファームウェアレベルで機能がついています
https://duet3d.dozuki.com/Wiki/Using_mesh_bed_compensation


(from: https://reprap.org/forum/read.php?416,758939)

grblではプローブとしてのスイッチがオンオフされているかの情報は処理できますが、距離センサーのような距離の情報を処理できない&メモリに余裕がなく改造できないので別系統で処理するか、あるいは最近使われているgrbl-esp32の方(本コミュニティではCNC xPRO v5で使っています)は拡張性が高いのでファームウェアに手をいれることで対応できるかもしれないです。
まぁめんどくさいことしなくても、おっしゃっているようにgrblはシリアル通信なのでステータスレポートコマンド投げて現在座標の文字列をパースして処理しても全然いけると思いますw

「いいね!」 1

情報ありがとうございます :slight_smile: リンク先を見ることでアイデアを整理出来ました。

Duet3 恐るべし。GRBL-ESP32 の方は弄り倒す楽しさがありそう。

そしてラインレーザープローブ!痺れますね。

※ ラインレーザーと言えば、機動警察パトレイバー the Movie のオープニングでの使われ方が印象的でした。

ソフトウェア

  • モデルの高低を赤 - 青で色分けするのは判りやすいので使えるようにしたい。
  • 用いるプログラミング言語はシリアル通信と3D表現が出来るものでさえあれば良い(CLI で使うなら GUI 関連のライブラリは不要)。
  • Candle 等、先行するプログラムから色々まねる。

ハードウェア

接触式

プローブ向けコマンドがそのまま使える。

RepRapFirmware 系

M557 と M558

Section_M557_Set_Z_probe_point_or_define_probing_grid

Section_M558_Set_Z_probe_type

GRBL 系

G38 系コマンド

非接触式

案1 距離センサーを CNC に組み込む

  • PCとの接続がすっきりする
  • 場合により、ボード・ファームの拡張・改造が必要
    ※ Duet3 はもしかしたら無改造で行けるかも?

RepRapFirmware

Duet3
公式の IR プローブを3Dスキャニング用途に流用する。
必要なら公式プローブの互換品・代用品を作る。
問題は M557 コマンドで指定できる分解能。あまり細かく出来ないようであれば改変が必要。

GRBL-ESP32

Readme

  • Peripherals
    • Additional I/O via shift register and I/O expanders supported (on dev branches)

とあるので、拡張端子付きのボードにセンサーからの信号を放り込んでやれば何とかなりそう。

案2 距離センサーを CNC と独立に利用する

  • 試作しやすい。
  • I/O 周りが散らかる。

まとめ

GRBL 系はとりあえず案 2 で実用品を作り上げてから、案 1 に移行するのが良さそうです。

Duet3 の場合は IR プローブの分解能次第では無改造で行けそうですし、だめな場合もそれ用の I/O が既にあるので色々やりようはありそうです。

「いいね!」 1

↓分解能が 5μm のこちらの計測器を使うと(光学変位センサとしては)割と低価格で表面のかなり詳細な凹凸まで検出出来そうです。

ローコスト短距離変位センサ Z4D-F
https://www.fa.omron.co.jp/products/family/1264/

検出範囲が 4±1.25mm 。近接が必要なので他のセンサとの併用が必要かもしれません(もう少し分解能の低いセンサを使って本番で精密センサがぶつからない程度に荒っぽく表面形状を辿って、そのデータを元に精密センサでもう一度なぞるとか)。

センサ次第で化けそうな気配です。

CMOSタイプ マイクロレーザ測距センサ HG-C
https://www3.panasonic.biz/ac/j/fasys/sensor/photoelectric/hg-c/index.jsp

パナソニックの HG-C シリーズは Omron のと比べると分解能が少し粗くて 10μm ですが、HC-C 1400 などは中心測定距離 400mm 、測定範囲がそこから ±200mm と測定範囲が広いのが良いですね。扱いやすそう。

「いいね!」 1

Arduino + HG-C で距離を測定している動画がありました。

なお、品番が似ていますが、HG-C1000L 系(末尾にLがついているもの)はアナログ出力を持たないのでご注意を。

「いいね!」 1

ON-OFF タイプの距離計の用途

ON-OFF タイプであることを利用し、接触式プローブの代用として用いるつもりです。NPN オープンコレクタタイプであれば負荷用電源とセンサ用電源の分離が出来るとのことなので、そのままボードの所定のコネクタに繋いで代用出来そうな気がします。PNP 型の場合はリレーや電流センサを噛ませてやる必要があるかも。

※ とても安くなっていた距離センサを衝動買いしたのですが、ON-OFF タイプかつ PNP タイプでした。頑張ります :exploding_head:

プアマン’s ラインレーザープローブ

nyaru さんが言及されていたラインレーザー方式に心惹かれるものがあったので、Ciclop の構造を参考に高校時代の数学のテキストを引っ張り出しつつ、これで多分行けるんじゃないかな?という理屈を組んでみました。

原理的にはかなり Ciclop と似通っています。既存の資産が流用可能なので、ラインレーザーをいい感じにに繋げた上で Horus 用のファームウェアを加工して CNC 制御用 Arduino に突っ込めば、短期間で実験機作成まで持っていけそうです。

なお、実際に使う場合の解像度や分解能は

  • ラインレーザーが照射するラインの細さ
  • CNC のステッピングモーターの刻みの細かさ
  • カメラのイメージセンサーのサイズ

で決まってくると思います。

加えて、どれだけ精度の良い収差の補正が組めるかが、生成されるモデルがどれだけ歪むか歪まないかに直結するわけですが、この辺は Horus の光学系データの処理系を流用出来ればなんとかなるはず。

こういった安価なシステムで得られるモデルにどれだけ高い精度が出せるか、冒険心が掻き立てられます。少なくとも現行 Ciclop は超えてみたい :smile:

「いいね!」 1

株式会社ミツトヨのラインレーザープローブと外形が似ており特許関連が少し不安だったので、特許情報プラットフォームで、「レーザー」と「株式会社ミツトヨ」をキーに検索してみました。

例えば、原理的には特開2019-117141 とは被らないように見えます。

似たような感じで点レーザーを使った距離によってオンオフするスイッチをプローブの代わりとして使ったことがあります。(反応する距離は可変抵抗による設定なので結構適当)
問題点として対象物の表面材質によって反応する距離が異なっていました。なので、対象とするワークで実験は必要かと思います。もちろん測定器の測定方式に依ると思いますが・・・

似たような問題でラインレーザーにしても全反射するような金属面等の不得意とする測定面があるはずなので、測定対象物の限定はある程度必要かもしれません。

「いいね!」 1

ありがとうございます。やはり実際に試さないと考えが及ばない部分は多いですね、助かりました。

まず、同じ座標なのに異なる距離として算出されてしまうとセンサーの衝突がこわいです。測定対象または測定器、あるいは両方にダメージが出かねません。それから部位によって材質が異なる物体も手ごわそう。

超音波、赤外線、レーザー、接触式(感圧スイッチ式/通電検知式)と方式によって得手不得手があるようですし、装置が出来たら実験を重ねて材質や形状に応じた上手い使い分けを見つけることを差し当たっての目標としてみます。

将来的には工業用の三次元計測機のように、材質に応じてプローブの方式、あるいは光学式ならば発振器を切り替えてレーザーの波長を変えるといったことが自動で柔軟に行えるのが理想ですが、実験段階では対象物に合わせて手動で最適なプローブを選定するやり方で行こうと思います。

そしてラインレーザー式もラインレーザー式ならではの問題がありそうですし、何れにせよ試行錯誤で頑張る他なさそうですね(それが何かを作っていく時の面白い部分でもありますが :slight_smile:

確かに。それにもしかしたらどの方式でもスキャン出来ないものもあるかもしれませんし、そういうものもいずれリスト化出来たら楽しそうです。「強敵リスト」みたいな感じで。

「いいね!」 1

horus-fw は

This firmware is written in C. Version 0.2.

Derived from Grbl v0.9 by Jesús Arroyo (Mundo Reader S.L.)

Grbl’s lead developer is Simen Svale Skogsrud. Sonney Jeon (Chamnit) improved some parts of grbl.

とのことで、CNC フライス盤に horus-fw を放り込んで動作確認すればいいやくらいに考えていましたが、どうやらやめた方が良さそうです。

ざっと見た感じでもピンの配役が結構変更されているので、Horus 用のファームウェア(horus-fw)をいじって CNC シールドに対応させるよりも、horus-fw のラインレーザー制御を grbl に移植しつつ、CNC 用シールドを改造する/信号線を取り出す、とする方が手間がないかもしれません。

この辺りはおいおい行うとして、差し当たってはセンサーの信号を Arduino で加工して Serial で PC に流すユニットを測定方式毎に作成し、それぞれの短所長所の洗い出しを行うことにします。

なお、接触式との折衷方式はレーザー距離計が一番精度を得られそうなのでそちらで、ラインレーザー方式は Ciclop 用 Arduino のクローンを作りそこに horus-fw を流し込んで試そうと思っています。


http://diwo.bq.com/en/zum-scan-released-2/

ZUM SCAN Shield は今でも Amazon 等で売られていましたので、今回は自作せずそちらを使うことにします。

「いいね!」 1

Windows に MSYS2 を入れてある場合、MSYS2 シェルから

$ pacman -S mingw-w64-x86_64-avr-toolchain mingw64/mingw-w64-x86_64-avrdude

これにより、MinGW 64-bit シェルにおいて、avr-gcc や avrdude が使えました。

Windows でも horus-fw のソースに含まれる Makefile を使いたかったので、上手く行って一安心。

試しに「COM14」に繋いである Arduino UNO に書き込んでみました。

Horus は Serial からの Horus 0.2 ['$' for help] の文字列を検出して Ciclop を認識しているので、これだけでなんちゃって Ciclop の出来上がりです。

ところで、Windows 上で UNIX 系の環境を用意してコンパイルやコーディングを行うだけなら WSL/WSL2 で良いのですが、Windows マシン本体の I/O を使いたい場合は(今のところ)Cygwin や MSYS2 が有利だろうと思います。現状、WSL2 でやるならカーネルにパッチを当てて、USB over IP でホストの USB を引っ張ってきてどうにかする、ということらしいので。

参考文献

追記: WSL 2 に関する FAQ(2021/04/07)より引用

WSL 2 の GPU にはアクセスできますか? ハードウェア サポートを強化する予定はありますか?

WSL 2 ディストリビューション内の GPU にアクセスするためのサポートがリリースされました。 これは、ビッグ データ セットが関係している場合に、機械学習、人工知能、データ サイエンスのシナリオで WSL をより簡単に使用できるようになったことを意味します。 GPU サポートの概要に関するチュートリアルをご確認ください。 現時点では、WSL 2 にはシリアル サポートや USB デバイス サポートは含まれていません。 Microsoft では、これらの機能を追加するための最適な方法を調査しています。

パーツが届き始めたので開発環境を整え試作 0 号機を構成。外部電源を繋いでステッピングモーターの数を増やして LED をラインレーザーに入れ替えて、とコツコツ進めていけば遠からず形に出来るものと考えています。

※ ↑今回のパーツ確認用試作機の動画です。何もかもがおかしい気がしますが、たぶん気のせい。

CNC フライス盤をベースに Grbl_ESP32 に Horus-fw のレーザー制御を足して測距センサーにも対応できるようにして……原型を留めなくなりそう :yum:

開発環境の構築時に Blockly 派生の Arduino 向けエディタも試してみましたが、LEGO ブロックや Minecraft のような感覚でプログラミング出来るのはとても楽しいものでした。組込み系に対する敷居もだいぶ下げてくれるように思います。

一方で、AVR のマイコンそのものにアクセスしたり GCC-AVR のインラインアセンブラを使ったりといった尖った使い方も可能ということで、ずっと遊んでいられる素晴らしいガジェットだと感じました。

https://www.elecrow.com/wiki/index.php?title=AVR_ISP_Shield

「いいね!」 1

これは楽しみですね!
github等でソースコードを公開することがあればぜひこちらで教えてください :wink:
手伝えそうなら手伝いにいきます!

「いいね!」 1

ありがとうございます。心強いです。

派生ファームウェアは実験が進みある程度動かせるものになった辺りで GitHub で公開し、こちらでもお知らせしたいと思っております。

Grbl のコメントの書き方を参考にしつつ読みやすいコードを目指しますので、是非お気軽に、助けて下さい :grin:

方向性としては、Grbl_ESP32 と入れ替えて使えるように、基本的なシリアルコマンドの互換性を保ちつつセンサー系の入出力や制御について拡張出来たらいいなと考えています。

スピンドルの制御信号の切り替えとプローブのI/Oの流用を行えば各種センサーとのインターフェイスを確保出来そうですが、そのあたりが不足しても ESP32 には Wifi や Bluetooth があるのが良いですね。何とか出来そうな気がしてきました。

「いいね!」 1

↑この辺りをうまい具合に組み込めると、取得した点群をGrbl_ESP32 内で表示する機能を作れるかもしれません。スタンドアロンな 3D スキャナも夢ではないかも。

「いいね!」 1