【pythonで動くG-codeビルダー】G-coordinator/gcoordinatorをLinuxにインストール&動作確認してみる


※ 当ページには【広告/PR】を含む場合があります。
2023/06/13
2024/04/04
【pythonで動くG-codeビルダー】シンプルなシリンダー形状のサンプルでG-coordinatorの使い方を学習する
蛸壺の中の工作室|G-coordinatorをLinuxにインストール&動作確認してみる

普段は「Cura」・「Prusa Slicer」のような3Dプリンター専用のスライサーに任せっきりでほどんどのユーザーが気にも止めないかも知れませんが、インフィルに選択できる構造に
「ジャイロイド(Gyroid)」と呼ばれるトポロジカルな構造が選択できます。

参考|3Dプリンター向け設計ソフト nTopologyによるジャイロイド構造の生成

おそらく「なんか強そう」という感じで、なんとなく使われている方も多いかも知れませんが、以下のように非常に興味深い特長を備えています。

            + モデルの強度を維持しながらも軽量化できる
+ モデルの(単位立方体あたりの)表面積を大きくできる
+ 他のインフィル構造と比較して、内部の応力集中を軽減できる
+ 外部の系へは熱断熱性が高く、断熱材として保温性に優れる
+ 多孔質材料としては、表面からの伝熱性が良く、ヒートシンクや熱交換器などへの応用できる
        
というように、工学的なアドバンテージも多いようです。

また数学的な観点から言っても、シンプルかつ美しく、ジャイロイドの3次元構造は以下の式で表されます。

sin(x)cos(y)+sin(y)cos(z)+sin(z)cos(x)=0\displaystyle { sin(x) cos(y) + sin(y) cos(z) + sin(z) cos(x) = 0 }Eq. (Gyroid-Expression)

ということで、前々から数値計算的な手法で3dプリントできるgcodeを出力できるソフトウェアを自作してみたい気持ちはいたのですが、最近、
「G-coordinator」なるオープンソースプロジェクトを目に止め、思い描いていたツールそのものを既に作られている方がいらっしゃることを知りました。

しかも、既にGyroidのサンプルも選択することができて、言うことなしです。

G-coordinator - GitHub

ただし、公式では「Windows」と「MacOS」の2つのユーザーを念頭にバイナリ版がダウンロードできるだけで、「Linux」はサポート外のようです。

とはいえpythonで作成されていらっしゃる限りでは、pyqt系のGUI周りさえきちんと整えられたらLinuxでも十分動くはずですので、実際に手元のDebian OSで動作確認を行ってみます。

追記で、
G-coordinatorはGUIからgcodeファイルを作成するアプリケーションですが、そのコアライブラリには別プロジェクトで管理されている、『gcoordinator』と言うものが存在しているようです。

gcoordinator - GitHub

こちらは、Pipで一発導入できて、Matplotlibのような使い心地で利用することができます。

VSCodeなどのエディタからPythonコードを素早く修正しながら、CLI環境で開発を進めたいLinuxユーザーにはこちらの
gcoordinatorの利用がおすすめです。


Ender-3

【Creality】プラットフォームシート 235*235mm

【TINMORRY】PLA フィラメント ブラック 1.75mm 1Kg

LinuxにG-coordinatorをインストール

最初に、GUIアプリである「G-coordinator」のLinuxへのインストール手順を紹介します。

モダンな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周りの環境構築は、「pyenv」からが便利です。

導入方法は以下の記事で紹介していますので、興味があれば合わせてお読みください。

合同会社タコスキングダム|タコツボの中の工作室
DebianからでもLinuxbrew(Homobrew on Linux)でサクッとpyenvを導入してPython環境を整える

Linuxへpython開発環境を整える上でオススメの「LinuxBrew(HomeBrew on Linux)」を使ったpyenvの導入方法を紹介します。

後は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インストールしていくかを検討してみてください。

            $ pip install -r requirements.txt
        
参考|Python, pipでrequirements.txtを使ってパッケージ一括インストール

一通り必須ライブラリなどが正常にインストールされたら、適当な場所にフォルダを作ってそこでG-coordinatorのプロジェクトごとソースコードをダウンロードしていきます。

            $ git clone https://github.com/tomohiron907/G-coordinator.git
        
でプロジェクトフォルダがダウンロードできたら、既にきっと動く状態になっていますので、G-coordinatorを起動してみましょう。

            $ cd G-coordinator/
$ cd src/
$ python main.py
        
で起動できたら以下のように画面が開きます。

合同会社タコスキングダム|蛸壺の中の工作室

ここまでで開かいないようなら、実行中のpythonコンソールに発生しているエラーを頼りに対策してみてください。

また、pythonを実行する際には、ルートディレクトリが
srcである必要があります。以下では動かないので注意しましょう。

            #👇ルートディレクトリからでは設定ファイルなどのロードができない...
$ python src/main.py
        

Ender-3

【Creality】プラットフォームシート 235*235mm

【TINMORRY】PLA フィラメント ブラック 1.75mm 1Kg

ジャイロイドのサンプルコードを読み込む

インストールまでは完了しましたので、ちゃんと動作するかも確認しましょう。

G-coordinatorの画面が開いたら、
[Open File]exampleフォルダに収録されているpythonコードを開きます。

ここでは
gyroid.pyのサンプルコードを開いてみます。

合同会社タコスキングダム|蛸壺の中の工作室

左のテキストコード編集の領域にソースコードが表示され、下にある
[Reroad]ボタンを押すことで右側のG-codeのシミュレーターに反映することができます。

モデルが出来上がったら、画面右下の
[Gcode Export]ボタンを押して、gcode形式に変換することができます。

合同会社タコスキングダム|蛸壺の中の工作室

使い方は至ってシンプルで明快ですが、使いこなすには数学的な知識と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メソッドからジャイロイド曲線上のxy断面(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
        
コツが分かれば、アイデア次第でいろいろな応用が効きそうです。


Ender-3

【Creality】プラットフォームシート 235*235mm

【TINMORRY】PLA フィラメント ブラック 1.75mm 1Kg

Linuxにgcoordinatorをインストール

(※この節の内容は2024年4月にアップデートしたものです。)

前節では、
G-coordinatorの扱い方をダイジェストで紹介してみました。

よりPythonコード作りに集中したい場合には、VSCodeなどの高機能テキストエディタからサッとスクリプトを実行すると作業効率も上がります。

G-coordinatorのCLI版(というか中身そのもの)と言えるのが、「gcoordinator」です。

まずどこか適当なフォルダを作成し、そのディレクトリの中で
pyenv/virtualenvから、gcoordinator専用のPython環境作りを先に行います。

            $ 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専用の開発環境がvirtualenvによって構築されました。

続けて、
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
        

合同会社タコスキングダム|蛸壺の中の工作室

Pythonソースコード重視の開発になるので多少慣れは必要ですが、VSCodeのIntelligenceなどが使えるため作業効率はかなり向上します。


Ender-3

【Creality】プラットフォームシート 235*235mm

【TINMORRY】PLA フィラメント ブラック 1.75mm 1Kg

まとめ

ということで紹介までですが、Pythonで3Dプリンターで出力できるGcodeを設計・出力できる「G-coordinator」と「gcoordinator」のLinuxへの導入手順を紹介してみました。

数値計算的な手法からモデリングするということは、より良いエンジニアリング造形を考える上で重要なことですので、一度pythonコードを動かしながら3Dプリンターを学習されてはいかがかと思います。

余談

「G-coordinator」および「gcoordinator」は、現状、3Dプリンター関連のオープンソース開発勢がほとんど海外の有志の方々で占められている中、貴重な日本人開発者ということもあり、個人的には是非ともこのすばらしいプロジェクトが活性化していかれることを願う次第であります。

Qiitaの記事を拝見する限り、何かしらG-coordinatorで3Dプリントした創作した創作物があるようならば、Twitterにて
#Gcoordinator(ハイフンなしに注意)で積極的にツイートしてほしいとの意向が書かれているようですので、ささやかながらここでも言及させて頂きます。

参考サイト

G-coordinatorで3Dプリント#1

G-coordinatorで3Dプリント#2

G-coordinatorで3Dプリント#3

記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。