ドキュメント
CAM加工カーネル
製造ジョブから NC および証拠まで: プランニング、カッター、残量ブラケット付きのボクセル ストック、認定された衝突チェック。
英語から自動翻訳されています。 英語の原文を見る
CAM カーネルとは
CAM カーネル packages/core/src/cam/kernel (20 個のソース ファイル、約 5 260 行) は、NC を加工するための改訂された製造ジョブとその NC に関する証拠を取得します。カッターと切削データを選択し、CAD 機能から操作を計画し、戦略を実行し、G コードをポストし、体積ストックに対して独立して NC を再生し、ツール アセンブリの動作の衝突をチェックします。そのアルゴリズムの正体は、 cadcamfun-cam-kernel@1.
| モジュール | 役割 |
|---|---|
| 材料 | ワークピースのグレードとその被削性データ |
| カッター | ツール アセンブリとデフォルト ライブラリ(70 カッター) |
| 切断データ | 材料内のカッターの速度、送り、深さ、荷重、たわみ |
| プランナー | CAD 機能 → カッターによる順序付けされた操作 |
| 実行する | 準備/実行: 戦略、投稿、独立した NC リプレイ、ストック系統、クレームおよびリリース レベル |
| 運動学、頭 | trunnion table (AC / BC) and tilting head (B about Y) |
| 組み立て | 3D ツール アセンブリ (カッティング ゾーン、シャンク、ホルダー) のプロファイルとその回転体 |
| 衝突 | 関節の動きの継続的なチェック: 認定されたクリア、衝突、または未解決 |
| モーション | 同時5軸:ロケーション→テーブルポーズ、各動作を分割して確認 |
| ストック | 残存体積ブラケットを備えたボクセルとしての体積ストック |
| マシンクリアランス | nC の移動ごとにホルダーとシャンクをテーブルに押し付ける |
| 凸型 | 凸包間の正確な距離 (GJK) |
export const prepareJob: (job: ManufacturingJob) => CamResult<PreparedJob>
export const executeJob: (prepared: PreparedJob) => CamResult<CamArtifact>
export const runJob: (job: ManufacturingJob) => CamResult<CamArtifact> // prepare, then execute
export const planOnly: (job: ManufacturingJob) => CamResult<{ operations; notes; unmachined }>
export const KERNEL_ALGORITHM = "cadcamfun-cam-kernel@1" 機能ベースの計画
プランナーは、CAM プログラマーが行うように、パラメトリック履歴が実際に持つ特徴からプリズム パーツをシーケンスします。
- 株の上面を向く
- 輪郭の周りとポケットの内側が粗い(適応または輪郭、壁の余裕がある)
- ザグリ、スポットドリリング、ドリリングまたはヘリカルボーリング、皿穴、ねじ切りフライス加工
- 壁を仕上げる
- バリ取りが必要な場合は、2D 面取りで上端を壊します
- 3D 自由形状ボディの荒加工と仕上げ加工
フィーチャ履歴のないボディ(メッシュ、プリミティブのブール値、スカルプト パーツ)は、3D サーフェス ストラテジーを使用して加工されます。計画ではツールとリージョンのみを選択します。切断データは、ジョブの実行時に操作ごとに計算されます。 44 × 44 × 11 mm POM-C ブランクでの実際の実行では、次の 3 つの操作が計画されました。 face フェイスミル付き-50、 surface-rough flat-16 と surface-finish ボール付き-10、としてリリース verified-program サイクルタイムは 149 秒です。その走りが引き込まれます ネイティブ製造.
カッターとツールアセンブリ
The default library has 70 cutters of nine kinds: flat (Ø1–16, plus aluminium ZrN variants), ball (Ø1–10), bull nose, face mill, spot drill, chamfer mill, engraver, thread mills (P0.5–P2) and drills. A cutter's assembly is its half-section profile from the tip, split into cutting zone, shank and holder.
{"id":"flat-6","name":"End mill Ø6 3F carbide ALTIN","kind":"flat","diameter":6,"flutes":3,
"material":"carbide","coating":"altin","fluteLength":15,"shankDiameter":6,"stickout":29,
"holder":{"diameter":40,"length":50}}
{"points":[{"r":0,"z":0},{"r":3,"z":0},{"r":3,"z":15},{"r":3,"z":29},{"r":20,"z":29},{"r":20,"z":79},{"r":0,"z":79}],
"parts":["cutting","cutting","shank","holder","holder","holder"],"length":79,"assumedHolder":false} ボクセルストックと残量ブラケット
ストックはボクセル グリッドです。一連の動きの後、各ボクセルはマテリアルになり、 確実に削除されました (立方体全体がカッター内のサンプリングされた位置にありました) または 削除可能 (その立方体はカッターの拡張範囲内に入りました:対角線の半分とサンプル間隔の半分)。したがって、残りのボリュームはブラケットです。除去できない可能性のある物質は確実に残りますが、確実に除去できない物質は残る可能性があります。ボクセルは、サンプリングされたカッターがそれをカバーしない限り、削除されたとは決して呼ばれません。傾斜工具は先端点ごとに軸を保持するため、5 軸スイープでは同じ 2 つのテストが使用されます。
export const voxelStock: (min: Vec3, max: Vec3, voxel: number) => VoxelStock // sample step = voxel / 2
export const removeTipPath: (stock: VoxelStock, cutter: Cutter, path: ReadonlyArray<Vec3>, axes?: ReadonlyArray<Vec3>) => void
export const remainingVolume: (stock: VoxelStock) => { lower: number; upper: number } const s = voxelStock({ x: 0, y: 0, z: -10 }, { x: 40, y: 30, z: 0 }, 0.5)
// 80 × 60 × 20 = 96 000 voxels, step 0.25
removeTipPath(s, flat6, path) // slot y = 15, x 8→32, then the ring 8..32 × 8..22, all at z −3
remainingVolume(s) // {"lower":9749.5,"upper":10740} 124 ms
// stock 12 000 mm³: between 1 260 and 2 250.5 mm³ removed ブラケットはボクセル サイズとともに狭くなります。ボクセルを半分にすると、すべての壁に沿ったスラック バンドが半分になります。
継続的な衝突チェック
コントローラーは 2 点間でジョイントを直線的に移動させるため、それらの間で衝突が発生する可能性があります。 checkMotion checks the whole move: probes (the holder and shank, each non-cutting profile segment enclosed by a capsule) against obstacles (the table envelope and the part box). The lower bound is a Lipschitz argument: a signed distance changes by at most the displacement of the moving solid, so the move is bisected until every interval is proven clear by margin、オーバーラップがサンプリングされるか、深さ (12) が不足します。
| 評決 | 意味 |
|---|---|
| クリア | すべての間隔で、クリアランスの下限は少なくともマージンです |
| 衝突 | サンプリングされたプローブ ポイントは障害物の内側にあります。 at は移動途中の場所を示します (0 から 1) |
| 未解決 | 深さ内で間隔が明確であることは証明できず、重なり合いも見つかりませんでした |
// rapid along X at nose z 60
{"verdict":"clear","clearance":26.875,"evaluations":2}
// plunge from nose z 60 to nose z 0
{"verdict":"collision","clearance":-10,"at":1,"evaluations":2}
// standing poses
z 60 {"verdict":"clear","clearance":46.875,"evaluations":2}
z 20 {"verdict":"clear","clearance":6.875,"evaluations":2}
z 10 {"verdict":"unresolved","clearance":-3.125,"evaluations":4097}
z 5 {"verdict":"collision","clearance":-5,"at":0,"evaluations":1} ラピッドレポートは、静止状態の 26.875 ではなく、46.875 をレポートします。これは、移動チェックによって下限が証明されるためです。つまり、それ以上細分化されなかった各間隔の変位が減算されます。鼻-z-10のポーズがその理由を示しています unresolved 存在します: 証明された下限は負ですが (エンベロープが重なっている可能性があります)、サンプル ポイントが内部にないため、4 097 の評価後、チェッカーは推測ではなく証明できることを報告します。エンベロープは保守的です。カプセルはそのホルダー セグメントを囲むため、実際のツールが近づくだけであるオーバーラップを報告できます。
トラブルシューティング
| 症状 | 原因 | 修理 |
|---|---|---|
| ジョブのステータスが失敗しました: サポートされていないジョブ スキーマのバージョン | 別のカーネル スキーマ用にジョブが構築されました | 現在の schemaVersion でジョブを再構築します |
| 残量ブラケットワイド | 特徴に対してボクセルが粗すぎます | より小さいボクセルを使用します。たるみは各壁に沿って約 1 ボクセルです |
| 急流での衝突 | ホルダーまたはシャンクのエンベロープがテーブルまたは部品に到達する | クリアランスプレーンを上げるか、突き出しを短くしてください |
| 長い回転移動で未解決 | リプシッツ境界は回転中心から遠く離れたところでは弱い | 手を分割するか、チェッカーが証明できるマージンを受け入れる |
| 予期せぬカッターで計画された操作 | カッターの材質と剛性の適合性 | 必要なカッターを備えたツールライブラリを渡します |