Open Source Robotics

Une collection organisée de projets, outils et logiciels robotiques open source de haute qualité.

mjfit

Géométrie de collision convexe exacte pour MuJoCo : tenons, trous, filetages et engrenages

Licence

MIT

Aperçu

mjfit est une bibliothèque Python qui génère la géométrie de collision pour les tâches d'assemblage dans MuJoCo : un tenon et son trou à partir de n'importe quel contour, un boulon et son écrou, ou une paire d'engrenages qui s'engrènent, chacun construit à partir de pièces convexes dont l'union est exactement la pièce. Elle vient de l'Improbable AI Lab de Pulkit Agrawal au MIT, où elle a été écrite pour entraîner les politiques de l'article Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts, et elle est publiée sous licence MIT sur GitHub.

Le problème qu'elle résout est précis. MuJoCo ne gère les collisions qu'entre formes convexes, et un trou est concave. Les solutions habituelles sont la décomposition convexe approchée, avec CoACD ou V-HACD, ou la collision par champ de distance signée (SDF) de MuJoCo sur un maillage. La décomposition comble justement le jeu dont dépend une tâche d'assemblage, et la collision SDF est plus lente et manque des contacts. mjfit découpe plutôt la plaque autour d'un trou en coins convexes, fait du tenon le trou décalé vers l'intérieur de la valeur du jeu, et balaie les dents de filetage et d'engrenage à partir de profils convexes : chaque arête du tenon se trouve exactement à un jeu de l'arête du trou, et MuJoCo gère nativement la collision de chaque pièce. Les courbes deviennent des polygones qui les circonscrivent, si bien qu'un trou rond n'est jamais plus petit que dessiné.

Chaque générateur renvoie une chaîne MJCF, depuis Python ou depuis la ligne de commande mjfit, et contours et dimensions sont des paramètres, de sorte qu'un seul entraînement peut contenir des milliers d'assemblages différents. La page du projet exécute en direct dans le navigateur les politiques de l'article et les comparaisons de mjfit.

mjfit comporte trois générateurs. mjfit.peg prend le contour du trou ou de la cheville, sous forme de liste de sommets ou de forme issue de mjfit.shapes (cercle, rectangle, oblong, trapèze, polygone régulier, étoile, polygone quelconque, contours de Bézier à coins arrondis ou fichier CSV), et construit l'autre comme son décalage exact du jeu. Des options ajoutent de la matière à l'intérieur du trou, comme une languette USB ou des broches de connecteur (la cheville devient alors une coque creuse autour d'elles), une section de préhension plus large, une plaque extérieure convexe avec un rebord minimal, un trou fermé ou une masse de cheville fixe. mjfit.thread construit une vis et son écrou à partir de profils de filet métrique ISO, trapézoïdal, ACME, carré, en dents de scie, rond ou personnalisés, à un ou plusieurs filets et à pas à gauche ou à droite. mjfit.gear construit un engrenage droit ou une paire en prise avec des dents en développante montées sur charnières, avec un moteur en option ; chaque dent est un prisme convexe.

Les configurations sont des fichiers YAML contenant les arguments d'un générateur, et le paquet en fournit de prêtes à l'emploi : des chevilles cercle, étoile, USB-A, USB-C, HDMI, RJ45, D-sub (DB9) et XLR3, des filetages M10 et M6 et un pied FurnitureBench, ainsi que plusieurs paires d'engrenages. Pour l'entraînement, mjfit.sample_pegs tire des assemblages aléatoires reproductibles de deux familles (contours convexes aléatoires à coins arrondis, ou formes primitives avec jusqu'à trois îlots dans le trou), et mjfit.grid dispose de nombreux assemblages dans une même scène avec des noms qui n'entrent jamais en conflit.

Le résultat est prêt à l'emploi : chaque géométrie appartient à une classe par défaut avec des contacts rigides, les fichiers peuvent s'exécuter seuls ou être inclus dans une scène plus grande, et les maillages peuvent être écrits en fichiers OBJ lorsqu'un convertisseur USD en a besoin. Le benchmark du dépôt compare mjfit à CoACD, V-HACD et au SDF de maillage de MuJoCo sur une cheville ronde ou carrée de 16 mm avec des jeux descendant jusqu'à 20 µm, sur CPU et sur GPU avec MuJoCo Warp, et fournit les commandes qui reproduisent chaque chiffre.

Pourquoi c'est important

L'assemblage riche en contacts est l'une des choses les plus difficiles à apprendre en simulation, et le plus difficile n'est souvent pas l'apprentissage mais la géométrie : si le trou simulé est plus petit, plus rugueux ou plus lent que le vrai, une politique entraînée dessus apprend la mauvaise leçon. mjfit met des tenons, trous, filetages et engrenages exacts, rapides et variés de façon procédurale à portée d'un pip install pour quiconque utilise MuJoCo, y compris MuJoCo Warp pour l'entraînement à grande échelle sur GPU. L'article pour lequel il a été conçu montre ce que cela permet : des politiques d'insertion aveugles entraînées entièrement en simulation, qui se transfèrent sur un vrai bras et insèrent des tenons de formes jamais vues.

Le problème résolu

MuJoCo ne gère les collisions qu'entre formes convexes, donc une plaque percée doit être approchée. La décomposition convexe referme le jeu dont dépend une tâche d'insertion, de vissage ou d'engrènement, et la collision par champ de distance est lente et manque des contacts. mjfit construit chaque pièce à partir de pièces convexes dont l'union est exactement la pièce, en conservant le jeu, et génère des milliers d'assemblages variés à partir de paramètres.

Points clés

  • Construit des tenons et trous, boulons et écrous et engrenages qui s'engrènent pour MuJoCo à partir de pièces convexes dont l'union est exactement la pièce
  • Chaque arête du tenon est exactement à un jeu de l'arête du trou ; les cercles deviennent des polygones circonscrits, si bien que les trous ne sont jamais plus petits que dessinés
  • Sur CPU, un tenon et son trou se simulent un ordre de grandeur plus vite que le SDF de maillage de MuJoCo, à précision égale ou meilleure, selon le benchmark du dépôt
  • Configurations fournies pour de vrais connecteurs et éléments de fixation : USB-A, USB-C, HDMI, RJ45, D-sub, XLR, filetages M10 et M6, paires d'engrenages
  • L'échantillonnage procédural tire des milliers d'assemblages reproductibles pour un seul entraînement
  • Conçu pour l'article du MIT Blind Precise Assembly, dont les politiques d'insertion passent de la simulation à un vrai bras

Pour qui

  • Chercheurs qui entraînent des politiques d'assemblage, d'insertion, de vissage ou d'engrènement dans MuJoCo ou MuJoCo Warp
  • Équipes d'apprentissage robotique qui ont besoin de nombreuses pièces variées aux jeux serrés et exacts
  • Ingénieurs en simulation qui ont atteint les limites de la décomposition convexe ou de la collision SDF sur des pièces concaves
  • Étudiants en manipulation riche en contacts qui veulent des modèles prêts à l'emploi de connecteurs et d'éléments de fixation

Limites

  • Version précoce : 0.1.0, maintenue par un seul auteur et installée depuis GitHub plutôt que PyPI
  • MuJoCo uniquement ; les autres simulateurs reçoivent les maillages en fichiers OBJ, pas le modèle de contact
  • Génère des pièces paramétriques (tenons et trous, filetages, engrenages droits), pas des modèles CAO quelconques
  • Les contacts rigides exigent un pas de temps de 1 ms ou moins, et les engrenages sur pivots exigent le solveur PGS de MuJoCo plutôt que le solveur Newton par défaut
  • Les coins de filetage perdent un peu de matière à cause de la discrétisation de l'hélice, si bien que les filetages ne sont exacts qu'à cette tolérance près

Ce site nécessite JavaScript. Veuillez activer JavaScript pour explorer nos projets de robotique open source.