2017年2月25日 星期六
2017年2月12日 星期日
3DP : 用 G92 來設定目前的座標
3D printer 是由噴頭擠料塑形,座標看噴頭位置就好;但是如果將雷射裝在 3D printer 上,位置和被雷射的物體怎麼放又有很大的關係了。我本來是利用兩枝大冰棒棒做了一個呈九十度夾角的 L 形定位輔助,利用雷射弱光來定位,將輔器放在原點的位置以後,最後再用夾字來固定。這樣子就可以很快的將物件放到定點上。不過,用久了,還是會跑掉;有時則可能是物件形狀的問題,造成燒錯位置,尤其是小件的物品,差一點點就差很多了。後來懶得再去調 L 形輔具了,索性改用 Gcode 裡的「G92 」,直接告訴控制系統,那裡的座標是多少。
「G92」我之前拿來調整電容式近接開關的參數,記錄在底下的舊文中:
當時是針對 Z 軸,這回是應用在 X / Y 軸上。
例如要雷射的物件是一個直徑 12mm 的圓柱體,當我將東西放好,執行移動到圓柱圓心位置 (X=6, Y=6) 的指令:
G0 X6 Y6 F500
結果發現雷射並沒有剛好打在圓心上,於是以手動的方式慢慢移動 X / Y 軸的馬達,讓雷射能落在圓心上。
好~那怎麼讓系統知道那裡才是我們圓心的座標 (X=6 , Y=6) 呢?
換主角出場囉!執行底下的 Gcode :
G92 X6 Y6
我將這指令翻譯一下:「報告系統,請記住,這裡是 X=6,Y=6,Over!」。
接下來,機器會以此去推算其它位置了。
還記得第一次玩 Grbl 時,因為沒有限位開關,機器總是以開機的位置當 Home,搞不清楚它的座標系統,常讓馬達轉過頭。有了這個「G92」就方便多了。
不過要注意的是:
- G92 後面如果都沒加參數的話,系統會當你是要執行「G92 X0 Y0 Z0 E0」哦!
G92 的詳細用法可以參考 Reprap 網站上的資料:
2017年2月8日 星期三
Inkscape : J Tech Photonics Laser Tool 換解析度
可是光這樣還不夠,像 J Tech Photonics Laser Tool 這個 Extension,當初它是針對 90DIP 來寫的,匯出的 Gcode 輸出的圖形尺寸會不對。GcodeTools 的另一個「後代」Mr Beam gcode generators 比較跟得上時代,它就提供了換 DPI 的選項。
花了一點時間,將 Mr Beam 有關設置 Orientation 的程式片段,轉移到 J Tech Photonics Laser Tool 中,讓它也可能根據 Inkscape 的版本來設定 DPI。
另外也順便把 J Tech Photonics Laser Tool 中的一些些臭蟲給除了。修改過的檔案可以在下面的網址中下載:
備註:
修改的 J Tech Photonics Laser Tool 源自於「J Tech Photonics, Inc.」網站所分享的,最原始的程式可以由該單位的網站中下載:
https://jtechphotonics.com/
相關文章
- 雄 : 3DP : Prusa i3 變身為雷雕機
- 雄 : Inkscape : Extensions : Raster 2 Laser GCode generator
- 雄 : Inkscape : Extensions : J Tech Photonics Laser Tool
- 雄 : Inkscape : SVG 頁面設定與圖形大小
2017年2月7日 星期二
Python : zero length field name in format
comment = ";Image: {:.2f}x{:.2f} @ {:.2f},{:.2f}|".format(w,h,x,y) + file_id+"\n"
ValueError: zero length field name in format
因為兩個不同版本的 Inkscape 內建不同的版本的 Python,一個是 Python 2.7,另一個則是 Python 2.6 ,這又是改版以後產生的問題。
自 Python 2.7 以後,format 的格式可以不用指定參數的序號,例如:
{} {} {}
會自動對應 format 的參數一、參數二、參數三,但是這樣的格式在在舊版的 Python 2.6 中要改成:
{0} {1} {2}
所以將原來有錯的地方改為:
{0:.2f}x{1:.2f} @ {2:.2f},{3:.2f}|
錯誤訊息就消失了。
Inkscape : 更新 Python 的 PIL
除此之外,Python 內所擁有的程式庫當然也有所不同。最近在研究一個 Inkscape 的 Extension,它使用到一支 image2gcode.py ,而裡面又使用到 PIL 的 Image,無論在 Inkscape 0.92 或是 0.91 它都會出現這樣的訊息:
...... in __getattr__raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed
由訊息看起來,應該是 PIL 少了類似 _imaging.pyd _imaging.dll ...... 這種檔名為 _imaging.xxx 的模組檔案。不過,查了一下 Inkscape\python\Lib\site-packages\PIL 目錄,裡面確定有 imaging.pyd 這個檔案啊!在 Inkscape 的 PIL 目錄中看到有一個檔案叫「PIL-1.1.6-py2.5.egg-info」,1.1.6 應該是 PIL 的版本序號,而 py2.5 是給 Python 1.5.2 以後的版本用的。
冤有頭,債有主,既然是 PIL 的問題,就試著把它換掉看看。
2017年2月6日 星期一
Inkscape : SVG 頁面設定與圖形大小

當時發現一個問題,同樣都可以處理向量圖形,Flash 匯出的圖在 Inkscape 中就是特別的小,當時在玩別的東西,也沒深究。這幾天在研究幾個 SVG 轉 G-code 的工具,發現這問題可是大問題了,如果用的是 GcodeTools、J Tech Photonics Laser Tool、Mr Beam、TurnkeyLaser Exporter ......,這些以 GcodeTools 為架構的 Extensions,因為 SVG 的設計,有些圖檔轉出的圖形大小實在差太多了。如果對 SVG 圖形的縮放有興趣,可以參考底下的文章,研究看看:
- 「How to Scale SVG」 by AMELIA BELLAMY-ROYDS
- Absolute Measurements (關於單位換算)
基本上是這樣的概念:點陣圖向來就是一個點、一個點畫在版面中,版面怎麼縮放,點就跟著縮放;但對於 SVG 的向量圖來說,「單位」很重要,放大、縮小版面,向量圖本體卻可能因「單位」是用 px、mm、in ...... 而有所差異,一定要弄清楚。
Inkscape 0.92 將預設的 DPI 由 90 改為 96,對一些和尺寸有關的 Extensions 應該會有所影響,因為這一改,比例、位置都可能會跑掉了。
- v.0.91 的 90DPI : 1mm = 90/25.4 = 3.5433070660 px
- v.0.92 的 96DPI : 1mm = 96/25.4 = 3.7795275591 px
如果以 Inkscape 0.92 來開啟舊版儲存的文件,將文件屬性中的「Display units」由「px」和「mm」之問切換,應該可以在「比例」中的「Scale x」中看到 3.xxxxx 的數字。
下面直接在 Inkscape 0.92 裡實驗,最後我們再來看看,操作 GcodeTools 一系列轉 G-code 的工具到底要先將 Inkscape 的頁面設定為什麼。
2017年2月3日 星期五
用 StippleGen 2 將照片轉為「點點畫」

用關鍵字「halftone cnc」,想找有沒有可以將照片轉為適合雷射的工具,看到底下的網頁在介紹「StippleGen2」:
- http://www.evilmadscientist.com/2012/stipplegen-weighted-voronoi-stippling-and-tsp-paths-in-processing/
- http://www.evilmadscientist.com/2012/stipplegen2/
深深地被它強大的功能吸引到,它利用大小不同的空心圓或是連續的線條來取代原圖中各點的顏色,轉好的 Halftone 效果完全符合我的需求。果然玩 CNC 的人比雷射多得多,資源亦較豐富。
StippleGen2 可以在底下的網頁內下載:
![]() |
StippleGen2 |
在 StippleGen2 中將照片圖檔載入以後,它依使用者設定的「Stipples (點點數量)」、「Min. DOT SIZE (點點的最小尺寸)」、「DOT SIZE RANGE (點點的尺寸範圍)」、「WHITE CUT OFF (去掉較白的點)」......。
前面的這幾個選項,都可以利用拉桿來調整,至於什麼選項是做什麼用,拉拉看、調整一下大小,「等一會兒」,沒錯!就是要等一會兒,程式就會一次又一次的將「路徑」及圖像最佳化。
那些選項到底要怎麼搭配?這可能要看個人口味的輕重了。我要的是「點點分明」,所以會依照相的大小去調整 MIN. DOT SIZE,解析度不高的調小一點,反之,解析度高的就調大一點,總之,讓畫面中的點和點之間能有一些些留白,這樣子,不致於會因為重疊而讓雷射完的畫面焦黑一片。
至於點點的數量要設多少,「Stipples」設愈高,解析度當然愈高,不過,放到 Inkscape 去處理,或是轉 G-code 的時候會很耗系統資源和時間的。基本上,「Stipples」預設的 2000 ,對 30mm x 30mm 的相片來說,是品質與處理時間都可以接受的。不過,為了不浪費「Stipples」數量的限制,預先將相片「去背」應該會較好。
如果覺得畫面中的結果滿意了,我們可以按左下方的「SAVE STIPPLE FILE」或是「SAVE "TSP" PATH」將點點畫或是用線條來畫的 "TSP" PATH,儲存為 SVG 格式的向量圖檔。
如何在 Inkscape 中將 StippleGen2 製作的 stipple SVG 檔案轉為 G-code 呢?
首先,我們先開啟前面儲存好的「STIPPLE FILE」(*.svg),如果 Inkscape 是 0.91 以上的版本,因為 StippleGen2 儲存的格式是舊版的格式,Inkscape 會有對話框提示進一步要如何處理舊版格式所產生的問題,沒關係,按「Scale elements」就好。
![]() |
按「Scale elements」自動調比例 |
進到 Inkscape 的編輯畫面,調整點點畫及頁面的尺寸大小:
- 先點選轉好的「點點畫」,更改它的寬度和高度為想要的大小
- 開啟設定「文件屬性」的對話框(按「檔案」→「文件屬性」)
- 按一下「將頁面調整成內容大小」的「加號」展開設定選項
- 按一下「將頁面調整成圖畫或選擇範圍的大小」。
- 關閉「文件屬性」的對話框,即完成尺寸的調整。
![]() |
按「將頁面調整成內容大小」展開選單 |
![]() |
按「將頁面調整成圖畫或選擇範圍的大小」 |
在 Inkscape 裡面將圖輸出 G-code 的工具(Extensions)有好幾個,像「Raster 2 Laser GCode generator」、「J Tech Photonics Laser Tool」、「Gcodetools」.....。
如果是用「Raster 2 Laser GCode generator」來轉 G-code,因為它都會將繪圖區中的畫面輸出為 PNG 的點陣圖,所以直接執行這個 Extension 轉換的程序即可。為了盡量保持圖的原始效果,我會選用以下的選項:
- Resolution :「10 pixel/mm」
- B/W conversion : 「B/W fixed threshold」
如果要體會一下 StippleGen2 幫我們計算好的「最佳路徑」,當然是要利用能轉向量圖的,所以我使用習慣用的「J Tech Photonics Laser Tool」來轉 G-code。
先將物件轉為「路徑」:
- 點選要轉 G-code 的「點點畫」或「"TSP" PATH」。
- 點選主選單「路徑」→「物件轉成路徑」。
![]() |
將物件轉成路徑 |
將物件轉好路徑,我們就可以開始用「J Tech Photonics Laser Tool」來轉 G-code 了。
用「J Tech Photonics Laser Tool」以向量圖來轉好的處是在打雷射時較細膩,速度也滿快的,不過它轉檔的速度在我老舊的電腦上工作,實在是令人等得捶心肝啊!如果圖較大,而 stipples 多時,自己評估吧!
Inkscape : Extensions : 以線條填滿路徑
GitHub evil-mad/EggBot 中的 Hatch fill :
GitHub KnoxMakers/KM-Laser 中的 Hatch fill :
GitHub cnc-club/gcodetools (Inkscape 已內建) 中的 Gcodetools_area (銑面) :
這三個 Inkscape extensions 都可以幫我將已轉為「路徑(path)」的圖形內,以線條來填滿。想看到填滿效果,
- 先將圖形轉為路徑,再使用工具。
- 將 Inkscape 的「檢視」→「顯示模式」改為「輪廓」。
Hatch fill
KM-Laser 的 Hatch fill 其實是源自於 EggBot ,所以它們的 Hatch fill 界面與操作是一樣的。- 將圖形轉為路徑 (path) : 先選取要處理的圖形以後,點選主選單「路徑 (Path)」中的「將物件轉為路徑 (Object to Path)」
- 由 「擴充功能 (Extensions)」 的 「EggBot」或是「KM Laser」中點選「Hatch fill」。
- 設定參數:有關參數的用途可以點選「More Info」的頁面參考,其中最重要的是「Hatch spacing」,它決定了填線條的密度,數字愈小,填得愈密。
- 設定好參數,選取要填線條的圖,按一下「套用(Apply)」即可查看成果。
Gcodetools Area
Gcodetools 功能強大,而且 Inkscape 已內建,但是它操作起來比較繁鎖,光看到它一堆 CNC的專有名詞,就令人早早打了退堂鼓。我是在看了底下這個解說影片才又勾起研究的興趣的:雖然 Gcodetools 的 Area 使用起來較繁鎖一點,不過它和前面兩個用直線填滿的演算法是不同的,也滿值得玩一玩的:
- 將圖形轉為路徑 (path) : 先選取要處理的圖形以後,點選主選單「路徑 (Path)」中的「將物件轉為路徑 (Object to Path)」
- 由 「擴充功能 (Extensions)」 的 「Gcodetools」 中選取「方向點 (Orientation points)」,加入「2-points mode」的「方向點」。
- 由 「擴充功能 (Extensions)」 的 「Gcodetools」 選取「刀具庫 (Tools library)」,加入「電漿刀」(Tools type : plasma)。
- 找到「電漿刀 (Plasma cutter)」的設定區塊後,選取 Inkscape 的文字工具來修改設定。最重要的設定是刀具的直徑「diameter」,也就是雷射光的粗細,它決定了用來填滿的線條粗細,可以先試試 0.1 。
- 由 「擴充功能 (Extensions)」 的 「Gcodetools」 中選取「面銑 (Area)」,點選「面銑 (Area)」的頁面;設定「面銑刀具重疊 (Area tool overlap)」值為 0。另外兩個選項,「Area width」設為 1 ,而「Maximum area cutting curves」先用預設值,有時間可以慢慢玩玩,看不同設定值,效果有何差異。
- 點選編輯區中要填滿的圖形以後,按「套用 (Apply)」,即可查看成果。
FAQ
- Q: 使用 Gcodetools 時,加入了「電漿刀」,為什麼找不到 Plasma cutter 的設定區塊?
A: 將版面的檢視比例縮小一點看看,它預設會放到很上面,如果放大檢視就看不到了。 - Q: 如何利用 Gcodetools 來輸出 G-code ?
A: 先將所有圖形都轉為「路徑」並選取好。
在「Plasma cutter」中設定「feed」、「penetration feed」、「gcode before path」、「gcode after path」;
然後進入「路徑轉為 Gcode」的 extensiion,設定
「路徑轉為 Gcode」頁面中的「最大分割深 (Maximum splitting depth)」為 0,
並勾選「排序路徑以減少高速距離 (Sort paths to reduse rapid distance)」;
再設定「選項」頁面中的
「沿著Z軸縮放 (Scale along Z axis)」(這個翻譯怪怪的,應該是沿著Z軸每次降低多少才對) 設為 0,
「沿著Z軸偏移 (Offset along Z axis)」為起始的 Z 軸高度;
最後回到「路徑轉為 Gcode」頁面,並按下「套用(Apply)」。