先講清楚邊界:本篇沒有相機或點雲,遮擋是宣告的幾何規則再加 10% 漏失率;吸取則是彈簧—阻尼耦合,沒有真空、洩漏、接觸面積、紙箱變形或吸盤滑移。
自動拆棧板常遇到兩個問題:
第二個問題很容易被忽略。吸盤貼住頂面中心後,箱子雖然被提起,偏心重力仍會產生力矩,使箱子在吸盤下方傾斜。
箱子傾斜不一定會掉落,卻可能先用下緣掃到旁邊的箱子。因此,本篇不只記錄是否提起,也記錄:
Day 25 驗證的質心判準只處理單一直立柱。真正的棧板常是一個箱子同時壓在多個箱子上,支撐面要由多個接觸區域共同形成。
這是新的幾何問題,不能因為 Day 25 通過就直接套用。
所以本篇把問題縮小成一個目前可以驗證的問題:
被吸起的單一箱子因重心偏移而傾斜時,是否會撞到側向鄰居?
這種縮小不是逃避,而是避免用尚未驗證的判準產生看似完整的結論。
假設吸盤貼在箱子頂面中心,箱子的重心水平偏移 d,質量為 m,吸取機構的等效角剛度為 kr。
最簡單的一階估算是:
θ ≈ m × g × d / kr
但箱子傾斜後,重力的有效槓桿臂會縮短。加入箱體半高 h 後,平衡式為:
m × g × (d × cosθ − h × sinθ) = kr × θ
本案例箱體半高為 75 mm。當重心偏移 60 mm 時,修正式預測平衡傾角約 5.05°,約為一階估算 5.62° 的 0.89 倍。
這個解析預測非常重要,因為它讓我們在跑模擬前就知道傾角應該落在哪個量級。若模擬結果永遠是 0°,不應立刻解讀成吸盤非常穩,而要先懷疑力矩是否真的被施加。
第一次先導的所有傾角都是 0.00°。
原因是 PhysxForceAPI 的力施加在質心,重力也通過質心。兩個力的作用線經過同一點,自然不會產生使箱子傾斜的力矩。
真實吸盤貼在頂面中心,不是在質心。程式必須明確算出吸附點到質心的偏移向量,再加入 r × F 的力矩。
這個錯誤不會讓程式中止,畫面也非常平穩。如果沒有事前推導,0° 很容易被誤認為成功結果。
補上力矩後,傾角終於出現,卻只有預測值的約四分之一,而且比例隨姿態改變。
問題出在世界轉換矩陣的左上角並不是純旋轉 R,而是旋轉與縮放的乘積 R × S。若直接把它送進旋轉角計算,量到的角度會被箱體縮放扭曲;角彈簧的回復力矩也跟著算錯。
將每一欄正規化、先移除縮放後,預測與實測傾角的相關係數提高到 +0.9998,實測與預測的比值落在 0.870–0.938,與槓桿臂修正預期的約 0.89 一致。
這是很實用的 3D 工程提醒:從 4×4 轉換矩陣取旋轉前,要先確認矩陣中是否還混著縮放或剪切。
機構修正後,最初設定 2 mm 名目間隙,八個先導 seed 全部發生碰撞。
箱體半高為 75 mm。當箱子傾斜 θ 時,下緣向外伸出的距離約為:
外伸距離 ≈ 75 mm × sinθ
如果峰值傾角接近 9.8°,下緣外伸約 12.8 mm。2 mm 間隙當然不夠。
因此,本案例不是先隨意挑一個間隙,再看能不能過,而是從傾角預算反推:
所需間隙 ≥ 箱體半高 × sin(峰值傾角)
最後採用 20 mm 名目間隙。這不是實測棧板標準,而是本模型依傾角上界導出的設計值。
間隙放大後,程式仍記錄許多擦碰,甚至傾角只有 1° 的案例也失敗。
追查後發現,碰撞統計把目標箱正下方、原本支撐它的箱子也算成鄰居。剛開始提起時兩者接觸距離當然是 0,因此每個 seed 都至少被記一次碰撞。
修正方式是用水平距離區分:正下方支撐箱與目標箱位於同一格;側向鄰居則至少相隔一個棧板節距。
這個案例再次說明,量測定義本身也是系統的一部分。程式忠實回報「距離為零」,不代表我們問的是正確問題。
| 指標 | 正式結果 | 鎖定門檻 | 判定 |
|---|---|---|---|
| 拆棧成功率 | 1.000(30/30) | ≥ 0.90 | 通過 |
| 鄰箱擦碰事件 | 0 | ≤ 0 | 通過 |
| 其餘堆疊最大位移 | 0.000177 mm | ≤ 20 mm | 通過 |
| 平衡傾角 | 最大 6.2° | ≤ 15° | 通過 |
| 峰值傾角 | 最大 9.6° | 僅記錄 | — |
| 側向鄰居最小間隙 | 8.49 mm | 僅記錄 | — |
| 最小提起高度 | 約 50.0 mm | 僅記錄 | — |
| 重複試驗 | 30/30 | — | 通過 |
| 數值收斂 | 通過 | — | 通過 |
30 個 seed 全部完成提起,沒有鄰箱擦碰。平衡傾角介於 0.90–6.20°,峰值介於 2.10–9.60°;閉式預測與平衡傾角的相關係數為 +0.9998。
但這個結果不應寫成「拆棧板很安全」。更準確的說法是:
在剛體箱、等效吸附機構與依傾角預算導出的 20 mm 間隙下,重心偏移與宣告的遮擋規則沒有造成本組 30 個 seed 失敗。
如果把間隙改回 2 mm,先導試驗立即變成 0/8。本篇真正驗到的是「先估傾角,再決定間隙」這條設計規則,不是一個可以外推到所有棧板的成功率。
場景共有 12 個箱子,包含上層、可見、遮擋與隨機漏失的候選物件。遮擋由幾何規則宣告,再加入 10% 漏失率,沒有相機、點雲、反光、透明包膜或感測器雜訊模型。
因此,本篇只能檢查:在感知結果已由規則給定後,選擇與提起流程如何運作。
它不能支持「視覺系統能在遮擋下正確辨識箱子」,也不能用 30/30 當成實體拆棧良率。
可以支持的結論:在指定剛體箱、等效角剛度、重心偏移與 20 mm 名目間隙下,解析力矩模型能高度預測平衡傾角;30 個 seed 沒有鄰箱擦碰,且主要門檻通過。
不能支持的結論:
若系列後續延伸,可接到雙機械臂零件交接:單臂成功到達交接點還不夠,兩支手臂進入共用空間後,還要同時處理工具間隙、到達順序與交接失敗時的退回策略。