【pythonで動くG-codeビルダー】G-coordinator/gcoordinatorをLinuxにインストール&動作確認してみる
※ 当ページには【広告/PR】を含む場合があります。
2023/06/13
2024/04/04

普段は「Cura」・「Prusa Slicer」のような3Dプリンター専用のスライサーに任せっきりでほどんどのユーザーが気にも止めないかも知れませんが、インフィルに選択できる構造に
おそらく「なんか強そう」という感じで、なんとなく使われている方も多いかも知れませんが、以下のように非常に興味深い特長を備えています。
+ モデルの強度を維持しながらも軽量化できる
+ モデルの(単位立方体あたりの)表面積を大きくできる
+ 他のインフィル構造と比較して、内部の応力集中を軽減できる
+ 外部の系へは熱断熱性が高く、断熱材として保温性に優れる
+ 多孔質材料としては、表面からの伝熱性が良く、ヒートシンクや熱交換器などへの応用できる
というように、工学的なアドバンテージも多いようです。
また数学的な観点から言っても、シンプルかつ美しく、ジャイロイドの3次元構造は以下の式で表されます。
Eq. (Gyroid-Expression)
ということで、前々から数値計算的な手法で3dプリントできるgcodeを出力できるソフトウェアを自作してみたい気持ちはいたのですが、最近、
しかも、既にGyroidのサンプルも選択することができて、言うことなしです。
ただし、公式では「Windows」と「MacOS」の2つのユーザーを念頭にバイナリ版がダウンロードできるだけで、「Linux」はサポート外のようです。
とはいえpythonで作成されていらっしゃる限りでは、pyqt系のGUI周りさえきちんと整えられたらLinuxでも十分動くはずですので、実際に手元のDebian OSで動作確認を行ってみます。
追記で、
G-coordinator
こちらは、Pipで一発導入できて、Matplotlibのような使い心地で利用することができます。
VSCodeなどのエディタからPythonコードを素早く修正しながら、CLI環境で開発を進めたいLinuxユーザーにはこちらの
gcoordinator
LinuxにG-coordinatorをインストール
最初に、GUIアプリである
モダンなLinuxの最新ディストーションであればなんでも動くと思いますが、現状の著者のデスクトップPCは以下の通りです。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
またグローバルインストールしたpython/pipは以下の通りです。
$ python --version
Python 3.8.6
$ pip --version
pip 23.1 from /home/*********/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip (python 3.8)
ちなみにDebian LinuxへのPython周りの環境構築は、
導入方法は以下の記事で紹介していますので、興味があれば合わせてお読みください。
後はG-coordinatorが動作するために必要なモジュール・ライブラリなどを一つ一つpythonへ入れていくだけです。
contourpy==1.0.7
cycler==0.11.0
fonttools==4.39.4
importlib-resources==5.12.0
kiwisolver==1.4.4
matplotlib==3.7.1
networkx==3.1
numpy==1.24.3
packaging==23.1
Pillow==9.5.0
PyOpenGL==3.1.6
pyparsing==3.0.9
PyQt5==5.15.9
PyQt5-Qt5==5.15.2
PyQt5-sip==12.12.1
pyqtgraph==0.13.2
python-dateutil==2.8.2
pytz==2023.3
Rtree==1.0.1
scipy==1.10.1
six==1.16.0
trimesh==3.21.7
tzdata==2023.3
zipp==3.15.0
...が、見ての通りで細かいので、個別にpipでインストールしていくか、
requirements.txt
$ pip install -r requirements.txt
一通り必須ライブラリなどが正常にインストールされたら、適当な場所にフォルダを作ってそこでG-coordinatorのプロジェクトごとソースコードをダウンロードしていきます。
$ git clone https://github.com/tomohiron907/G-coordinator.git
でプロジェクトフォルダがダウンロードできたら、既にきっと動く状態になっていますので、G-coordinatorを起動してみましょう。
$ cd G-coordinator/
$ cd src/
$ python main.py
で起動できたら以下のように画面が開きます。
1000x592

ここまでで開かいないようなら、実行中のpythonコンソールに発生しているエラーを頼りに対策してみてください。
また、pythonを実行する際には、ルートディレクトリが
src
#👇ルートディレクトリからでは設定ファイルなどのロードができない...
$ python src/main.py
ジャイロイドのサンプルコードを読み込む
インストールまでは完了しましたので、ちゃんと動作するかも確認しましょう。
G-coordinatorの画面が開いたら、
[Open File]
example
ここでは
gyroid.py
1167x1596

左のテキストコード編集の領域にソースコードが表示され、下にある
[Reroad]
モデルが出来上がったら、画面右下の
[Gcode Export]
850x534

使い方は至ってシンプルで明快ですが、使いこなすには数学的な知識とpythonプログラミングの学習がある程度必要になってきます。
ただ眺めるだけになってしまいますが、
gyroid.py
import numpy as np
import math
import print_settings
from path_generator import *
import matplotlib.pyplot as plt
a = 30
resolution = a*2
density = 3
x = np.linspace(-a , a , resolution)
x+=np.pi/2+0.5
y = np.linspace(-a , a , resolution)
y+=np.pi/2+0.5
z = np.linspace(-a , a , resolution*2)
X, Y, Z = np.meshgrid(x, y, z)
X /= density
Y /= density
Z /= density
#Equation for the Gyroid surface
equation = np.sin(X) * np.cos(Y) + np.sin(Y) * np.cos(Z) + np.sin(Z) * np.cos(X)
LAYER =5
def object_modeling():
full_object=[]
for height in range(resolution*2):
slice_plane = equation[:, :, height]
contours = plt.contour(x, y, slice_plane, levels=[0], colors='black')
for contour in contours.collections:
paths = contour.get_paths()
for path in paths:
points = path.vertices
x_coords = points[:, 0]
y_coords = points[:, 1]
z_coords = np.full_like(x_coords, height/2)
wall = Path(x_coords, y_coords, z_coords)
full_object.append(wall)
return full_object
この時点では著者も本格的にG-coordinatorを学習しているわけではありませんので、深くは追求しないのですが、
equation = np.sin(X) * np.cos(Y) + np.sin(Y) * np.cos(Z) + np.sin(Z) * np.cos(X)
の箇所で、ジャイロイド曲線の関数式を定義しており、
object_modeling
equation[:, :, height]
full_object
def object_modeling():
full_object=[]
for height in range(resolution*2):
slice_plane = equation[:, :, height]
contours = plt.contour(x, y, slice_plane, levels=[0], colors='black')
for contour in contours.collections:
paths = contour.get_paths()
for path in paths:
points = path.vertices
x_coords = points[:, 0]
y_coords = points[:, 1]
z_coords = np.full_like(x_coords, height/2)
wall = Path(x_coords, y_coords, z_coords)
full_object.append(wall)
return full_object
コツが分かれば、アイデア次第でいろいろな応用が効きそうです。
Linuxにgcoordinatorをインストール
(※この節の内容は2024年4月にアップデートしたものです。)
前節では、
G-coordinator
よりPythonコード作りに集中したい場合には、VSCodeなどの高機能テキストエディタからサッとスクリプトを実行すると作業効率も上がります。
G-coordinator
まずどこか適当なフォルダを作成し、そのディレクトリの中で
pyenv/virtualenv
gcoordinator
$ pyenv install 3.8.6
$ pyenv virtualenv 3.8.6 gc-env
$ pyenv versions
* 3.8.6 (set by /home/******/.pyenv/version)
3.8.6/envs/gc-env
gc-env
$ pyenv local gc-env
これで他のPython実行環境を汚染せずに、
gcoordinator
続けて、
gcoordinator
$ pip install gcoordinator
これでインストールはOK。
あとは以下のデモが動かせるか確認してみましょう。
demo.py
import gcoordinator as gc
import numpy as np
full_object = []
for height in range(100):
arg = np.linspace(0, 2*np.pi, 100)
x = 10 * np.cos(arg)
y = 10 * np.sin(arg)
z = np.full_like(x, (height+1) * 0.2)
wall = gc.Path(x, y, z)
full_object.append(wall)
gc.show(full_object)
では、以下をコンソールから実行し、3次元プロットを実行してみます。
$ python demo.py
600x402

Pythonソースコード重視の開発になるので多少慣れは必要ですが、VSCodeのIntelligenceなどが使えるため作業効率はかなり向上します。
まとめ
ということで紹介までですが、Pythonで3Dプリンターで出力できるGcodeを設計・出力できる
数値計算的な手法からモデリングするということは、より良いエンジニアリング造形を考える上で重要なことですので、一度pythonコードを動かしながら3Dプリンターを学習されてはいかがかと思います。
余談
「G-coordinator」および「gcoordinator」は、現状、3Dプリンター関連のオープンソース開発勢がほとんど海外の有志の方々で占められている中、貴重な日本人開発者ということもあり、個人的には是非ともこのすばらしいプロジェクトが活性化していかれることを願う次第であります。
Qiitaの記事を拝見する限り、何かしらG-coordinatorで3Dプリントした創作した創作物があるようならば、Twitterにて
#Gcoordinator(ハイフンなしに注意)