ほとんどのオープンソース3Dプリンターコントローラーで使用される手法には、2つの主要な特別な手順があります。
- 各線形gcodeセグメントを多数の非常に小さなサブセグメントに分割します(「セグメンテーション」)
- 基本的な三角法またはピタゴラスの定理を使用して、3つのタワーそれぞれの押出機の位置をキャリッジの高さに結び付け(「逆運動学」)、各小さなセグメントの目標位置を見つけます。
インバースキネマティクスは驚くほど簡単です。未知の3番目の長さを解くために、2つの既知の長さから仮想90度三角形が構築されます。
- 固定デルタアームの長さは、三角形の斜辺です。
- カラムジョイントとエンドエフェクタジョイントの間の水平距離は、ノズルのXY座標とカラムの固定位置から計算され、三角形の下辺の長さを決定します
- 三角形の上辺の長さは、ピタゴラスの定理によって前の2つから計算されます
- 必要なキャリッジ高さを取得するために、ノズルZの高さに上辺の長さが追加されます
ここで最も優れたオープンソースリファレンスは、Steve GraveのRostock Kinematicsドキュメント、rev3のダウンロード(https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ)です。
いくつかの関連する画像:
これらのインバースキネマティクス計算は、キャリッジごとに実行され、「キャリッジスペース」の目標位置が取得されます。これは、すべてのパスサブセグメントに対して実行されます。
これらのステップの結果は、プリンターの標準の線形パス補間手法に再度挿入できます。この場合、必要な比率と速度でステップが実行され、目的の直線運動と加速/速度プロファイルが生成されます。(それがどのように行われるかは別の質問です。)
正味の効果は、プリンタが一連の小さな「線形」キャリッジ移動(線形は時間に対して一定の速度を意味する)を通過して移動することです。直線的なエンドエフェクタの動き。
*(とにかく、ダイナミクスの制約に従うために、加速のスローダウンの前に一定の速度が適用されます。ここでも、それが別の問題の主題です。)
セグメンテーションは、ポリゴンを使用して円を近似するプロセスに非常に似ています。ファセットが十分に小さい場合、ポリゴンは適切な近似です。セグメンテーション率が高いほど、パス追跡エラーが少なくなります。円弧とデルタモーションパスの描画の主な概念上の違いは、デルタセグメンテーションを使用したいわゆる「ファセットアーク」が、描画に使用するX対Y座標ではなく、高さ対時間座標で構築されることです。コンピューター画面上の円。
デルタスタイルプリンターのサポートは、当初、デカルトプリンターの直線モーションパス専用に作成されたGRBLベースのモーションプランナーにボルトで固定されていたため、このシステムの大部分が使用されています。これは、完全な2次パス補間の実装と比較して、既存のコードベースへの変更が比較的最小限でした。
テクニックは長年にわたって進化してきました。また、代替アプローチがよく使用されます。たとえば、RepRapFirmwareのdc42フォークは、各ステップの後に次のステップの適切な時間を再計算することにより、セグメンテーションなしで正確なパス追跡を実行します。これは、機能的には、ポリゴンファセット数が非常に多い円を近似して、画面上のすべてのピクセルが独自のファセットを取得することと同じです。したがって、モーターの位置決め分解能が許す限り正確です。欠点は、このセグメンテーションフリーの手法はかなりプロセッサを集中的に使用するため、比較的高速なコントローラーでのみ機能し、現在のほとんどの既存の消費者/趣味プリンターに電力を供給する古い8ビットAtmega AVRでは機能しません。
他の手法も可能です。学術的なパラレルロボット制御の文献は、幅広いロボットメカニズムで機能する一般化された制御アルゴリズムを作成するための、数学的手法と複雑さのまったく別の世界です。オープンソースの3Dプリンターで使用するバージョンは、比較すると非常にシンプルでアプリケーション固有です。