5

CNCミルのドライバーを実装していますが、Gコードアークコマンドの実装に問題があります。

中点円アルゴリズムの実装をいくつか見つけましたが、そのままでは実際には使用できません。

私が見つけた中点円アルゴの問題は、それが2Dであり、すべての八分円を同時に描画する一方で、開始点、終了点、および中心点によって与えられる3Dパスを通る連続したステップが必要なことです。

浮動小数点演算を使用して、ブレゼンハムの線描画アルゴリズムに相当する優れた多次元を見つけました。おそらく、弧を描くために同様のことが存在しますか?

たくさんの考えと実験を使ってこのアルゴを思い通りに曲げることができるかもしれませんが、円弧を描くことは未解決の問題ではなく、CNCマシンは以前に製造されたものなので、エレガントな解決策はすでに存在するのでしょうか?

4

3 に答える 3

1

あまりスマートではない 2D カッターの DXF ファイルを処理するために使用される私のdxftools python パッケージには、円弧を 2D の線分に分割する機能があります。このコードを使用してから、3D 座標変換を使用して、これを 3D 空間に任意に配置できます。座標変換の例は、私のpy-stlパッケージにあります。

于 2012-04-19T17:45:08.207 に答える
1

LinuxCNCでは、位置生成はステップ生成から分離されています。位置生成ループでは、システムは現在のプリミティブ (線またはらせん) に沿って既に移動した距離を追跡し、簡単な式を使用して、そのプリミティブに沿った距離 D の位置を取得します。(通常、これはミリ秒ごとに 1 回行われます)。この位置は、サーボ、ハードウェア ステップ生成、またはソフトウェア ステップ生成のいずれかによって、さまざまな方法で使用できます。

ソフトウェア ステップ生成システムでは、古いコマンド位置と新しいコマンド位置の差が各軸に沿って決定され、これを使用して、直接デジタル合成法 (DDS) を使用してデジタル波形発生器のレートが更新されます。次に、より高いレート (通常は 20 ~ 50 マイクロ秒ごと) で、DDS は各軸について、その時点でステップを生成する必要があるかどうかを決定します。

これは、説明している設計とは異なりますが、より柔軟な設計です。たとえば、位置生成をステップ生成から分離することで、ステップ生成を修正せずに位置生成コードのブレンディング アルゴリズムを修正できます。また、ソフトウェア ステップ生成をハードウェア ステップ生成に置き換えたり、サーボ制御を PID などのアルゴリズムに置き換えることができます。

あなたの設計では、Roland が説明したようにらせん状の弧を線分にダイシングし、それらを線のみを理解するステップ生成コードへの入力として使用するだけで、上記の方法に近づけることができます。ある意味では、これは LinuxCNC が行うことと大差ありませんが、カーブ プリミティブが時間ではなく距離に従ってサンプリングされる点が異なります。

于 2014-05-03T20:54:41.773 に答える