2017年3月27日月曜日

proxxonフライス盤をCNCに改造する (16) ベクタースキャン、InkscapeのG-code変換はバグ?

前回は、画像ファイルを、ラスタースキャンのG-codeファイルに変換する方法について書きました.

今回は、画像ファイルを、ベクタースキャンのG-codeファイルに変換する方法について書きます.

ネットを見るとInkscape使う事例が多いようです.Inkscapeというベクター画像お絵描きソフトと、Inkscapeに追加するpluginによって、ベクタースキャンのG-codeを生成します.
Inkscape+pluginを使った結果としては苦労しました、というか苦労してます.苦労のわけは、1)日本語で細かく解説したサイトが無いっぽい、2)pluginがバグバグしてる、ためです.

以下では、.png画像をInkscapeに食わせてベクター変換し、さらにG-code変換し、モニタに表示させて確認し、Arduinoに送信してエラーの有無を確認する、、、そんなコトをやりました.

【Inkscapeをインストール】
ここからwindows版をDLできます.32bit/64bit、exe、7z、msiなど在りますのでお好みにどうぞ.後述するバグかなぁという悩みはどれでも同じでしたのでどれをインストールしてもOKかと思います.ちなみにわたしは32bit-7z版にしました.


【Inkscapeで画像をベクトルに変換】
ここの作業は、知っておくといつか何かの場面で役立つ知識かと思います.

↓元画像は、.pngのこの画像です.モロにビットマップ形式の画像ですから、拡大すると線がギザギザになっています.
↓Inkscapeの下地サイズを100x100mm(任意)にするため、Document Propertyへ進みます.
↓width/heightに100を入力して、右上のXボタンを押します.YES/NOを確認するダイアログは出ません.InkscapeはLinux系かMac系のソフトだからでしょうか?UIの作法がwindowsアプリとは少し違う気がします.
↓画像ファイルを貼り付けるため、Importへ進みます.ファイル名を聞いてくるので、所望の画像ファイルを指定.
↓確認のダイアログは無視してOKでいいでしょう.
↓100x100mmの枠に比較して巨大な画像ファイルが貼られました.枠に収まるように画像サイズを調整してください.
↓ベクターに変換するため、枠に収めた画像を選択します.
↓選択状態を保ったままで、Trace Bitmapへ進みます.
↓ダイアログの設定はこうなってます.このままで大丈夫です.重要なのはBrightness cutoffにチェックが入っている事です.
↓updateを押すとこうなります.OKを押します.Xでダイアログを閉じます.
↓画像枠を見ると何も変化がないように見えますけどそうではありません.動かすと2重の画像が重なっています.拡大すると、右側の画像がベクターに変換されて縁がくっきりと描画されています.
左のビットマップを削除して、右のベクター画像を残して、再び枠内に収めます.

ここまでで、ビットマップ画像をベクター画像に変換できました.お好みでsave asでもしてください.


【G-codeファイルに変換する その1】
まずは失敗する方法から解説しましょう.

上でpluginを使うと書きましたが、inkscapeのRev.0.92をインストールした時点でG-code生成のためのpluginは入っています.なのでpluginを改めてインストせずに先へ進みます.

↓Engravingへ進みます.レーザーで紙を切断するような工作をEngraveと呼びます.
↓Engravingの設定画面が表示されます.Maximum distance....はデフォだと10が入っていると思いますが、0.1を入れておきます.筆の太さを表していると思います.Applyを押す必要はありません.
↓optionタブは飛ばして、Preferenceタブを設定します.上から2つはファイル名とフォルダ名です.KBDで入力するしかありません.5.000という数値は、その下のmmと合わせて、筆を5mm上げ下げするという意味になります.Applyを押す必要はありません.
再び、Engravingタブに戻ります.戻ったとき、さっきは表示されていた数値が消えてしまうのはバグでしょう.でも気にしません.

↓画像を選択します.
EngravingタブのApplyを押します.

↓こんな風に、ダイアログが2枚重ねで表示されてしまいます.下地のダイアログは何かを警告しているので、OKを押して消します.これを消さないと処理が終わりません.
この後、30秒ぐらい待たされます.辛抱強く、不安を抱かずに、待ちます.
画面に変化があったら、G-codeファイルが出来てると思います.

↓出来たG-codeファイルをチェックしてみましょう.前回紹介したこちらのサイトで表示できます.G-codeファイルをドラッグ&ドロップして表示されたのがこんな画像です.
これはどうかしています.勝手に原点が遠ざかっています.これってバグなの?
Orientation pointsで原点設定ができるようになっているけれど、それをやってもこのトラブルは解決しません.それ以外に原点を特定する操作方法が在るのかどうか不明です.


【G-codeファイルに変換する その2】
このやり方の方がまだマトモに動くみたいです.(問題が無いわけではない)

ベクター画像に変換した後の工程を以下のようにします.

↓Path to Gcodeへ進みます.
↓Path to Gcode設定画面のうち、Preferenceタブにファイル名などを設定します.上でやったのと同じです.このタブのApplyを押す必要はありません.
Path to Gcodeタブに戻り、Applyを押します.

警告ダイアログが出るのでOKを押します.

しばらくビジー状態から戻ってきません.不安なひと時を過ごします.

↓やがて画像がこのようにベクターだらけになります.
↓G-codeファイルをviewerでチェックすると、今度は原点はマトモです.
ところがまだ問題が在るんです.100x100mmサイズで描いたつもりの元画像だったのに、なぜか28x28mmサイズに縮小されてしまうんです.これってバグなの?

スケーリングが変わってしまうのではCNCに使えないぞよ?
mm/inchスケールとも異なる3.5分の1ぐらいのスケーリングになっている模様.

なんだか詰んでしまった気がしてなりません.


【Arduinoに送信してみる】
スケーリングの問題はさておくとして、G-codeファイルをArduinoが受け付けるのかどうかを試します.

当連載でたびたび登場するUniversal Gcode Senderを起動します.→連載9回目

Universal Gcode SenderのFile Modeタブで、G-codeファイルを指定します.

↓Visualizeボタンを押すと、G-codeファイルを表示してくれます.

Sendボタンを押すと、実際にArduinoが正常に受け付けてくれたコマンドでXYステージが動作する様がアニメーション表示されます.ArduinoはG-codeファイルを正しく解釈してくれているようです.

G-codeファイルにはこのようなコマンドがたくさん見られます.
G02X17.3706Y5.4033Z-0.125I0.189J2.0604
このG02は、円弧補間コマンドであり、Arduinoに焼いたfirmwareであるところのgrbl0.9は円弧補間コマンドも実装されていることが判りました.
当連載10回目でG02はgrbl0.9に実装されていないと書きましたが、それは誤りでした.連載10回目でG02がエラーだったのはI/Jパラメータを与えていなかったからだと思われます.

Arduino Unoは8bitマイコンです.8bitマイコンで浮動小数点演算をさせると動作が遅くて使い物にならないというのがわたしの通念だったのですが、ArduinoのCPUは8bitながら意外に処理能力が高い優秀なCPUなのかもしれません.少しArduinoを見直しました.


というわけで、Inkscapeでベクター形のG-codeファイルを得るトライについては、謎のスケーリングのため詰んでいるのが本日の状況です.困ったなぁ.

15へ          17へ

かしこ

0 件のコメント:

コメントを投稿