How to Set Up an iDraw 2.0 Plotter and a Raspberry Pi for Headless Operation

iDraw 2.0 プロッタと Raspberry Pi をヘッドレス操作用にセットアップする方法

この記事は@Erez Zukerman によって寄稿されました

iDraw 2.0プロッタを使うのはとても楽しいのですが、ゆっくり動かしたいので、プロットに時間がかかることがあります。Inkscapeの標準設定をしばらく使っていましたが、プロッタが動作している間はメインのパソコンの電源を入れたままにして、プロッタに接続しておかなければなりませんでした。これは理想的とは言えませんでした。そこで、Raspberry Piを使った「ヘッドレス」設定ができないか試してみることにしました。
思ったよりずっと簡単で、しかも楽しかったです。これからやることは以下の通りです。
●Pi本体をセットアップします。
●CNCjsとその依存関係をインストールします。これを使って、GCodeをネットワーク経由で送信し、プロッタを実際に制御します。
●また、ログインしたり何もしなくても、Pi が起動するたびに CNCjs が自動的に起動するように設定します。
●SVG を GCode に変換する方法を理解する (ペン速度制御付き)。
このチュートリアルは、Linuxコマンドラインを使い慣れていることを前提としています。公開から数ヶ月、あるいは数年経ってからチュートリアルを進めている場合は、途中で様々なエラーに遭遇する可能性があります。これは仕方のないことです。執筆時点では、ここで紹介したシステムは私の環境では問題なく動作していました。
さあ始めましょう!

Piをセットアップする

このプロジェクト専用のPiを用意できれば理想的です。「プロッタコントローラ」として使えます。もし用意できなくても心配ありません。Pi自体は問題なく動作しますが、使い続けるうちに使い勝手が悪くなる可能性があります。
このプロジェクト専用にRaspberry Piを用意するもう一つの理由は、最初から使い慣れたデフォルト設定でセットアップできることです。そこで私はまさにそれを実行しました。32GBのSDカードを用意し、公式のRaspberry Pi Imagerツールを使ってRaspberry Pi OSをフラッシュ書き込みました。
このツールでできることの一つ、そして私がお勧めしたいのは、すぐに使えるデフォルト設定です。私はインストーラーを使って以下の設定を行いました。
●ユーザー名とパスワード
●プロッタコントローラのローカルホスト名(私の場合はplotter.local)
●公開SSHキー。マシンにすぐにSSH接続できるように
●WLAN SSID/パスワード(起動時にPiがネットワークに接続できるようにするため)
これらすべてを設定したら、あとはImagerに任せました。設定が完了したら、microSDカードを取り出してPiに挿入しました。初回起動時のみ、Piにキーボードとディスプレイを接続しましたが、必ずしも必要ではありませんでした。plotter.localというホスト名をネットワークに登録するのに少し時間がかかったので、キーボードとディスプレイを使って現在のIPアドレスを取得しました(ターミナルからifconfigを実行)。
SSHでマシンにログインし、次のステップであるCNCjsのインストールに進みました。

CNCjsをインストールする

名前から推測できるように、CNCjsはNode.jsベースです。そのため、まずNode.jsをインストールする必要があります。
●PiにSSH接続する
●NVMをインストールしましょう:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh |バッシュ
●ターミナルを終了し、再度sshでログインします。これによりNVMがロードされます。
●ではノードをインストールしましょう:
○nvm ノードのインストール
●素晴らしい!CNCjsをインストールしましょう。
○npm install -g cncjs
●ここまですべてうまくいっていると仮定して、CNCjsを一度だけ実行してみましょう。これにより、設定ファイル ~/.cncrc が作成されます。
○ホームディレクトリのコマンドラインからcncjsを実行します。
○Ctrl+Cで終了
●これで、真新しい ~/.cncrc が完成しました。おめでとうございます。次は、リモートアクセスを許可するように編集してみましょう。
○vi .cncrc
{
"allowRemoteAccess": 真、
"州": {
"allowAnonymousUsageDataCollection": false,
"checkForUpdates": true,
「コントローラー」: {
"例外": {
"ignoreErrors": false
}
}
},
"secret": あなたの秘密をここに
}
ここで追加する重要な行は、最初の行、allowRemoteAccess です。
●Pi上で再度cncjsを実行します。
●メインマシンのブラウザでplotter.local:8000にアクセスしてください。CNCjsが起動するはずです。

次に、プロッタを接続して、CNCjs が通信できるかどうかを確認します。
●iDraw 2.0 プロッタを Pi の USB ポートに接続します。
●プロッタの電源を入れます。
●CNCjs で、接続ウィジェットを見つけます (デフォルトでは左上隅)。
○ポートの下の更新ボタンを押します。
○ドロップダウンを開いてポートを選択します。

●「開く」をクリックします。すべてがうまくいけば、Gcodeコンソールにテキストが表示されます。

モーターを動かしてみましょう!


●「軸」ウィジェットを使って、各軸の+と-を押すことでモーターを移動できます。また、「キーパッドジョグ」を有効にして矢印キーでプロッタを動かすこともできます。ペンを差し込んでZ軸を下げると、高価なエッチ・ア・スケッチのような仕上がりになります。


一つ注意すべき点は、Y軸の0の位置は予想とは逆で、プロットエリアの一番下になるということです。これについては後ほど説明します。

起動時にCNCjsを実行する

次は、Raspberry Piが再起動するたびに、ユーザーが何もしなくてもこのスイートスポットに戻れるようにしたいと考えます。つまり、
●Pi への SSH セッションに戻り、Ctrl + C を押して CNCjs を終了します。
●ブラウザを更新して、本当に終了していることを確認してください(plotter.local:8000、これは上記で設定したホスト名だと仮定します)。これでエラーが解消されるはずです。
●Piにpm2をインストールします: npm install -g pm2
●pm2でCNCjsを起動します: pm2 start cncjs --name cncjs
●本当に起動して期待通りに動作するか確認します。しばらく待ってから plotter.local:8000 にアクセスし、ロードされるかどうかを確認します。
●起動スクリプトを作成します:pm2 startup。これによりsudoに必要なコマンドが出力されるので、それを実行します。
●プロセスリストを保存する: pm2 save
●Piを再起動して、動作を確認しましょう: sudo restart
●再起動するまで(3~5分ほど)待ってから、http://plotter.local:8000/ にアクセスして、CNCjs が再び起動するかどうかを確認してください。正しく実行されていれば、すぐに再起動するはずです。
勝利!もうすぐです。CNCjs の設定は完了です。ただし、何かをプロットするには GCode ファイルを入力する必要があります。CNCjs はネイティブで SVG を処理できないためです。

SVG を Gcode に変換するためのパイプラインを作成する

SVG を Gcode に変換するには、小さなコマンドライン ユーティリティである Juicy-Gcode を使用します。
ここでの大きな変更点は、用紙の右上ではなく左下を基準にゼロを設定することです。この変更には少し慣れが必要かもしれません。後でもう一度お知らせします。
●メインマシンで、オペレーティングシステム用の Juicy-Gcode リリースバイナリをダウンロードします: https://github.com/domoszlai/juicy-gcode/releases
●Juicy-Gcodeの設定は、「フレーバーファイル」と呼ばれるファイルに保存されます。これは単なるyamlファイルです。以下に、参考になるフレーバーファイルを示します。これをコピー&ペーストして、お使いのマシンのflavor.yamlに貼り付けてください。
開始: |
G21 ; 単位をミリメートルに設定
G17 ; 平面選択をXYに設定
G90 ; 絶対位置を設定
F600; 速度を600 mm/分に設定します。これは非常に遅いので、編集する必要があるかもしれません。
G00 Z0 ; ペンアップ
G92 X0 Y0 ; 現在の位置を0,0とみなします -- これは左下隅です
終了: |
G0Z0 ; ペンアップ
G00 X0 Y0 Z0
ツールン: |
G0Z6 ; ペンを紙に書く
ツールオフ: |
G0Z0 ; ペンアップ

このフレーバーファイルについて注意すべき重要な点がいくつかあります。
●プロッタの速度は毎分600mmですが、これはかなり遅いです。ペンや好みに応じて速度を上げる必要があるかもしれません。
●もう一つ注目すべき行は、G92で開始する行です。この行では、プロッタに「今いる場所がホームです」と指示しています。つまり、プロットをキャリブレーションするには、プロッタヘッドを手動で(そして優しく)用紙の左下隅に移動させる必要があります。
SVG で用紙サイズを正しく設定する必要があります。これは重要です。
Juicy-Gcode を実行するには、コマンドは次のようになります。
juicy-gcode -f flavor.yaml image.svg -o image.gcode
これを毎回入力するのは少々面倒なので、もう少し便利にするために次の小さなスクリプトを作成しました。
#!/bin/bash
# 使用方法: ./run-juicy.sh input.svg [速度]
# 速度が指定されていない場合は、デフォルトで600になります

# 少なくとも1つの引数が指定されているかどうかを確認します

[ "$#" -lt 1 ] || [ "$#" -gt 2 ]; の場合
echo "使用法: $0 <input-svg> [速度]"
echo "速度が指定されていない場合は、デフォルトで600になります"
出口1
フィ

入力ファイル="$1"

# 指定されていない場合はデフォルトの速度を600に設定します
速度="${2:-600}"

# フレーバーファイル名を構築する
フレーバーファイル="flavor-${speed}mm-speed.yaml"

# .svg 拡張子を .gcode に置き換えて出力ファイル名を生成します
出力ファイル="${入力ファイル%.*}.gcode"

# juicy-gcodeコマンドを実行する

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
実行速度が異なる複数のフレーバー ファイルを用意できるようになりました。フレーバー ファイルのファイル名に一致する数値を渡すことで、簡単に速度を指定できます。
GCode ファイルが作成されたので、アップロードしてプロットしてみましょう。

GCodeをアップロードしてプロットする

CNCjs では、GCode ファイルを入力する方法が 2 つあります。「Upload G-code」をクリックしてブラウザ経由でアップロードするか、監視ディレクトリを設定することができます (これにより、GCode ファイルがそこに読み込まれるたびにプロッタが実行を開始します)。
後者は理論上はクールに聞こえますが、実際にはあまり意味がありません。どのプロットも、紙を置いたり、ペンをセットしたりと、とにかく手作業での設定が必要です。なので、ブラウザ経由でファイルを手動でアップロードする方がはるかに合理的です。
これを実行したら、ズームアウトしてプレビューを確認します。

これにより、いくつかの重要な健全性チェックが可能になります。
●もう一度思い出してください。(…) プロットは紙の左下から始まるのです。
●X軸とY軸の両方の測定値が表示されます。少し時間を取って、プロット領域を超えていないか確認してください。もし超えている場合は、SVGに問題があります。プロットを開始しないでください。そうしないと、サーボモーターに悪影響が出ます。
ペンが紙の左下隅にあり、測定値が適切であれば、プロットする時間です!再生ボタンを押してプロッターの動作を確認してください。Raspberry Piとプロッターが動作している間、コンピューターをシャットダウンするか、別の部屋に移動しても構いません。さあ、勝利です!

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。