Open Source Robotics

精選高品質的開源機器人專案、工具與軟體,推動機器人社群向前發展。

mjfit

為 MuJoCo 的插銷、孔、螺紋與齒輪產生精確的凸形碰撞幾何

授權條款

MIT

概述

mjfit 是一個 Python 函式庫,可為 MuJoCo 中的組裝任務產生碰撞幾何:由任意輪廓產生的插銷與其孔、螺栓與其螺帽,或一對相互嚙合的齒輪,每一個都由凸形塊組成,其聯集恰好就是該零件。它出自 MIT 的 Pulkit Agrawal 所領導的 Improbable AI Lab,原本是為了訓練論文 Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts 中的策略而寫,並以 MIT 授權在 GitHub 上釋出。

它解決的問題很明確。MuJoCo 只能讓凸形體互相碰撞,而孔是凹的。常見的解法是以 CoACD 或 V-HACD 進行近似凸分解,或對網格使用 MuJoCo 的符號距離(SDF)碰撞。凸分解會填掉組裝任務所仰賴的間隙,SDF 碰撞則較慢且會漏掉接觸。mjfit 改為把孔周圍的板切成凸形楔塊,把插銷做成孔向內偏移一個間隙的形狀,並以凸形輪廓掃掠出螺紋與齒輪齒,因此插銷的每一條邊都與孔的對應邊恰好相距一個間隙,而 MuJoCo 能以原生方式讓每一塊互相碰撞。曲線會變成外接於曲線的多邊形,因此圓孔絕不會比圖面上畫的小。

每個產生器都會回傳一個 MJCF 字串,可從 Python 或 mjfit 命令列呼叫,而輪廓與尺寸都是參數,因此一次訓練就能容納數千種不同的組件。專案頁面會在瀏覽器中即時執行論文的策略與 mjfit 的比較。

mjfit 有三個產生器。mjfit.peg 接收孔或插銷其中之一的輪廓,可以是頂點清單,也可以是 mjfit.shapes 中的形狀(圓形、矩形、跑道形、梯形、正多邊形、星形、任意多邊形、帶圓角的 Bezier 輪廓,或 CSV 檔案),再以間隙作精確偏移來建構另一個。選項可以在孔內加入凸起的材料,例如 USB 舌片或連接器針腳(插銷會變成包覆它們的中空殼體)、較寬的握持段、帶有最小邊緣的凸形外板、封閉的孔,或固定的插銷質量。mjfit.thread 以 ISO 公制、梯形、ACME、方形、鋸齒形、圓線或自訂齒形建構螺栓與其螺帽,可為單線或多線、左旋或右旋。mjfit.gear 建構一個正齒輪或一對以鉸鏈連接、具漸開線齒的嚙合齒輪,並可選擇加上馬達;每個齒都是一個凸形稜柱。

配置是存放產生器參數的 YAML 檔案,套件也附有現成的配置:圓形、星形、USB-A、USB-C、HDMI、RJ45、D-sub(DB9)與 XLR3 插銷,M10 與 M6 螺紋和一支 FurnitureBench 桌腳,以及數組齒輪對。在訓練方面,mjfit.sample_pegs 會從兩個家族(帶圓角的隨機凸形輪廓,或孔內最多有三個島狀凸起的基本形狀)抽取可重現的隨機組件,而 mjfit.grid 會把許多組件排列在同一個場景中,且名稱絕不衝突。

輸出可以直接使用:每個 geom 都屬於一個具有剛性接觸的預設類別,檔案可以單獨執行,也可以被納入更大的場景中,而當 USD 轉換器需要時,網格也可以寫成 OBJ 檔案。儲存庫的基準測試在一個 16 mm 圓形或方形插銷上,以低至 20 µm 的間隙,在 CPU 上以及在使用 MuJoCo Warp 的 GPU 上,比較 mjfit 與 CoACD、V-HACD 以及 MuJoCo 網格 SDF,並附有重現每個數字的指令。

為何重要

接觸密集的組裝是在模擬中最難學習的事情之一,而最難的部分往往不是學習本身,而是幾何:如果模擬中的孔比真實的孔更小、更粗糙或更慢,以它訓練出的策略就會學到錯誤的經驗。mjfit 讓任何使用 MuJoCo 的人,包括在 GPU 上以 MuJoCo Warp 大規模訓練的人,只要一個 pip install 就能取得精確、快速且可程序化變化的插銷、孔、螺紋與齒輪。它原本服務的那篇論文展示了這能帶來什麼:完全在模擬中訓練的盲插入策略,能轉移到真實手臂上,並插入從未見過形狀的插銷。

解決的問題

MuJoCo 只能讓凸形體互相碰撞,因此有孔的板必須以近似方式處理。凸分解會封閉插銷入孔、螺紋鎖附或齒輪嚙合任務所仰賴的間隙,而符號距離碰撞速度慢且會漏掉接觸。mjfit 以凸形塊建構每個零件,其聯集就是保留了間隙的精確零件,並能從參數產生數千種不同的組件。

重點

  • 以凸形塊建構 MuJoCo 的插銷與孔、螺栓與螺帽,以及嚙合齒輪,其聯集就是精確的零件
  • 插銷的每一條邊都與孔的對應邊恰好相距一個間隙;圓會變成外接多邊形,因此孔絕不會比圖面上畫的小
  • 依儲存庫的基準測試,在 CPU 上,一組插銷與孔的模擬步進比 MuJoCo 網格 SDF 快一個數量級,精度相同或更好
  • 內附真實連接器與緊固件的配置:USB-A、USB-C、HDMI、RJ45、D-sub、XLR、M10 與 M6 螺紋,以及齒輪對
  • 程序化取樣可為單次訓練抽取數千種可重現的組件
  • 為 MIT 論文 Blind Precise Assembly 而打造,論文中的插入策略能從模擬轉移到真實手臂

適用對象

  • 在 MuJoCo 或 MuJoCo Warp 中訓練組裝、插入、螺紋鎖附或齒輪嚙合策略的研究人員
  • 需要大量多樣化、具有緊密且精確間隙之零件的機器人學習團隊
  • 在凹形零件上遇到凸分解或 SDF 碰撞極限的模擬工程師
  • 學習接觸密集操作、想要現成連接器與緊固件模型的學生

限制

  • 早期版本:版本 0.1.0,由單一作者維護,從 GitHub 而非 PyPI 安裝
  • 僅支援 MuJoCo;其他模擬器只能取得 OBJ 格式的網格,而無法取得接觸模型
  • 產生的是參數式零件(插銷與孔、螺紋、正齒輪),而不是任意的 CAD 模型
  • 剛性接觸需要 1 ms 以下的時間步長,以鉸鏈連接的齒輪則需要使用 MuJoCo 的 PGS 求解器,而非預設的 Newton 求解器
  • 螺紋楔塊會因螺旋線的離散化而損失少許材料,因此螺紋只在該公差內是精確的

本網站需要 JavaScript 才能正常運作。請啟用 JavaScript 以瀏覽我們的開源機器人專案。