Klipper の調整 ADXL345を利用してInput Shaperの調整をしよう
最近の高速3Dプリンターでよく採用されている3Dプリンターファームウエア、Klipper。今voronという3Dプリンターのキットを組み立てているのですが、Klipperで利用可能な機能に、Input Shaperという機能があります。当ブログ過去最大のマニアック記事ですが学んでみるととても面白かったのでご紹介させていただきます。
Input Shapingって?
元々、Input Shapingは動作する機械の振動を抑制する技術です。動く機械が振動することは避けられませんが、その振動を制御する方法にはさまざまなアプローチがあります。パッと思いつくのは、物理的な構造を強固にすることですが、振動を能動的に抑制する方法の一つがInput Shapingです。よく音楽のノイズキャンセリングであるような、振動をモニタリングしてアクティブに打ち消すのはセンサーが必要だったりしますが、このInput Shapingでは共振の帯域と強度をあらかじめ測定しておき、1つの動作において命令前半で生じた振動を命令後半で打ち消すようにする技術です。産業機械では広く利用されているものになります。今まで知りませんでしたが、後半に詳細を書きましたのでよかったらぜひ。
Input Shaperの仕組みも全く同様で、3Dプリンターの共振を測定して、逆位相の制御を行って打ち消す感じの制御をしてくれます。これによりより高速な動作をしても振動が少なくなり、ゴーストの発生を抑制できます。Klipperのページを見ると「共振補正」の技術として詳細な方法が記載されています。実際に造形させて計測するというアナログではありますが、機材を必要とせず利用する方法も紹介されています。
なお、このInput Shaperは現在は主にKlipperファームウェアで利用されている機能ですが、実はMarlinでも2022年冬のver2.1.2からM593というコマンドで規定されましたので、今後は使えるようになってくる可能性はあります。(処理速度的にどうなのかはわかりませんが)
ちなみにAnkermake M5の場合、ファームウエアはMarlin 2.0系列なのでこのコマンドには対応していませんが、最新のファームウエア内では似たような制御を行い高速動作できるようになっています。このAnkermakeの高速モードは純正ソフトだけでなくPrusaslicerでも利用できますので、詳細はこちらも読んでもらえると嬉しいです。
Input Shaperの注意点
注意点も一つあります。速度にもよりますが、Input Shaperは振動が意図したものかそうでないものかを判断することはできません。あくまで特定の周波数の動作に対してそれを打ち消す動作を行います。従って造形するモデルに細かい模様等があった場合、InputShaperによって打ち消される可能性があります。今回これをちゃんと調べて初めて知りましたが、この場合、表現力と速度が両立しない可能性があるので、複雑な細かい模様等が入っているモデルなどでは速度や加速度を下げる必要があるかもしれません。・・・仕組みを知るって大事ですね。
Klipperでの設定方法 正確に測定するためにADXL345を利用
現状、Input Shaperを使うためには、まずKlipperファームウェアが使えることが前提です。Klipperは、Raspberry PiなどのコンピューターとプリンターのマイコンボードをUSBで接続することで、高速かつ高精度なプリントを実現するファームウェアです。利用できる3Dプリンターは限られますが、もしよかったら調べてみてください。今回は測定にADXL345という加速度計を用いています。
測りたいのは造形するツールヘッドの振動なのでそこにがっちり固定します。加速度計に取り付けられたXY方向があっていればOKです。Klipperへの設置や関連ソフトウエアのインストールについてはKlipperの公式に書かれています。
ここに書いてある通り、標準のKlipper状態では関連ソフトはインストールされていないのでライブラリとともにインストールしておいてくださいね。
私は今回SIBOORのvoronキットを購入しており、関連ソフトを含めインストールもされていてKlipperの設定は簡単でしたが、自分で扱えるようにしておかないといざというとき困りますよね!基本的なことですが、Klipperはラズベリーパイを利用したLinuxベースのファームウエアで、ソフトウエアは主にSSH接続してネットワーク経由でダウンロード、インストールをしていきます。SIBOORのキットの場合はあまりSSH接続をして操作する機会がないまま組み立てられるので、これを機に学ぶといつか役に立つ・・・はず?
なお当方のPrinter.cfg設定は基本的には下のほうにあるMellowの公式ドキュメント内通りにしています。
[mcu host]
seri6l: /tmp/klipper_host_mcu
[adxl345]
cs_pin: host:None
spi_bus: spidev0.0
[resonance_tester]
accel_chip: adxl345
probe_points:
60, 60, 30 # an example ベッドの中央付近の座標に変えてください
SIBOORのvoronを購入された場合はラズパイではなく、ラズパイ互換機とMCUがセットになったFlygeminiというボードが入っています。これは滅茶苦茶使い勝手が良くておススメです!私の物はFlygmemini V3でした。メモリも十分あり3Dプリンター用途で困ることはないんじゃないかな・・・。このボードについての詳細はこちらのページになります。元ドキュメントが中国語ですが、Chromeなんかだと右上で日本語になるはず。
この中のADXL345の設定については上記からもリンクがありますがこちらになります。配線方法なんかも書いてあり、とても分かりやすいです!Mellowすごい!Linuxにあまり明るくない私のような人間でも大丈夫ですのでやってみてください。関連ツールが入っていれば接続、設定後に”ACCELEROMETER_QUERY”を実行すれば値が返ってきます。
無事に値が返ってくれば”SHAPER_CALIBRATE”を実行。ツールヘッドが振動し始めてX,Yとも自動的に校正してくれます。この操作をやるときは実際のプリント環境に近づけておきましょう(設置状況、ツールヘッドの状態など)。もし特定の軸だけ測定したければ”SHAPER_CALIBRATE AXIS=X”等にすれば実行できます。
全部行われるとセーブしてね、と言われるのでいわれるがままセーブすれば完了です。
また、マニュアルにも書かれていますがこの校正動作は機械には負担になるのでむやみにたくさんやらないほうがいいです。ちゃんと環境整えて行えば一回で十分なのではないかと思います。
当方の問題 ADXL345には不良品がある
まず初めに、この問題の解決にはTwitterでお世話になっている、私がVoronを購入、製作するにあたって色々力を貸していただいている@YuTR0Nさんの力をお借りしています。いつもありがとうございます!
さて、ADXL345はSPIで通信可能な加速度センサーで安価で入手しやすいため、Input Shaperによく利用されています。が、どうやら不良品も多そうです。私の場合、SIBOORから受け取ったものと、追加で購入した2つのうち1つ、つまり2/3が不良品でした。結線等は問題ないことを確認しており、3つのチップはそれぞれ「結線不良エラー」「値がゼロしか返ってこない」「正常動作」とバリエーションも多かったです。
低価格なので仕方ないところはありますが、必要があればもう少し高価なMellow純正のチップをAliexpressで検討するのがいいと思います。ここで躓いている方は海外でも散見されておりますのでご注意を!
私の場合は接続不良で理由が分からず、相談して別サンプルを買うことで問題が解決しました。不良などないことをYuTR0Nさんに確認してもらったりした次第です。
うまくいかないときは
個人的にはうまくいかないときはまずは下記を順に確認するのがいいんじゃないかと思います。
もし不足があったらご指摘ください!
- 関連ソフトウエアnumpy等がSSH経由でインストールされていること(エラー内容をチェック)
- ADXL345が正しく接続されていること(マニュアル通りの配線が出来ているかどうか)
- ADXL345が正常に動作していること(上記ACCELEROMETER_QUERYを実施して値が返ってくる)
- SHAPER_CALIBRATEできちんとXYそれぞれツールヘッドが動き始めるか
- 値が出た後セーブして、リスタートしたか
- Printer.cfg内にInput shaperの記述が追加されたか
私のように3で躓いた場合は、ADXL345そのものの不良を疑うのが妥当ではないかと私は思います。ぜひ参考にしてみて下さい。
SIBOOR voron0.2の結果
さて、では実際に自分の手元のSIBOOR製キットの voron0.2の値です。上の事を行うと、一時ファイルに結果のCSVが保存されます。3Dプリンターに設定するだけであれば上の手順までで問題ありませんが、よく皆さんが出されている曲線を見たい場合は別な手順が必要になります。また、大事なのはプリンターの電源を切ると計算結果のCSVが消えてしまうため、測定と同時に取り出しまで行う必要があるということです。
具体的には下記のとおりです。SSH経由やSCPでファイルをやり取りするのは慣れておくと今後もいつかきっと?役立つと思うので是非習得しておきましょう。手順は2つです。
1についてはSSHでログイン(Flygmemini V3ボードの場合は接続先はローカルのIPアドレス、ユーザー名はfly、パスワードmellow)してから、以下のコマンドでpngを作成します。アスタリスク部分(csvファイルの名前)は日時で異なりますので確認して変更してください。分からなかったら手順2で接続してファイル名を確認しておいてもOKです。SSH接続ではMS-DOS時代の「cd」や「dir」といったコマンドが使えるので、Klipper/Scripts フォルダの下記Pythonを実行します。コマンドは基本的に走らせるプログラム、(今回はないけどプログラムのオプション)、入力ファイル、出力オプション(この場合だと-o)、出力ファイル、の順で並べます。こう言った記載は多くで共通なので覚えておきましょう。
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
処理に若干の時間がかかりますが、これでtmpフォルダにこのpngが出力されるはずです。
2についてはWinSCPで3Dプリンターに接続し、ルートフォルダ下のtmp内に出来上がった上記のpngを探してダウンロードしてくれば大丈夫です。
ダウンロード後に開くと見慣れた?グラフが出てきました。実線が計測された振動、破線はそれを打ち消すための曲線を表します。右上に説明があり、最下段に推奨される補正が何か表示されているのがわかります。共振の曲線が単純であればあるほど、ZV曲線が推奨されます。いずれにせよ、打ち消された後に想定される共振が水色の実線で、非常に低いレベルになっていることがわかると思います。
なお、今回のものは主観の問題ですがY軸の曲線があまりきれいではありません。思い当たる原因としてはY軸はガントリーごと振動するのできれいに出にくい、また、計測を扉や箱が開いた状態で行ったから、があると思います。またChipさんより「Y軸のほうが絶対値が少ないせいもあるよ」と教えていただきました。確かにその影響もありそうです。ありがとうございます!!
さて実際X軸はZV(Zero Vibration) シェーパー、Y軸はMZVシェーパーが推奨されているのがわかります。これでダメだとEI(Extra Insensitive)シェーパーになりますが補正精度は落ちるのかなと思います。HUMPというのはEIの波形に追加の振幅をつけるもので、2つつける、3つつけるというニュアンスになります。(この論文を参照しました)
ZV shaperって? Input Shaperの基礎は1950年代
ちょっと小難しい話且つ、私も専門ではないので内容を保証しかねますが、このZVシェーパーというのはInput shapingの基本で、Smithらの研究( O. J. M. Smith, “Posicast Control of Damped Oscillatory System,” Proc. the IRE, Vol. 45, No. 9, pp. 1249-1255, 1957. )に基づいているようです。機械制御に使われる理論としては1989年頃からっぽいですね。MZVはマルチかな?ZVDシェーパーなども検索すると出てくるのでよくわかりません・・・。ここが私の限界です。二つのZVシェーパーを使って振動を制御する方法も2011年に紹介されており、関係があるのかも?
なお、上記の通りこの振動制御技術の元の論文、1950年代です。当時はパソコンがなかったので実装困難だったようですが・・・産業機械の色々な歴史と知恵が3Dプリンターにも活きていると考えると感慨深いですね。知ってらっしゃる方には当たり前の理論なのかもしれませんが、私は40年以上生きていて初めてそういう制御があることも知りました。単純に私の知識欲のためだけに調べただけですが参考になれば幸いです(笑)。
なお、今回のグラフから読むInput Shaperの理論や実際、読み方などの詳細についてはこの動画が一番わかりやすかったです。英語ではありますが図も多いのでよかったらぜひ見てみてください。
ということで、このブログかつてないマニアックさで記事を書きました。楽しかったけど書くのは大変でしたね。趣味なのでいいんですが・・・。読んでいただいた方、楽しんでいただけましたか?でしたらうれしいです!
最後までお読みいただき本当に、ありがとうございました!
ディスカッション
コメント一覧
まだ、コメントがありません