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を送信してプロッターを制御するためのツールです。
●CNCjsがPiの起動時に自動的に開始されるように設定し、ログインや操作なしで動作させる。
●SVGをGCodeに変換する方法を理解する(ペンスピード制御付き)。
このチュートリアルはLinuxのコマンドラインに慣れていることを前提としています。公開から数ヶ月や数年経ってから実行すると、さまざまなエラーに遭遇するかもしれませんが、それがこの分野の性質です。執筆時点では、説明したシステムはうまく動作しました。
始めましょう!

Piをセットアップする

このプロジェクト専用にPiを割り当てて「プロッターコントローラー」にするのがベストです。そうでなくても問題ありませんが、長期的には少し不便かもしれません。
このプロジェクト専用にPiを割り当てるもう一つの良い理由は、意味のあるデフォルト設定で最初からセットアップできることです。そこで私は32GBのSDカードを用意し、公式のRaspberry Pi Imagerツールを使ってRaspberry Pi OSを書き込みました。
このツールでできることの一つで、私がおすすめするのは、最初からいくつかのデフォルト設定を行うことです。インストーラーを使って以下の設定をしました:
●ユーザー名とパスワード
●プロッターコントローラー用のローカルホスト名(私の場合はplotter.local)
●すぐにSSHでマシンにアクセスできるように、公開SSHキー
●Piが起動時に私のネットワークに接続できるように、WLANのSSIDとパスワード
これらすべてを設定してから、Imagerに任せました。完了したら、microSDカードを取り出してPiに差し込みました。最初の起動時だけは、Piをキーボードとディスプレイに接続しましたが、これは必須ではありませんでした。私が選んだplotter.localというホスト名はネットワークに登録されるまで少し時間がかかったので、キーボードとディスプレイを使って現在のIPを取得しました(ターミナルでifconfigを実行して)。
マシンにSSH接続し、次のステップであるCNCjsのインストールに進みます。

CNCjsをインストールする

名前の通り、CNCjsはNodeベースです。まずNodeをインストールする必要があります。
●PiにSSHで接続します
●NVMをインストールしましょう:
○curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
●ターミナルを閉じて再度sshで接続し直します。これでNVMが読み込まれます。
●次にnodeをインストールします:
○nvm install node
●素晴らしい!CNCjsをインストールしましょう:
○npm install -g cncjs
●ここまで問題なければ、一度だけCNCjsを実行して設定ファイル~/.cncrcを作成します:
○ホームディレクトリのコマンドラインからcncjsを実行します
○Ctrl+Cで終了します
●これで新しい~/.cncrcファイルができました。おめでとうございます。リモートアクセスを許可するために編集しましょう:
○vi .cncrc
{
    "allowRemoteAccess": true,
    "state": {
        "allowAnonymousUsageDataCollection": false,
        "checkForUpdates": true,
        "controller": {
            "exception": {
                "ignoreErrors": false
            }
        }
    },
    "secret": YOUR_SECRET HERE
}
ここで追加すべき重要な行は最初のallowRemoteAccessです。
●Piで再度cncjsを実行します。
●メインマシンのブラウザでplotter.local:8000にアクセスします。CNCjsが表示されるはずです。

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

●Openをクリックします。うまくいけば、Gコードコンソールにテキストが表示されます。

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


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


注意点として、Y軸の0位置は予想と逆で、プロットエリアの下端に移動します。これは後で詳しく説明します。

CNCjsを起動時に自動実行させる

次に、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 reboot
●再起動が完了するまで3~5分ほど待ち、http://plotter.local:8000/ にアクセスしてCNCjsが再び起動しているか確認してください。正しくできていればすぐに戻ってきます。
やった!ほぼ準備完了です – CNCjsのセットアップは完了しました。しかし、何かをプロットするにはGCodeファイルを与える必要があります。SVGはネイティブに扱えません。

SVGをGcodeに変換するパイプラインを作成します

SVGをGcodeに変換するために、Juicy-Gcodeという小さなコマンドラインユーティリティを使います。
ここで大きな変更点は、紙の右上ではなく左下隅を基準にゼロを設定していることです!この変更には少し慣れが必要かもしれません。後でまたお知らせします。
●メインマシンで、あなたのOS用のJuicy-Gcodeリリースバイナリをダウンロードしてください:https://github.com/domoszlai/juicy-gcode/releases
●Juicy-Gcodeの設定は「フレーバーファイル」と呼ばれるものに保存されます。これは単なるyamlファイルです。ここに良い出発点となるフレーバーファイルがあります。これをコピーしてマシンのflavor.yamlに貼り付けてください:
begin: |
  G21 ; 単位をミリメートルに設定
  G17 ; XY平面選択を設定
  G90 ; 絶対位置決めを設定
  F600  ; 速度を600 mm/分に設定 -- これは非常に遅いので編集したいかもしれません
  G00 Z0 ; ペンを上げる
  G92 X0 Y0 ; 現在の位置を0,0とみなす -- これは左下隅です
end: |
  G0Z0 ; ペンを上げる
  G00 X0 Y0 Z0
toolon: |
  G0Z6 ; ペンを紙に下ろす
tooloff: |
  G0Z0 ; ペンを上げる
  
このフレーバーファイルについての重要なポイントがいくつかあります:
●プロッターの速度は600mm/分で動かしていますが、これは非常に遅いです。ペンや好みに応じて速度を上げたいかもしれません。
●もう一つ注目すべき行はG92で始まる行です。この行ではプロッターに「今いる場所がホームだ」と指示しています。つまり、プロットをキャリブレーションするために、プロッターのヘッドを手動で(優しく)紙の左下隅に移動させることを期待しています。
SVGで紙のサイズを正しく設定しておくことが重要です。
Juicy-Gcodeを実行するコマンドはこんな感じです:
juicy-gcode -f flavor.yaml image.svg -o image.gcode
毎回これを入力するのは少し面倒なので、便利にするためにこの小さなスクリプトを作りました:
#!/bin/bash
# 使い方: ./run-juicy.sh input.svg [speed]
# 速度が指定されていなければデフォルト600

# 引数が少なくとも1つあるか確認

if [ "$#" -lt 1 ] || [ "$#" -gt 2 ]; then
echo "使い方: $0 <input-svg> [speed]"
echo "速度が指定されていない場合、デフォルトは600です"
exit 1
fi

inputfile="$1"

# 速度が指定されていなければデフォルト600に設定
speed="${2:-600}"

# フレーバーファイル名を作成
flavor_file="flavor-${speed}mm-speed.yaml"

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

# juicy-gcodeコマンドを実行

juicy-gcode -f "$flavor_file" "$inputfile" -o "$outputfile"
複数の異なるフレーバーファイルを用意でき、それぞれ異なる実行速度を持ち、フレーバーファイル名に対応する数字を渡すことで速度を簡単に指定できます。
GCodeファイルが用意できたら、アップロードしてプロットの時間です!

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

CNCjsではGCodeファイルを取り込む方法が2つあります:「Upload G-code」をクリックしてブラウザ経由でアップロードするか、監視ディレクトリを設定してGCodeファイルが入ると自動的にプロッターが動き出すようにする方法です。
後者は理論上はかっこいいですが、あまり意味がありません。どのプロットも手動でのセットアップが必要です。紙を置き、ペンを取り付けるなど。なので、私にとってはブラウザ経由で手動でファイルをアップロードする方がずっと合理的です。
それができたら、プレビューを見るためにズームアウトしましょう。 

これにより、いくつかの重要な正当性チェックができます:
●プロットは紙の左下隅から始まることが再度強調されています(…)。
●X軸とY軸の両方の測定値を見ることができます。これらがプロット範囲を超えていないか確認するために、少し時間を取って読みましょう。もし超えている場合は、SVGに問題があります。プロットを開始しないでください。サーボモーターが非常に不機嫌になります。
ペンが紙の左下隅にあり、測定値が正しいと仮定すると、いよいよプロットの開始です!再生ボタンを押してプロッターの動きを見てみましょう。Piとプロッターが動作している間は、コンピューターの電源を切るか別の部屋に移動しても大丈夫です。勝利です!

ブログに戻る

コメントを残す

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