Open Source Robotics

Una colección curada de proyectos, herramientas y software de robótica de código abierto de alta calidad.

mjfit

Geometría de colisión convexa exacta para MuJoCo: clavijas, orificios, roscas y engranajes

Licencia

MIT

Resumen

mjfit es una biblioteca de Python que genera geometría de colisión para tareas de ensamblaje en MuJoCo: una clavija y su orificio a partir de cualquier contorno, un perno y su tuerca, o un par de engranajes que engranan, cada uno construido con piezas convexas cuya unión es exactamente la pieza. Procede del Improbable AI Lab de Pulkit Agrawal en el MIT, donde se escribió para entrenar las políticas del artículo Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts, y se publica con licencia MIT en GitHub.

El problema que resuelve es concreto. MuJoCo solo calcula colisiones entre formas convexas, y un orificio es cóncavo. Las soluciones habituales son la descomposición convexa aproximada, con CoACD o V-HACD, o la colisión por campo de distancia con signo (SDF) de MuJoCo sobre una malla. La descomposición rellena precisamente la holgura de la que depende una tarea de ensamblaje, y la colisión SDF es más lenta y pierde contactos. mjfit, en cambio, corta la placa alrededor de un orificio en cuñas convexas, hace de la clavija el orificio desplazado hacia dentro en la holgura y barre los dientes de roscas y engranajes a partir de perfiles convexos, de modo que cada arista de la clavija queda exactamente a una holgura de la arista del orificio y MuJoCo calcula de forma nativa la colisión de cada pieza. Las curvas se convierten en polígonos que las circunscriben, así que un orificio redondo nunca es más pequeño que el dibujado.

Cada generador devuelve una cadena MJCF, desde Python o desde la línea de comandos mjfit, y contornos y dimensiones son parámetros, de modo que un solo entrenamiento puede contener miles de ensamblajes distintos. La página del proyecto ejecuta en vivo en el navegador las políticas del artículo y las comparaciones de mjfit.

mjfit tiene tres generadores. mjfit.peg toma el contorno del agujero o de la clavija, como una lista de vértices o una forma de mjfit.shapes (círculo, rectángulo, estadio, trapecio, polígono regular, estrella, cualquier polígono, contornos Bézier con esquinas redondeadas o un archivo CSV), y construye la otra pieza como su desplazamiento exacto según la holgura. Las opciones añaden material que se alza dentro del agujero, como una lengüeta USB o pines de conector (la clavija se convierte en una carcasa hueca alrededor de ellos), una sección de agarre más ancha, una placa exterior convexa con un borde mínimo, un agujero cerrado o una masa fija de la clavija. mjfit.thread construye un perno y su tuerca a partir de perfiles de diente ISO métricos, trapezoidales, ACME, cuadrados, de diente de sierra, de alambre redondo o personalizados, de una o varias entradas y a izquierdas o a derechas. mjfit.gear construye un engranaje recto o un par engranado con dientes de evolvente sobre bisagras, con un motor opcional; cada diente es un prisma convexo.

Las configuraciones son archivos YAML que contienen los argumentos de un generador, y el paquete incluye algunas listas para usar: clavijas de círculo, estrella, USB-A, USB-C, HDMI, RJ45, D-sub (DB9) y XLR3, roscas M10 y M6 y una pata de FurnitureBench, y varios pares de engranajes. Para el entrenamiento, mjfit.sample_pegs genera ensamblajes aleatorios reproducibles a partir de dos familias (contornos convexos aleatorios con esquinas redondeadas, o formas primitivas con hasta tres islas en el agujero), y mjfit.grid dispone muchos ensamblajes en una sola escena con nombres que nunca entran en conflicto.

El resultado está listo para usar: cada geom pertenece a una clase por defecto con contactos rígidos, los archivos pueden ejecutarse por sí solos o incluirse en una escena mayor, y las mallas pueden escribirse como archivos OBJ cuando un convertidor USD las necesita. El benchmark del repositorio compara mjfit con CoACD, V-HACD y el SDF de mallas de MuJoCo en una clavija redonda o cuadrada de 16 mm con holguras de hasta 20 µm, en CPU y en GPU con MuJoCo Warp, e incluye los comandos que reproducen cada cifra.

Por qué importa

El ensamblaje rico en contactos es de lo más difícil de aprender en simulación, y lo más difícil a menudo no es el aprendizaje sino la geometría: si el orificio simulado es más pequeño, más áspero o más lento que el real, una política entrenada con él aprende la lección equivocada. mjfit pone clavijas, orificios, roscas y engranajes exactos, rápidos y con variación procedural al alcance de un pip install para cualquiera que use MuJoCo, incluido MuJoCo Warp para entrenar a gran escala en una GPU. El artículo para el que se creó muestra lo que esto permite: políticas de inserción a ciegas entrenadas por completo en simulación que se transfieren a un brazo real e insertan clavijas con formas que nunca vieron.

Qué problema resuelve

MuJoCo solo calcula colisiones entre formas convexas, así que una placa con un orificio tiene que aproximarse. La descomposición convexa cierra la holgura de la que depende una tarea de inserción, roscado o engrane, y la colisión por campo de distancia es lenta y pierde contactos. mjfit construye cada pieza con piezas convexas cuya unión es exactamente la pieza, conserva la holgura y genera miles de ensamblajes variados a partir de parámetros.

Puntos clave

  • Construye clavijas y orificios, pernos y tuercas y engranajes que engranan para MuJoCo con piezas convexas cuya unión es exactamente la pieza
  • Cada arista de la clavija queda exactamente a una holgura de la arista del orificio; los círculos se convierten en polígonos circunscritos, así que los orificios nunca son más pequeños que los dibujados
  • En CPU, una clavija y su orificio se simulan un orden de magnitud más rápido que el SDF de malla de MuJoCo, con igual o mejor precisión, según el benchmark del repositorio
  • Configuraciones incluidas para conectores y elementos de fijación reales: USB-A, USB-C, HDMI, RJ45, D-sub, XLR, roscas M10 y M6, pares de engranajes
  • El muestreo procedural extrae miles de ensamblajes reproducibles para un solo entrenamiento
  • Creado para el artículo del MIT Blind Precise Assembly, cuyas políticas de inserción pasan de la simulación a un brazo real

Para quién es

  • Investigadores que entrenan políticas de ensamblaje, inserción, roscado o engrane en MuJoCo o MuJoCo Warp
  • Equipos de aprendizaje robótico que necesitan muchas piezas distintas con holguras ajustadas y exactas
  • Ingenieros de simulación que han llegado a los límites de la descomposición convexa o de la colisión SDF con piezas cóncavas
  • Estudiantes de manipulación rica en contactos que buscan modelos listos de conectores y elementos de fijación

Limitaciones

  • Versión temprana: 0.1.0, mantenida por un solo autor e instalada desde GitHub en lugar de PyPI
  • Solo MuJoCo; otros simuladores reciben las mallas como archivos OBJ, no el modelo de contacto
  • Genera piezas paramétricas (clavijas y orificios, roscas, engranajes rectos), no modelos CAD arbitrarios
  • Los contactos rígidos necesitan un paso de tiempo de 1 ms o menos, y los engranajes sobre bisagras necesitan el solver PGS de MuJoCo en lugar del solver Newton predeterminado
  • Las cuñas de la rosca pierden algo de material por la discretización de la hélice, así que las roscas solo son exactas hasta esa tolerancia

Este sitio web requiere JavaScript. Por favor, habilite JavaScript para explorar nuestros proyectos de robótica.