G-code って何だ?
3DプリンターBIQU-Magicianを使い始めてからG-code というものに興味を持たざるを得なくなった。一般的に3Dプリンターで造形するには3DモデリングしたデータをSTLファイル形式で保存し、スライサーでG-code化するという手順が必要となる。従ってG-code とはオブジェクトを積層単位にスライス化したデータだということになる。
そもそもG-code はNC(数値制御)機械で座標系を使い、軸の移動を処理するコードで一般に工作機械の自動制御を行う際のプログラミングコードとして広く使用されているという。
手元にある3Dプリンターは玩具みたいなものだが産業用の工作機械と規模は違えどその手法は同じG-code を使っているわけだ。

※3Dプリンター BIQU-Magician
G-code は繰り返すが通常スライサーと呼ぶスライスソフトウェアを用いて出力する。
ただしRepRap(replicating rapid prototyper)が定義したコードも含み、使用するファームウェアによってもコードに多少のバリエーションがある。
なおRepRapについてはここを参照されたい。

※スライサーのひとつ「Cura」
ということで自分が扱うG-codeとはどのようなアルゴリズムで出来ているのかと興味を持ち、G-code化したデータの中を覗いてみた。ちなみにG-code化したファイルはテキストエディタの類でオープン出来るのだ。
確認してみるとG-codeの基本は “G1” というノズル移動コマンドから始まる一連のコードで成り立っていることがわかった。そしてそのパラメータの X, Y, Z は座標を意味し、Fはホットエンド(フィラメントを溶かして積層するための部品)の移動速度でEはフィラメントの送り量を意味している。
ここで実際にNuAns NEO [Reloaded] トップカバーを自作した際の一例を挙げてコードの中身を見てみよう。

上から順に一部を記述してみたが、その意味は概略次の通りだ。
規格:Marlin
時間:6896 (秒)
フィラメント使用量:5.39028m
レイヤーの高さ:0.15mm
使用スライサーはCuraでバージョンが 3.2.1
ホットエンドの温度を200℃
ホットエンドの温度が200度になるまで待機
入力値絶対座標
単位はmm
座標は絶対値
入力値は絶対座標
ファンの電源を切る
ヘッダをホームポジションへ
と続き、後のほとんどが G1 X-42.531 Y-6.008 E5.81017 といったG1コマンドの記述で埋まっている。
これは前記したようにノズル移動の為のコードで例えば G1 X-42.531 Y-6.008 E5.81017 とはノズルを [X,Y] = [-42.531 , -6.008] のポジションに移動し、その間にエクストルーダー(押出機)はフィラメントを [E]=5.81017 の長さで押し出しなさいというコマンドで、単位はミリメートルだ。
こうしたコマンドに従って3Dプリンターは前のポジションから次のポジションへ移動し、同時にフィラメントを前の長さから指定量押し出し積層していく理屈である。
そして最後のリストだが、M107はファンの電源を切るコマンド、ホットエンド温度をゼロ、テーブル温度をゼロ(BIQU-Magicianは意味なし)、座標を相対値指定変更、ヘッダをホームポジションへと続き、リストの最下行は ;End of Gcode とG-codeの終了を宣言して終わっている。

こうした記述であるということはこのG-code のリストを直接エディタで編集することも可能なことを意味する。
ともあれ G-code の内容を理解することは3Dプリンターの仕組みの一端を理解することになるわけで興味は尽きない。
そもそもG-code はNC(数値制御)機械で座標系を使い、軸の移動を処理するコードで一般に工作機械の自動制御を行う際のプログラミングコードとして広く使用されているという。
手元にある3Dプリンターは玩具みたいなものだが産業用の工作機械と規模は違えどその手法は同じG-code を使っているわけだ。

※3Dプリンター BIQU-Magician
G-code は繰り返すが通常スライサーと呼ぶスライスソフトウェアを用いて出力する。
ただしRepRap(replicating rapid prototyper)が定義したコードも含み、使用するファームウェアによってもコードに多少のバリエーションがある。
なおRepRapについてはここを参照されたい。

※スライサーのひとつ「Cura」
ということで自分が扱うG-codeとはどのようなアルゴリズムで出来ているのかと興味を持ち、G-code化したデータの中を覗いてみた。ちなみにG-code化したファイルはテキストエディタの類でオープン出来るのだ。
確認してみるとG-codeの基本は “G1” というノズル移動コマンドから始まる一連のコードで成り立っていることがわかった。そしてそのパラメータの X, Y, Z は座標を意味し、Fはホットエンド(フィラメントを溶かして積層するための部品)の移動速度でEはフィラメントの送り量を意味している。
ここで実際にNuAns NEO [Reloaded] トップカバーを自作した際の一例を挙げてコードの中身を見てみよう。

上から順に一部を記述してみたが、その意味は概略次の通りだ。
規格:Marlin
時間:6896 (秒)
フィラメント使用量:5.39028m
レイヤーの高さ:0.15mm
使用スライサーはCuraでバージョンが 3.2.1
ホットエンドの温度を200℃
ホットエンドの温度が200度になるまで待機
入力値絶対座標
単位はmm
座標は絶対値
入力値は絶対座標
ファンの電源を切る
ヘッダをホームポジションへ
と続き、後のほとんどが G1 X-42.531 Y-6.008 E5.81017 といったG1コマンドの記述で埋まっている。
これは前記したようにノズル移動の為のコードで例えば G1 X-42.531 Y-6.008 E5.81017 とはノズルを [X,Y] = [-42.531 , -6.008] のポジションに移動し、その間にエクストルーダー(押出機)はフィラメントを [E]=5.81017 の長さで押し出しなさいというコマンドで、単位はミリメートルだ。
こうしたコマンドに従って3Dプリンターは前のポジションから次のポジションへ移動し、同時にフィラメントを前の長さから指定量押し出し積層していく理屈である。
そして最後のリストだが、M107はファンの電源を切るコマンド、ホットエンド温度をゼロ、テーブル温度をゼロ(BIQU-Magicianは意味なし)、座標を相対値指定変更、ヘッダをホームポジションへと続き、リストの最下行は ;End of Gcode とG-codeの終了を宣言して終わっている。

こうした記述であるということはこのG-code のリストを直接エディタで編集することも可能なことを意味する。
ともあれ G-code の内容を理解することは3Dプリンターの仕組みの一端を理解することになるわけで興味は尽きない。
- 関連記事
-
- 3Dプリンター「FLASHFORGE Inventor」で多様なフィラメントを使うには (2018/07/02)
- 3Dプリンター「FLASHFORGE Inventor」のサポート材にPVAフィラメントを使ってみた (2018/06/25)
- 3Dプリンターを活用するための三種の神器 (2018/05/14)
- 専属モデル造形計画第4弾、両腕の関節を3Dプリンターで作る (2018/04/30)
- 3Dプリンター製NuAns NEO [Reloaded] トップカバー(ピンク)プレゼント当選者へ発送 (2018/04/16)
- G-code って何だ? (2018/04/16)
- 3Dプリンターによる自作、NuAns NEO [Reloaded]トップカバー(ピンク)プレゼント企画 (2018/04/01)
- Apple Magic Keyboard 2 の右半分が入力できないトラブル顛末記 (2018/02/26)
- 新年明けましてお目出度うございます (2018/01/01)
- 2017年度、Macテクノロジー研究所的ベストプロダクト10 (2017/12/29)
- パソコンを知らない世代が新たに生まれている?! (2017/11/06)