運動方法解說
描述
此頁說明了 Motion86 上不同種種運動方法的解說。
運動方法參考表
運動方法 |
---|
直線運動 |
弧線運動 |
劃圓運動 |
螺旋運動 |
直線運動:
當使用直線運動方法控制 Machine 時,機器將會直線前往目標位置,如附圖一:
其路徑可用以下 G-Code 達成:
machine.gcode("G1 X0 Y0 Z0 F600"); machine.gcode("G1 X2 Y2 Z4 F600"); machine.gcode("G1 X4 Y4 Z2 F600"); machine.gcode("G1 X6 Y6 Z8 F600"); machine.gcode("G1 X8 Y8 Z6 F600"); machine.gcode("G1 X10 Y10 Z10 F600");
亦或者直接使用 line 函式控制:
machine.line(0, 0, 0, 600); machine.line(2, 2, 4, 600); machine.line(4, 4, 2, 600); machine.line(6, 6, 8, 600); machine.line(8, 8, 6, 600); machine.line(10, 10, 10, 600);
弧線運動:
當使用弧線運動方法控制 Machine 時,您可以使用兩種不同的方式來控制弧線路徑:
1. 圓心模式 – 即給予圓心與終點位置來計算該弧線之路徑。
2. 半徑模式 – 即給予半徑與終點位置來計算該弧線之路徑。
3. 徑度模式 – 即給予徑度來計算該弧線之路徑。
而不論使用哪一種模式,都將會需要選擇順時針與逆時針之方向,如附圖二、附圖三:
在 G-Code 中可以直接使用 G2(CW) 與 G3(CCW) 做為指令區別方向。
如附圖二可用以下 G-Code 達成:
machine.gcode("G2 X0 Y20 I0 J10 F600");
而附圖三可用以下 G-Code 達成:
machine.gcode("G3 X0 Y20 I0 J10 F600");
亦或者直接使用 arcXY、arcYZ、arcXZ 函式,附圖二使用:
machine.arcXY(0, 10, 0, 20, false, 600);
附圖三:
machine.arcXY(0, 10, 0, 20, true, 600);
當使用半徑模式時,當角度不等於 180 度時將會產生 4 種不同的路徑,如附圖四:
附圖四的上下四個弧的半徑皆為 10,且目標位置相同,在此需要使用半徑的正負號來決定路徑。
若要選擇角度小於 180 度的弧線,則半徑為正值;若要選擇角度大於 180 度的弧線,則半徑為負值。
如附圖四的黃線為順時針且弧線的角度小於 180 度,可用以下 G-Code 達成:
machine.gcode("G2 X10 Y0 R10 F600");
亦或者直接使用 arcXY、arcYZ、arcXZ 函式的多載方法:
machine.arcXY(10, 10, 0, false, 600);
橘線為順時針且弧線的角度大於 180 度,可用以下 G-Code 達成:
machine.gcode("G2 X10 Y0 R-10 F600");
亦或者直接使用 arcXY、arcYZ、arcXZ 函式的多載方法:
machine.arcXY(-10, 10, 0, false, 600);
藍線為逆時針且弧線的角度小於 180 度,可用以下 G-Code 達成:
machine.gcode("G3 X10 Y0 R10 F600");
亦或者直接使用 arcXY、arcYZ、arcXZ 函式的多載方法,並利用參數 revDir 控制方向:
machine.arcXY(10, 10, 0, true, 600);
紫線為逆時針且弧線的角度大於 180 度,可用以下 G-Code 達成:
machine.gcode("G3 X10 Y0 R-10 F600");
亦或者直接使用 arcXY、arcYZ、arcXZ 函式的多載方法,並利用參數 revDir 控制方向:
machine.arcXY(-10, 10, 0, true, 600);
※ 注意,不論是哪一種弧線運動方式都有可能會因為參數設定錯誤導至目標位置不在圓上,這將會導致機器出現非預期運動。
在徑度模式下可以直接使用 arcXY_Theta、arcXZ_Theta、arcYZ_Theta 來控制 Machine 移動,並用徑度正負號決定方向,如下例:
// 以 600 的進給速率,圓心 (10, 0),順時針劃 90 度的圓 machine.arcXY_Theta(10, 0, HALF_PI, 600); // 以 600 的進給速率,圓心 (10, 0),逆時針劃 90 度的圓 machine.arcXY_Theta(10, 0, -HALF_PI, 600);
劃圓運動:
當使用劃圓運動方法控制 Machine 時,機器將會劃圓運動抵達目標位置:
弧線運動的當前位置與目標位置重疊時,將會使 Machine 視為要劃一整圈的圓,
若再加入 G-Code 參數 P 可以亦可表示要繞幾圈,如下例:
// 以 600 的進給速率,圓心 (10, 0),繞兩圈前往目標位置 (0, 0) machine.gcode("G2 X0 Y0 I10 J0 P2 F600");
逆時針運動則使用 G3,同弧線運動。
亦或者直接使用 circleXY、circleYZ、circleXZ 函式直接劃一個圓到當前位置,並利用參數 revDir 控制方向:
// 以 600 的進給速率,圓心 (10, 0),繞一圈前往當前位置 machine.circleXY(10, 0, false, 600);
※ 在圓心與半徑模式下,當原點與目標位置相同將會有無限組解,在該情況下將不做任何運動。
螺旋運動:
當使用螺旋運動方法控制 Machine 時,機器將會在 XY、YZ、XZ 三個平面上以螺旋運動抵達目標位置,如附圖五、六、七:
螺旋運動可直接使用 helicalXY、helicalYZ、helicalXZ 函式決定平面,並用徑度正負號決定方向:
// 以 600 的進給速率,圓心 (0, 0),往 Z10 的位置繞兩圈 machine.helicalXY(0, 0, 10, 4 * PI, 600); // 以 600 的進給速率,圓心 (0, 0),往 X10 的位置繞兩圈 machine.helicalYZ(0, 0, 10, 4 * PI, 600); // 以 600 的進給速率,圓心 (0, 0),往 Y10 的位置繞兩圈 machine.helicalXZ(0, 0, 10, 4 * PI, 600);
See Also
gcode()
arcXY()
arcXZ()
arcYZ()
arcXY_Theta()
arcXZ_Theta()
arcYZ_Theta()
circleXY()
circleXZ()
circleYZ()
helicalXY()
helicalXZ()
helicalYZ()
The text of the 86Duino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.