mjfit
Exakte konvexe Kollisionsgeometrie für MuJoCo: Stifte, Löcher, Gewinde und Zahnräder
Lizenz
MIT
Überblick
mjfit ist eine Python-Bibliothek, die Kollisionsgeometrie für Montageaufgaben in MuJoCo erzeugt: einen Stift und sein Loch aus beliebigem Umriss, eine Schraube und ihre Mutter oder ein Paar kämmender Zahnräder, jeweils aus konvexen Teilen aufgebaut, deren Vereinigung genau das Bauteil ist. Sie stammt aus Pulkit Agrawals Improbable AI Lab am MIT, wo sie geschrieben wurde, um die Policies des Papers Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts zu trainieren, und sie steht unter der MIT-Lizenz auf GitHub.
Das Problem, das sie löst, ist konkret. MuJoCo kollidiert nur konvexe Formen, und ein Loch ist konkav. Die üblichen Auswege sind näherungsweise konvexe Zerlegung mit CoACD oder V-HACD oder MuJoCos Kollision über vorzeichenbehaftete Distanzfelder (SDF) auf einem Mesh. Die Zerlegung füllt genau das Spiel auf, von dem eine Montageaufgabe abhängt, und die SDF-Kollision ist langsamer und verpasst Kontakte. mjfit zerlegt stattdessen die Platte um ein Loch in konvexe Keile, macht den Stift zum um das Spiel nach innen versetzten Loch und zieht Gewinde- und Zahnflanken aus konvexen Profilen, sodass jede Stiftkante genau ein Spiel von ihrer Lochkante entfernt liegt und MuJoCo jedes Teil nativ kollidiert. Kurven werden zu Polygonen, die sie umschreiben, sodass ein rundes Loch nie kleiner ist als gezeichnet.
Jeder Generator liefert einen MJCF-String, aus Python oder über das Kommandozeilenwerkzeug mjfit, und Umrisse und Maße sind Parameter, sodass ein einziger Trainingslauf Tausende verschiedener Baugruppen enthalten kann. Die Projektseite führt die Policies des Papers und die Vergleiche von mjfit live im Browser aus.
mjfit hat drei Generatoren. mjfit.peg nimmt den Umriss entweder des Lochs oder des Stifts, als Liste von Eckpunkten oder als Form aus mjfit.shapes (Kreis, Rechteck, Stadion, Trapez, regelmäßiges Polygon, Stern, beliebiges Polygon, Bézier-Umrisse mit abgerundeten Ecken oder eine CSV-Datei), und erzeugt das Gegenstück als dessen exakten Versatz um das Spiel. Optionen fügen Material hinzu, das im Loch steht, etwa eine USB-Zunge oder Steckerstifte (der Stift wird dann zu einer hohlen Hülle um sie herum), einen breiteren Griffabschnitt, eine konvexe Außenplatte mit Mindestrand, ein geschlossenes Loch oder eine feste Stiftmasse. mjfit.thread erzeugt einen Bolzen und seine Mutter aus metrischen ISO-, Trapez-, ACME-, Flach-, Sägezahn-, Rund- oder eigenen Zahnprofilen, ein- oder mehrgängig und links- oder rechtsgängig. mjfit.gear erzeugt ein Stirnrad oder ein kämmendes Paar mit Evolventenzähnen auf Gelenken, optional mit Motor; jeder Zahn ist ein konvexes Prisma.
Konfigurationen sind YAML-Dateien mit den Argumenten eines Generators, und das Paket liefert fertige mit: Stifte für Kreis, Stern, USB-A, USB-C, HDMI, RJ45, D-Sub (DB9) und XLR3, Gewinde M10 und M6 sowie ein FurnitureBench-Bein und mehrere Zahnradpaare. Für das Training zieht mjfit.sample_pegs reproduzierbare zufällige Baugruppen aus zwei Familien (zufällige konvexe Umrisse mit abgerundeten Ecken oder Grundformen mit bis zu drei Inseln im Loch), und mjfit.grid ordnet viele Baugruppen in einer Szene an, mit Namen, die nie kollidieren.
Die Ausgabe ist sofort einsatzbereit: Jede Geom gehört zu einer Standardklasse mit steifen Kontakten, Dateien können eigenständig laufen oder in eine größere Szene eingebunden werden, und Meshes lassen sich als OBJ-Dateien schreiben, wenn ein USD-Konverter sie benötigt. Der Benchmark des Repositorys vergleicht mjfit mit CoACD, V-HACD und dem Mesh-SDF von MuJoCo an einem runden oder quadratischen 16-mm-Stift mit Spielen bis hinunter zu 20 µm, auf der CPU und auf der GPU mit MuJoCo Warp, und liefert die Befehle mit, die jede Zahl reproduzieren.
Warum es wichtig ist
Kontaktreiche Montage gehört zu den schwierigsten Dingen, die man in der Simulation lernen kann, und das Schwierigste ist oft nicht das Lernen, sondern die Geometrie: Ist das simulierte Loch kleiner, rauer oder langsamer als das echte, lernt eine darauf trainierte Policy das Falsche. mjfit macht exakte, schnelle und prozedural variierte Stifte, Löcher, Gewinde und Zahnräder für alle, die MuJoCo nutzen, mit einem pip install verfügbar, auch für MuJoCo Warp zum Training im großen Maßstab auf einer GPU. Das Paper, für das es gebaut wurde, zeigt, was das ermöglicht: blinde Einsteck-Policies, vollständig in der Simulation trainiert, die auf einen echten Arm übertragen werden und Stifte mit nie gesehenen Formen einsetzen.
Welches Problem es löst
MuJoCo kollidiert nur konvexe Formen, also muss eine Platte mit Loch angenähert werden. Konvexe Zerlegung schließt das Spiel, von dem eine Stift-in-Loch-, Gewinde- oder Zahnradaufgabe abhängt, und Kollision über Distanzfelder ist langsam und verpasst Kontakte. mjfit baut jedes Bauteil aus konvexen Teilen, deren Vereinigung genau das Bauteil ist, behält das Spiel bei und erzeugt aus Parametern Tausende verschiedener Baugruppen.
Wichtigste Punkte
- Baut MuJoCo-Stifte und -Löcher, Schrauben und Muttern sowie kämmende Zahnräder aus konvexen Teilen, deren Vereinigung genau das Bauteil ist
- Jede Stiftkante liegt genau ein Spiel von ihrer Lochkante entfernt; Kreise werden zu umschriebenen Polygonen, sodass Löcher nie kleiner sind als gezeichnet
- Auf der CPU rechnen ein Stift und sein Loch laut Benchmark des Repositorys eine Größenordnung schneller als MuJoCos Mesh-SDF, bei gleicher oder besserer Genauigkeit
- Mitgelieferte Konfigurationen für echte Stecker und Verbindungselemente: USB-A, USB-C, HDMI, RJ45, D-Sub, XLR, M10- und M6-Gewinde, Zahnradpaare
- Prozedurales Sampling zieht Tausende reproduzierbarer Baugruppen für einen einzigen Trainingslauf
- Gebaut für das MIT-Paper Blind Precise Assembly, dessen Einsteck-Policies von der Simulation auf einen echten Arm übertragen werden
Für wen
- Forschende, die Policies für Montage, Einstecken, Verschrauben oder Zahnradeingriff in MuJoCo oder MuJoCo Warp trainieren
- Robot-Learning-Teams, die viele verschiedene Bauteile mit engen, exakten Spielen brauchen
- Simulationsingenieure, die bei konkaven Bauteilen an die Grenzen konvexer Zerlegung oder der SDF-Kollision gestoßen sind
- Studierende, die kontaktreiche Manipulation lernen und fertige Modelle von Steckern und Verbindungselementen suchen
Einschränkungen
- Frühe Version: 0.1.0, von einem Autor gepflegt und von GitHub statt von PyPI installiert
- Nur MuJoCo; andere Simulatoren erhalten die Meshes als OBJ-Dateien, nicht das Kontaktmodell
- Erzeugt parametrische Bauteile (Stifte und Löcher, Gewinde, Stirnräder), keine beliebigen CAD-Modelle
- Steife Kontakte brauchen einen Zeitschritt von höchstens 1 ms, und Zahnräder auf Drehgelenken brauchen MuJoCos PGS-Solver statt des standardmäßigen Newton-Solvers
- Gewindekeile verlieren durch die Diskretisierung der Helix etwas Material, daher sind Gewinde nur bis auf diese Toleranz exakt