Open Source Robotics

Una raccolta curata di progetti, strumenti e software di robotica open source di alta qualità per la comunità della robotica.

mjfit

Geometria di collisione convessa esatta per perni, fori, filettature e ingranaggi in MuJoCo

Licenza

MIT

Panoramica

mjfit è una libreria Python che genera geometria di collisione per compiti di assemblaggio in MuJoCo: un perno e il suo foro a partire da qualsiasi contorno, un bullone e il suo dado, o una coppia di ingranaggi che ingranano, ciascuno costruito da pezzi convessi la cui unione è esattamente il pezzo. Viene dall'Improbable AI Lab di Pulkit Agrawal al MIT, dove è stata scritta per addestrare le policy dell'articolo Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts, ed è rilasciata con licenza MIT su GitHub.

Il problema che risolve è specifico. MuJoCo gestisce le collisioni solo tra forme convesse, e un foro è concavo. Le soluzioni abituali sono la decomposizione convessa approssimata, con CoACD o V-HACD, o la collisione a distanza con segno (SDF) di MuJoCo su una mesh. La decomposizione riempie proprio il gioco da cui dipende un compito di assemblaggio, e la collisione SDF è più lenta e perde contatti. mjfit invece taglia la piastra attorno a un foro in cunei convessi, crea il perno come il foro spostato verso l'interno della misura del gioco, e genera per estrusione lungo un percorso filettature e denti degli ingranaggi a partire da profili convessi, così ogni bordo del perno si trova esattamente a una distanza pari al gioco dal bordo del suo foro e MuJoCo gestisce nativamente la collisione di ogni pezzo. Le curve diventano poligoni circoscritti, così un foro tondo non è mai più piccolo di come è disegnato.

Ogni generatore restituisce una stringa MJCF, da Python o dalla riga di comando mjfit, e contorni e dimensioni sono parametri, così un'unica sessione di addestramento può contenere migliaia di assiemi diversi. La pagina del progetto esegue dal vivo nel browser le policy dell'articolo e i confronti di mjfit.

mjfit ha tre generatori. mjfit.peg prende il contorno del foro o del perno, come lista di vertici o come forma da mjfit.shapes (cerchio, rettangolo, stadio, trapezio, poligono regolare, stella, qualsiasi poligono, contorni di Bézier con angoli arrotondati o un file CSV), e costruisce l'altro come suo offset esatto della misura del gioco. Le opzioni aggiungono materiale all'interno del foro, come la linguetta di una porta USB o i pin di un connettore (il perno diventa un guscio cavo attorno a essi), una sezione di presa più larga, una piastra esterna convessa con un bordo minimo, un foro chiuso o una massa fissa del perno. mjfit.thread costruisce un bullone e il suo dado da profili dei denti metrici ISO, trapezoidali, ACME, quadri, a dente di sega, a filo tondo o personalizzati, a uno o più principi, destrorsi o sinistrorsi. mjfit.gear costruisce un ingranaggio cilindrico a denti dritti o una coppia che ingrana, con denti a evolvente su cerniere e un motore opzionale; ogni dente è un prisma convesso.

Le configurazioni sono file YAML che contengono gli argomenti di un generatore, e il pacchetto ne include di pronte: perni a cerchio, a stella, USB-A, USB-C, HDMI, RJ45, D-sub (DB9) e XLR3, filettature M10 e M6 e una gamba FurnitureBench, e diverse coppie di ingranaggi. Per l'addestramento, mjfit.sample_pegs estrae assiemi casuali riproducibili da due famiglie (contorni convessi casuali con angoli arrotondati, o forme primitive con fino a tre isole nel foro), e mjfit.grid dispone molti assiemi in un'unica scena con nomi che non entrano mai in conflitto.

L'output è pronto all'uso: ogni geom appartiene a una classe predefinita con contatti rigidi, i file possono funzionare da soli o essere inclusi in una scena più grande, e le mesh possono essere scritte come file OBJ quando un convertitore USD ne ha bisogno. Il benchmark del repository confronta mjfit con CoACD, V-HACD e la SDF su mesh di MuJoCo su un perno tondo o quadrato da 16 mm con giochi fino a 20 µm, su CPU e su GPU con MuJoCo Warp, e include i comandi che riproducono ogni numero.

Perché è importante

L'assemblaggio ricco di contatti è una delle cose più difficili da apprendere in simulazione, e la parte più difficile spesso non è l'apprendimento ma la geometria: se il foro simulato è più piccolo, più ruvido o più lento di quello reale, una policy addestrata su di esso impara la lezione sbagliata. mjfit mette perni, fori, filettature e ingranaggi esatti, veloci e variati proceduralmente a un pip install di distanza per chiunque usi MuJoCo, compreso MuJoCo Warp per l'addestramento su larga scala su GPU. L'articolo per cui è stata costruita mostra che cosa rende possibile: policy di inserimento alla cieca addestrate interamente in simulazione che si trasferiscono su un braccio reale e inseriscono perni di forme mai viste.

Il problema che risolve

MuJoCo gestisce le collisioni solo tra forme convesse, quindi una piastra con un foro deve essere approssimata. La decomposizione convessa chiude il gioco da cui dipende un compito di inserimento di un perno in un foro, di avvitamento o di ingranamento, e la collisione a distanza con segno è lenta e perde contatti. mjfit costruisce ogni pezzo da pezzi convessi la cui unione è il pezzo esatto, mantenendo il gioco, e genera migliaia di assiemi variati a partire da parametri.

Punti chiave

  • Costruisce perni e fori, bulloni e dadi, e ingranaggi che ingranano per MuJoCo da pezzi convessi la cui unione è il pezzo esatto
  • Ogni bordo del perno si trova esattamente a una distanza pari al gioco dal bordo del suo foro; i cerchi diventano poligoni circoscritti, così i fori non sono mai più piccoli di come sono disegnati
  • Su CPU un perno e il suo foro vengono simulati un ordine di grandezza più velocemente rispetto alla SDF su mesh di MuJoCo, con precisione pari o migliore, secondo il benchmark del repository
  • Configurazioni incluse per connettori ed elementi di fissaggio reali: USB-A, USB-C, HDMI, RJ45, D-sub, XLR, filettature M10 e M6, coppie di ingranaggi
  • Il campionamento procedurale estrae migliaia di assiemi riproducibili per una singola sessione di addestramento
  • Costruita per l'articolo del MIT Blind Precise Assembly, le cui policy di inserimento si trasferiscono dalla simulazione a un braccio reale

A chi si rivolge

  • Ricercatori che addestrano policy di assemblaggio, inserimento, avvitamento o ingranamento in MuJoCo o MuJoCo Warp
  • Team di apprendimento robotico che hanno bisogno di molti pezzi variati con giochi stretti ed esatti
  • Ingegneri di simulazione che hanno incontrato i limiti della decomposizione convessa o della collisione SDF sui pezzi concavi
  • Studenti di manipolazione ricca di contatti che vogliono modelli pronti di connettori ed elementi di fissaggio

Limiti

  • Release iniziale: versione 0.1.0, mantenuta da un solo autore e installata da GitHub anziché da PyPI
  • Solo MuJoCo; gli altri simulatori ricevono le mesh come file OBJ, non il modello di contatto
  • Genera pezzi parametrici (perni e fori, filettature, ingranaggi cilindrici a denti dritti), non modelli CAD arbitrari
  • I contatti rigidi richiedono un passo temporale di 1 ms o meno, e gli ingranaggi su cerniere richiedono il solver PGS di MuJoCo anziché il solver Newton predefinito
  • I cunei delle filettature perdono un po' di materiale per la discretizzazione dell'elica, quindi le filettature sono esatte solo entro quella tolleranza

Questo sito richiede JavaScript. Attiva JavaScript per esplorare i nostri progetti di robotica open source.