main,2026-09-30 讀取);底殼的 STEP 模型 cnc-milled-bottom-shell-al 與它的工程圖。
antmicro jetson-agx-thor-baseboard-enclosure、cnc-milled-bottom-shell-al在原案例裡,一個 AI 代理替 Antmicro 開源機殼的四個鋁件自己寫 CAM、每件排兩次裝夾,在 HiNC 以 0.25 mm 的格子驗收。這一案只取底殼。OP10 用虎鉗夾住 175 × 117 × 49 mm 料塊底下 8.5 mm 的料頭,在換刀處切成五支程式做內側:面銑與外輪廓、用 T 型槽刀切外溝、腔體連同內牆、凸台與墊片、清角,以及兩個凸台之間的窄縫。OP20 把零件翻面,一支程式端掉料頭、把外輪廓收到 Z−6,用 D6 球刀做兩條長邊的 49° 倒角,鑽 7 × Ø2.7、4 × Ø3.3 與 1 × Ø5.1 的孔,再用 D2 球刀做 7 個沉頭。全都是一般三軸程式:G54、G43、G81,沒有 RTCP,也沒有斜面加工。
代理在這台機上放了一個常見的幾何誤差:X 與 Y 行程不垂直,差 0.003°,也就是 52.36 µrad,ISO 230-1 所說 X、Y 運動之間的垂直度。它落在直線軸垂直度常見範圍(每 300 mm 5–20 µm)的中上段;Holub 等人用雷射追蹤儀量一台三軸立式加工中心,補償前是 24.4 µrad(0.0014°),這裡約是它的 2.1 倍。Y 滑座連同台面裝在 X 滑座上,繞 Z 轉了 θ。從台面上的零件看,Y 行程仍沿著零件的 y,X 行程卻沿 (cos θ, −sin θ):每次裝夾裡,朝 ±Y 的面都被剪切 −θx,長牆兩端 x ±84.5 處各 ±4.4 µm。
在 HiNC 裡,機台鏈上的軸或主軸可以帶一個誤差項,也就是緊接在那根軸的連接之前、一條自己的靜態連接。這台機 X 在下、Y 在上,所以 Y 軸連接的正上游,正好就在兩個滑座之間:X → Yerr 上一條名為 XYsq 的靜態旋轉,標記為誤差項;Y 軸原本的平移原封不動搬到 Yerr → Y。若放在 X 的上游,兩個滑座與台面會一起轉,刀尖只多一個常數平移,碰數就整個吃掉了。控制器解各軸時,當作標記的連接不存在;專案的「啟用誤差項」開著時,模擬的機台卻帶著它移動、切削,就像一台控制器不知道自身垂直度的真實機台。樞軸放在兩次裝夾碰數姿態(G54 X −381、刀尖在程式零點)時的主軸軸線上。繞 Z 的轉動與高度無關,所以一個樞軸對兩次裝夾都成立:程式零點不動,碰數找到的就是名目的 G54。OP10 的專案本來就存著它;OP20 的基底專案在那裡存的是 0,所以 OP20 每一趟都把它打入。程式一行都沒改。
代理選這個誤差,是為了翻面。OP20 繞 X 翻面,y 變號,所以在成品上,OP10 切的面帶 +θx、OP20 切的面帶 −θx。凡是一個尺寸或一個階的兩面分在兩次裝夾,兩面就錯開 2θx,長牆兩端是 8.85 µm;這個零件的長牆兩段、孔與凸台、孔與墊片,正好就是這樣分的。加倍的錯位落在哪裡,取決於 OP20 怎麼抓零件,這不是誤差項能決定的,所以代理兩種都跑:
第一次播放前,代理先提交計畫:預期的刀尖偏移、29 個量測框的偏差,以及十二條通過標準。七趟 1 mm 的修剪播放先驗了建置、打入的工件座標與公式。接著以原案例驗收用的 0.25 mm、只看幾何,一個工作播完整案:OP10 的五支程式一趟連播;OP20 的毛胚就是 OP10 切出的工件,匯出後照原案例的矩陣翻面、重建:
另有一趟修剪播放清掉了標記、只播 OP10 的第一支程式,相當於做過運動學校正、知道這個誤差的控制器。
畫面由 HiNC 依 Antmicro 的模型(Apache-2.0)繪出,機台是原案例的機台、帶著代理加進去的誤差項連接,毛胚、夾具、刀具與程式也都是原案例的。切好的工件是連同 Diff 放回畫布拍的,不是重播;第一張另播一段停刀程式,把刀帶進畫面而不切削。顏色是 HiNC 的幾何差異(色條上的 Df),比對對象是名目那一趟切出的工件;色階正負對稱 ±0.005 mm:紅=過切、藍=留料、綠=0。格距 0.25 mm。圖表由 HiNC 的逐步結果與匯出的切削件畫成;機制那張是示意圖。
| 關鍵數字 | 意思 |
|---|---|
| 0.003° · 每 300 mm 15.7 µm | 誤差:X 與 Y 不垂直(ISO 230-1),做成 Y 軸正上游的一條靜態旋轉 θ。這是代理選的典型值,不是量測值;這裡的每個偏差都與它成正比 |
| 8.36×10⁻¹⁴ mm | OP10 的 224,167 個與 OP20 的 165,184 個切削步,刀尖離第一次播放前寫下的公式 δ = (X(cos θ − 1), −X sin θ, 0) 最多只差這麼多:兩次裝夾同一個式子,程式 x = 0 處為 0。機械座標與名目那一趟逐位元相同 |
| ∓52.34 µm/m | 只看 OP10:外長牆的偏差沿 x 的斜率,−52.34 與 +52.34 µm/m,預測 ∓52.36。內側面同向平移,牆厚不變(−0.053 µm) |
| 8.849 µm | 成品 A,+y′ 牆的 x+ 端:x 84.5 處,OP20 切的縫帶與 OP10 切的長牆段在 z′ −6 的階;2θx 預測 8.849。同一道牆上,OP10 段的斜率 +52.34 µm/m,OP20 切的倒角 −39.44 µm/m |
| 0.0000 µm | 毛胚經匯出、翻面、重建改變了多少:同一個 OP10 切的面,在 OP10 的 Diff 與成品的 Diff 裡讀到的一樣,五對框都是 |
| 5.615 µm | 成品 B:+y′ 牆的 +x 端面上 OP10 切的那一段凸出多少(預測 5.63),比上方 OP20 切的那一段高 5.600 µm。長牆的接縫消失了:縫與 OP10 段只差 0.011–0.015 µm |
| 7.6% · 0.040° | 最緊的尺寸:Ø2.7 孔外 1.2 mm 的墊片壁,最壞處預測薄 7.59 µm,是 ISO 2768-m ±0.1 mm 的 7.6%。機台要歪到 0.040°(現在的 13 倍)才會用完 |
| 逐位元相同 | 清掉標記的修剪趟(相當於校正過、知道誤差的控制器)對有標記的那一趟:十個逐步序列與 HiNC 的 Diff 統計逐位元相同,切出的工件每個頂點相差在 4.97×10⁻¹⁰ mm 內。一般三軸程式下,控制器沒有東西可改 |
| 1 h 43 min · 21.26 GB | 七趟 0.25 mm 播放在一個工作裡的伺服器時間(OP10 每趟 319,907 步、OP20 每趟 243,197 步),以及最大的記憶體峰值(OP20 的一趟)。在共用的 32 執行緒伺服器上,七趟 1 mm 播放共 525 s |
OP20 的毛胚必須是 OP10 在誤差項開著時切出的零件,否則誤差根本到不了成品。HiNC 記下的 OP10 最後毛胚留在 OP10 的工件座標裡;要用它,就得改基底專案的工件鏈。所以代理把 OP10 的名目切削件與帶誤差的切削件(各約 160 萬個三角形)匯出,照原案例用的矩陣 (x, −y, −z − 40.536) 翻面、不減面,再由它們重建毛胚。風險是:匯出、翻面、重建這一趟來回,可能抹掉幾個 µm。計畫因此加了一條檢查:同一個 OP10 切的面,在 OP10 的 Diff 與成品的 Diff 裡各讀一次;不過就另做誤差放大 10 倍、只用來拍圖的版本。五對框的中位數差 0.0000 µm,所以這裡每個數字與畫面都是真實的 0.003°。代價是:在重建的毛胚上,OP20 每趟記憶體峰值 20.66–21.26 GB。
HiNC 照原案例把 OP20 的毛胚放在設計框架裡,相當於探針碰數或外部治具(A)。真機上若塞子與軟爪是在同一台機上修出來的,零件坐進去時長牆會重新貼齊 X 行程(B)。只跑 A,會把長牆接縫上的階說成這個誤差唯一的結果;反過來,把 B 說成誤差項的效果也會誤導,因為 B 是對夾持的假設。所以代理兩種都跑。B 的毛胚是 A 的毛胚再繞 OP20 程式零點轉 −2θ,每張 B 的圖都寫明它是假設。B 的長牆兩段同一條線,縫與 OP10 段只差 0.011–0.015 µm,錯位換到牆端(+5.615 µm)與凸台、墊片的 ±x 兩側。OP20 切的面在 A、B 之間差 0.0000 µm,B 的刀尖與機械座標也與 A 逐位元相同。
第一次播放前,計畫依零件的幾何改了設計代理的四句話,其中三句,量到的結果也與計畫相符。第四句說 A 最先吃公差的是縫帶的牆厚與那裡的階(x 84.5 處 8.85 µm),那是把縫帶當成 3.5 mm 的牆、套 ISO 2768-m 的 ±0.1 mm。做公差帳時讀設計的剖面,才看到縫帶背後有內凸緣:那裡的截面是外側面到內凸緣,在 |x| 到約 78 是 7.335 mm、x 80–84.5 約 9.3–9.5 mm,兩者都屬 6–30 mm 的 ±0.2 mm。在縫的外側由 OP20 切的那一端,截面在 |x| 62–76 薄了 7.23 µm,與預測相同;預測的最壞處在 x 84.5,薄 8.85 µm,是 ±0.2 的 4.4%。兩個面之間的階不是尺寸,ISO 2768-m 不給它公差,所以計畫算的 8.9%(A 的階)與 5.8%(B 牆端的階)都不成立。A 最先吃公差的是 1.2 mm 的墊片壁,7.6%,和設計代理原本的排序相同。公差帳不是通過標準;紀錄把這件事當成對計畫的發現。
三個誤差項開的整案切削件,各有 0.41–0.57% 的頂點離名目切削件超過 10 µm;各件最大的 157–177 µm,是預測中最大偏差 5.81 µm 的 27 倍以上。當成誤差,就等於說零件切壞了;不核對就排除,也站不住。每一個都以精確的點到三角形距離重算過:全是真的,沒有一個是距離搜尋的假象,對照趟一個都沒有。其中 86–97% 沿銳邊、順著 x 排成長排,例如溝的兩條邊、牆頂、OP10 外輪廓最低一刀的那條邊;每一排只在一道牆的半邊,也就是誤差把那個面往材料裡推的那半邊(B 有 2 個頂點例外)。多數排沿全長同一個大小,與那裡的誤差大小無關(誤差從 x 1 mm 的 0.05 µm 變到牆端的 4.4 µm);最大值只比 0.25 mm 格的半對角線 176.8 µm 多 0.14 µm。讀法(推論,沒有核對 HiNC 的程式碼):邊只要移了一點點,網格就換一種方式切那條邊上的刻面。所以它們不當切削偏差用;尺寸一律用避開邊的量測框與第 1、第 99 百分位來讀。
其餘九個都在完整紀錄裡,包括:誤差要放在鏈的哪一段,零件上才會留下形狀;一個樞軸怎麼對兩次裝夾都成立;OP20 專案存的工件座標是 0、每一趟都要打入;修剪的 OP20 用的實心料塊上,有真毛胚沒有的料;設計代理引的量級文獻,把補償前那台機的 24.4 µrad 寫成校正過的;整案為什麼不跑不標記的那一趟;以及 OP20 的記憶體遠超過計畫估的 4–12 GB。
十四趟播放都跑到結束。整案的播放沒有碰撞,也沒有快移切料。
誤差項開、控制器不知道時,每一個切削步(OP10 224,167 步、OP20 165,184 步)的刀尖,都落在第一次播放前寫下的公式 δ = (X(cos θ − 1), −X sin θ, 0) 上,最多只差 8.36×10⁻¹⁴ mm:兩次裝夾同一個式子,程式 x = 0 整條線上為 0,δy 在 ±4.9 µm 內。每一步的機械座標都與名目那一趟逐位元相同,對照趟也與名目逐位元相同。
只看 OP10,朝 ±Y 的面被剪切了。外長牆的偏差沿 x 的斜率是 −52.34 與 +52.34 µm/m(預測 ∓52.36),兩端約 ±4.4 µm。內側面同向平移,所以牆厚不變(−0.053 µm);端面讀到 −0.008 µm,地板維持綠色。只在一次裝夾裡切出的尺寸,不會變。
照設計框架定位的成品(A),兩次裝夾把零件往相反方向剪切。+y′ 牆上,OP10 切的那一段斜率 +52.34 µm/m,OP20 切的 49° 倒角 −39.44 µm/m(預測 −39.49):49° 的面只留下沿 y′ 移動的 0.754。兩者之間的縫(z′ −6 到 −4.52)取較深的那一刀,兩端的框都讀到 −3.773 µm。在 +y′ 牆的 x+ 端(以及 −y′ 牆的 x− 端),縫的外側是 OP20 切的,和 OP10 段在 x 84.5 處錯開 8.849 µm,與預測的 2θx 相同;另一端縫取 OP10 那一刀,沒有階。OP20 鑽的孔與 OP10 切的凸台、墊片反向各移 θx:Ø3.3 孔外 2.0 mm 的凸台壁,+y′ 側厚 3.885 µm(預測 3.93);Ø2.7 孔外 1.2 mm 的墊片壁,−y′ 側薄 6.567 µm,那個框的逐頂點預測是 6.49 µm,孔中線上的預測是 7.59 µm。同一個 OP10 切的面,翻面前後讀到的一樣:在 OP10 的 Diff 與成品的 Diff 裡,五對框的中位數都差 0.0000 µm。
坐進機上修出的軟爪(B),長牆的 OP10 段與縫連成同一條線,兩道牆各 −52.36 與 +52.36 µm/m,縫與 OP10 段只差 0.011–0.015 µm:接縫消失了。錯位改成沿 x,大小 2θy′。+y′ 牆 +x 端面上 OP10 切的那一段凸出 5.615 µm(預測 5.63),比上方 OP20 切的那一段高 5.600 µm;凸台壁一側厚、一側薄,從 ±y′ 換到 ±x(+x 側 −4.046 µm,預測 −3.93);墊片的自由側變號,+3.419 與 +3.255 µm,計畫值 +3.80 與 +3.64:所有框裡離計畫最遠的,仍在 ±1.0 µm 內。OP20 切的面與 A 相同,11 個框都差 0.0000 µm。
OP10 的 7 個框、A 與 B 各 22 個框,量到的中位數離計畫值都在 0.12 µm 內,只有 B 的兩個墊片最多差 0.39 µm。對照趟切出的就是名目工件:所有頂點離它都在 0.1 µm 內,框的中位數在 3.4×10⁻⁷ µm 內,比誤差的 ±4.4 µm 小七個數量級。第一次播放前寫下的十二條標準照原文都過;其中建置那一條有三項是收尾時才讀回的:Diff 的偵測半徑與工件鏈的零平移,讀自建置當下存下的兩個專案檔;案例其他檔案不變,讀自 git。
這要不要緊?工程圖沒有公差,原案例取 ISO 2768-m。只在一次裝夾裡切出的尺寸不變;2.0 mm 的底厚雖然兩面分在兩次裝夾,但都是水平面,也不動。會變的是兩面分在兩次裝夾、又不是水平面的尺寸。A 最先吃公差的是 Ø2.7 孔外 1.2 mm 的墊片壁:預測最壞處薄 7.59 µm,是 ±0.1 mm 的 7.6%,機台要歪到 0.040°(現在的 13 倍)才會用完。2.0 mm 的凸台壁用掉 3.9%,7.335–9.5 mm 的縫帶截面用掉它 ±0.2 mm 的 4.4%。B 的墊片壁用掉 4.2%、凸台壁 3.9%,縫帶截面不變。零件上最大的錯位,A 的 8.849 µm,是兩個面之間的階,不是尺寸。
清掉標記、在 OP10 的修剪趟上,相當於做過運動學校正、知道這個誤差的控制器,結果與有標記的那一趟逐位元相同:十個逐步序列與 HiNC 的 Diff 統計一樣,切出的工件每個頂點相差在 4.97×10⁻¹⁰ mm 內。一般三軸的 G54/G43/G81 程式,控制器只由程式、工件座標與刀長算機械座標,不去看機台鏈,所以知道垂直度也沒有東西可改。要把這個零件切對,得把機台重新對正,或用控制器自己的垂直度補償,這部分 HiNC 不模擬。
這裡只放了一個常數誤差。真實的三軸機還有 X–Z、Y–Z 的垂直度、各軸的角度誤差,以及隨行程變化的定位與真直度誤差;這些,加上背隙、伺服不匹配與熱,都不是常數誤差項表達得了的。大小與正負號是選的:正負號反過來,藍與紅就換端,大小不變。碰數假設在程式零點;在別處碰數只多一個常數平移。B 只把毛胚轉 −2θ:軟爪怎麼修、零件怎麼貼上去、夾持怎麼讓它變形,都不在模型裡,現場的夾法也可能介於 A、B 之間。播放只看幾何,沒有切削力、撓曲與熱;原案例底殼的長刀精修時,第 95 百分位彎到 22 µm(倒角 35 µm),比這裡的 ±4.4 µm 大,真機上兩者疊加。只跑了底殼。一切都是模擬,沒有任何零件真的切過。
看完整的案例紀錄:Thor 機殼底殼與 0.003° 的 X–Y 垂直度
機殼、它的裝夾與這些程式是怎麼做出來的:Jetson AGX Thor 鋁機殼。同一種誤差放在一次裝夾就做完的零件上:NISTIR 6868 試件,X–Y 垂直度 6.87″。