Un bras robotisé. Un modèle. De l’espace articulaire à l’espace cartésien.
L’UR5 — un bras industriel à 6 articulations rotoïdes — modélisé de bout en bout comme une DAE multicorps. Une cinématique inverse en forme close alimente un régulateur PD par articulation avec anticipation de gravité qui maintient une trajectoire cartésienne de l’effecteur en simulation. Cinématique, inertie et commande, le tout sur une seule réplique numérique vivante.
Chaque sous-système, sur un seul canevas.
Rien n’est laissé de côté — la chaîne cinématique, l’inertie des liaisons et la commande portent chacune leur propre physique.
Six articulations rotoïdes
Les paramètres DH standard de l’UR5 enchaînent six articulations rotoïdes de la base au poignet. L’inertie du rotor (Jr) est disponible en paramètre optionnel mais maintenue à 0 pour la chaîne 6R — Jr > 0 déclenche une pathologie de réduction d’index MTK qui bloque les chaînes à N ≥ 5 articulations (ADR-0072).
Liaisons à inertie complète
Les masses des liaisons et les inerties principales diagonales proviennent de l’URDF UR5 publié. Les termes d’inertie hors diagonale sont négligés ; la DAE multicorps capture les forces inertielles dominantes sans couplage tensoriel complet.
CI en forme close
Un solveur analytique à poignet découplé referme la boucle de cinématique inverse en une seule branche. L’erreur d’aller-retour (CD ∘ CI) est d’environ 1e-16 rad — à la précision machine en virgule flottante.
Commande PD + anticipation de gravité
PD par articulation plus anticipation de gravité : in_tau → −q. La loi de commande de chaque articulation est indépendante, avec des gains ajustés à la fréquence propre du bras.
Observateur d’effecteur par CD
La cinématique directe propage les angles articulaires jusqu’à une position cartésienne de l’effecteur, comparée à la trajectoire de référence, ce qui fournit le signal d’erreur de suivi.
Composition DAE multicorps
Les primitives Revolute, FixedTranslation, FixedRotation et Link du kit multicorps pure-DJL composent la chaîne DH. Le moteur les abaisse vers une DAE symbolique.
Construit à partir de la chaîne DH, pas de matrices assemblées à la main.
Le modèle UR5 est assemblé à partir du même kit multicorps pure-DJL qui anime le quadricoptère Djinborn — des primitives Revolute, FixedTranslation, FixedRotation et Link câblées selon les paramètres DH standard. La cinématique et les forces inertielles émergent de la composition ; il n’y a ni jacobiennes ni matrices de masse codées à la main. La politique d’initialisation du moteur est réglée sur NoInit (ADR-0071) afin que la CI analytique puisse préconditionner les angles articulaires avant le démarrage de l’intégrateur DAE — une condition pour que le solveur analytique à poignet découplé fonctionne proprement dans la boucle.
Kit multicorps pure-DJL (Revolute/FixedTranslation/FixedRotation/Link) — sans modification de Rust ni de Julia. — ADR-0067
CI analytique à poignet découplé, une seule branche, poses non singulières. — ADR-0072
La politique moteur NoInit permet à la CI analytique de préconditionner l’état de la DAE. — ADR-0071
Quatre jalons. Des chiffres réels.
Simulation vérifiée par rapport à quatre jalons sur la branche feat/multibody-ur5-arm. Périmètre : poses non singulières, une seule branche de CI. Aucun robot physique — ce sont des résultats de simulation en jumeau numérique.
Jalon
- G-B1 : maintien de pose avec compensation de gravité : RÉUSSI
- G-B2 : erreur de suivi articulaire : RÉUSSI
- G-B3a : aller-retour CI (CD ∘ CI) : RÉUSSI
- G-B3b : suivi cartésien (pic) : RÉUSSI
- G-B3b : suivi cartésien (régime établi) : RÉUSSI
Résultat
- G-B1 : maintien de pose avec compensation de gravité : angles articulaires stables, aucune dérive
- G-B2 : erreur de suivi articulaire : < 0,0013 rad par articulation
- G-B3a : aller-retour CI (CD ∘ CI) : ~1e-16 rad (précision machine)
- G-B3b : suivi cartésien (pic) : 0,485 cm
- G-B3b : suivi cartésien (régime établi) : 0,41 cm
Le bug qui ressemblait à une lacune physique.
Lorsque la chaîne 6R a tourné pour la première fois, la DAE semblait sous-déterminée — le solveur n’arrivait pas à converger. La première hypothèse était une inertie de rotor manquante (une correction facile : ajouter Jr par articulation). Le modèle tournait, mais le suivi restait médiocre. La cause réelle était un repère terminal en suspens : le connecteur Frame de sortie de la sixième articulation n’avait aucun corps en aval contre lequel réagir, si bien que les équations de contrainte étaient dégénérées. Identifier cela — et non l’inertie — comme cause racine exigeait de lire la structure du résidu plutôt que de deviner. La correction tenait en une ligne. Exposer honnêtement ce diagnostic erroné fait partie du dossier : la rigueur en ingénierie consiste à suivre le résidu, pas la première histoire plausible.