Isaac Sim 實戰筆記 GitHub

18 — 建模擬場域時,物理參數要去哪裡找

建一個「看起來對」的場景只需要幾何。建一個物理上對的場景, 每個剛體都要有質量、慣量、摩擦、碰撞近似 —— 而這些幾乎不會跟著資產一起來

這份記的是去哪找、每個來源實際給你什麼、以及查不到時怎麼估。 2026-07-31 為了查「後推式板車該多重」而整理,方法可套用到任何場域元件。

0. 先講最重要的一件事

PhysX 對未授權質量的預設是「網格體積 × 1000 kg/m³」—— 1000 是水的密度。

所以任何鋼構件如果沒有授權 physics:massphysics:density, 會比真實輕約 7.9 倍(鋼 7850 / 水 1000)。

實例:現地場域那個場景的 push-back 板車自動算成 9.4 kg, 比它載的棧板(20 kg)還輕 —— 真實世界正好相反。用鋼密度重算是 73.6 kg

這種錯不會有任何警告,場景照樣跑,只是行為不對 (太輕的東西被推一下就飛、堆疊不穩、求解器容易發散)。

1. 來源的優先順序

# 來源 給你什麼 不給你什麼
1 資產本身的 authored 值 若有,直接用 多數資產包沒有,見 §2
2 製造商規格書 / 型錄 尺寸、載重能力、材質 自重(tare weight)很少公布 —— 見 §3 陷阱
3 材料密度 × 幾何體積 可靠的估算 需要幾何正確,見 §4
4 同類產品的實測/秤重報告 真值 難找,且型號不一定對應

2. ⚠ 不要假設 NVIDIA 資產帶物理

2026-07-31 用 USD API 稽核(不是 grep,理由見 §5) NVIDIA Warehouse 資產包(24 GB):

資產 prim 數 RigidBody authored mass Collision
WingPallet_A01(木棧板) 9 0 0 0
HeavyDutyPalletTruck_A01(油壓拖板車) 25 0 0 0
Rack_E02(層架) 9 0 0 0

全部是純幾何 + 材質。 這是 digital twin(視覺)資產包,不是物理資產包。

⚠ 它們的 metersPerUnit = 0.01(公分制)。把它們放進公尺制場景時 父層會有 0.01 縮放 —— 算體積一定要用世界座標變換, 只用 local 頂點會錯 10⁶ 倍。

Isaac Sim 自己的機器人資產(Isaac/Robots/…)通常完整物理, 因為它們是要被模擬的。「資產包的用途」決定它有沒有物理 —— 視覺/場景佈置用的沒有,機器人/可互動物件才有。

工具:examples/audit_asset_physics.py —— 給它一個 USD,列出哪些 prim 有 RigidBody/Mass/Collision API 與 authored 值。

3. ⚠ 規格書的最大陷阱:載重能力 ≠ 自重

查「push-back 板車多重」時,搜尋結果幾乎全部是:

每個 cart 承載 2,500 lbs / Steel King SK3600 每 cart 3,000 lb
每顆輪子額定 2,000 lb(四輪)

那些都是 capacity(能載多重),不是 tare weight(自己多重)。

製造商公布載重是因為那是客戶要的規格;自重對客戶沒意義,所以不公布。 要自重通常得直接跟廠商要規格 PDF,或用 §4 估。

同樣的混淆會出現在:堆高機(舉升能力 vs 車重)、輸送帶、AGV。 看到一個重量數字,先問「這是它能載的,還是它本身的」。

4. 查不到規格時:幾何 × 材料密度

這是最實用的路,而且可驗證、可覆盤

質量 = 封閉網格的世界座標體積 × 材料密度

常用密度(kg/m³):

材料 密度 常見於
7850 貨架、板車、機構件
2700 輕型結構
木(松/合板) 500~700 棧板
硬塑膠(HDPE) 950 塑膠棧板、周轉箱
混凝土 2400 地面、配重
1000 PhysX 的預設值,不要讓它留著

體積要用世界座標算,而且要確認網格是封閉的 (不封閉的話有號體積無意義)。工具: 一支「幾何 × 材料密度」的估算腳本(未公開,做法見本節)。

釐清「材料體積」還是「包絡體積」: - 焊接鋼構的網格若是實心桿件建模 → 體積 ≈ 材料體積 ✅ - 若碰撞近似是 convex hull → 體積 ≈ 包絡,會大幅高估

實例:板車網格體積 0.00938 m³ = 9.4 公升。 包絡大約 1.2 × 1.1 × 0.2 m ≈ 0.26 m³ —— 差 28 倍, 所以 0.00938 是材料體積,乘鋼密度得 73.6 kg 是合理的。

合理性檢核

估完一定要對真實世界做一次 sanity check:

「這個數字在真實世界說得通嗎」是最後一道關,不要跳過。

5. ⚠ 不要用 grep 判斷 usdc 有沒有某個屬性

usdc 是二進位。實測對 NVIDIA 資產 grep:

Mesh / points / material     抓得到
UsdGeom / xformOp            抓不到

部分有效 = 不能當判準。 一定要用 USD API 開。

同理,Usd.Stage.Open 需要 pxr,而 Isaac 容器裡核心 USD 只在 kit 執行期載入 —— 獨立 python 要自己設兩個環境變數:

USDLIB=$(ls -d /isaac-sim/extscache/omni.usd.libs-*/ | head -1)
export PYTHONPATH=${USDLIB}:$PYTHONPATH
export LD_LIBRARY_PATH=${USDLIB}bin:$LD_LIBRARY_PATH
/isaac-sim/kit/python/bin/python3 your_script.py

6. 建場域時的檢查清單

每加一個會被物理模擬的物件,逐項確認:

maxForce 也是物理參數。 位置控制配上近乎無限的力, 等於「無論多大阻力都推得動」—— 那不是機器,是運動學規定。 真實堆高機舉升 2.5 噸 ⇒ 約 25 kN;設 10⁶ N 是不物理的。

7. 這次的實例(可當範本)

物件 現況 應為 依據
push-back 板車 9.4 kg(未授權 → 水密度) ~73.6 kg 網格體積 0.00938 m³ × 鋼 7850
木棧板 20 kg(authored) 20~25 kg ✅ 標準歐規/美規空棧板
叉齒 fork_liftA1 50 kg(authored) 合理 ✅
z1/z2 驅動 maxForce 10⁶ N ~25 kN 舉升 2.5 噸
叉齒↔棧板摩擦 static 5.0 0.3~0.6 μ>1 不物理

相關

子頁