Modélisation des robots
# Modélisation des robots

La modélisation d'un robot, considéré comme étant un système mécanique articulé, actionné et commandé, consiste à en établir un modèle mathématique. Outre une fonction générale d'aide à la conception, elle a de multiples utilisations pour, la prédiction des mouvements, l'adaptation des actionneurs, la planification des tâches, l'établissement des lois de commande, l'incorporation du robot dans des simulations informatiques, etc. Dans le langage courant, la modélisation précède la simulation sans que l'on distingue une séparation nette entre ces deux activités.

Il est souvent acceptable de se contenter d'une modélisation simplifiée dans laquelle on ne tient pas compte des aspects qui sont, ou paraissent, secondaires tels que : les vibrations, les déformations élastiques, les jeux mécaniques, les tolérances de fabrication, etc.

Dès lors, on est ramené dans le cadre classique de la mécanique rationnelle des solides rigides, appliquée sur des chaînes cinématiques ayant des liaisons holonomes ou non holonomes. Les données constructeur étant supposé connues, la modélisation en robotique, se situe donc typiquement dans le vaste domaine des mathématiques appliquées.

De plus, les nouveaux besoins et les nouvelles possibilités technologiques stimulent les activités de recherche en informatique, automatique, méthodes mathématiques, biomécanique, mécatronique et autres techniques apparentées.

Il y a deux manières d'aboutir à des résultats quantitatifs :

* Par des algorithmes numériques spécifiques, qui utilisent généralement la récurrence.
* Avec des logiciels de calcul symbolique, adaptés au traitement des systèmes mécaniques, et qui manipulent les expressions algébriques (exemples : AUTOLEV, NEWEUL, AUTOSIM, ROBOTRAN, MESAVERDE, KINDA…).

## Modélisation géométrique

* Le système mécanique articulé représentant un robot est une chaîne cinématique de corps solides, qui sont reliés entre eux par des articulations. Il est représenté mathématiquement par un système dynamique dont les N variables de configuration q sont les variables articulaires auxquelles s'ajoutent 6 variables supplémentaires dans le cas d'une base libre (ou flottante).
* La modélisation géométrique fait principalement appel aux méthodes de la géométrie analytique, et elle emprunte aussi quelques notions à la théorie des graphes pour le traitement des chaines cinématiques. Elle établit les relations entre les variables articulaires q dans l'espace de configuration et les coordonnées X, généralement cartésiennes, de certains points du robot, dans l'espace opérationnel, ou espace de travail.
* Terminologie :
   * La relation X = F(q) correspond au modèle géométrique direct (la configuration q est donnée).
   * La relation q = G(X) correspond au modèle géométrique inverse (la situation X dans l'espace opérationnel, est donnée).

### Description topologique - Architecture

**Chaines cinématiques**

Des distinctions peuvent être faites entre :

* Chaîne ouverte simple; exemples : bras mécaniques plus ou moins autonomes.
* Chaîne arborescente; exemples : robot anthropomorphes.
* Chaîne fermée; exemples : robots à architectures parallèles.

**systèmes à base fixe et systèmes à base mobile**

* À base fixe, souvent les bras manipulateurs fréquemment utilisés dans l'industrie.
* Systèmes (plus ou moins) libres dans l'espace ; (exemples : robots marcheurs à pattes, robots mobiles sur roues).

**Articulations**

* En négligeant les jeux mécaniques, les articulations sont des liaisons bilatérales qui apparaissent mathématiquement sous forme de contraintes égalités.
* Pour simplifier, le présent exposé est restreint aux articulations à un degré de liberté (pivot ou glissière : 1 ddl), dont la variable articulaire est un scalaire noté « q ». (D'autres articulations procureraient plus d'un ddl ; pivot glissant : 2ddl, rotule : 3ddl, etc.)
* Cependant, dans le cas d'une base mobile le symbole «q», représentera la position et l'orientation de la base et désignera jusqu'à 6 variables.

**L'environnement**

Bien que ne faisant pas partie, au sens strict, du robot, l'environnement est placé dans cette section.

* Influence du milieu ambiant : excepté pour quelques robot spatiaux, il est indispensable de tenir compte du champ de pesanteur et, éventuellement, des forces dues à l'atmosphère.
* Pour agir effectivement dans un monde matériel peuplé d'objets et d'obstacles, les deux fonctions essentielles d'un robot sont la locomotion et la préhension. Une locomotion de type terrestre peut être effectuée par reptation, patte, roue motrice, chenille.
* Les obstacles et les objets sont schématisés par des figures géométriques simples ou plus élaborées (voir B-Rep). Un exemple habituel très simple est le plan d'appui horizontal introduit pour supporter les évolutions d'un robot mobile.
* Les contacts ponctuels sans frottement sont directement modélisés par des liaisons unilatérales, qui correspondent à des contraintes inégalités. Une modélisation complète et détaillée devrait même aborder les problèmes de Détection des collisions.
* Pour représenter les frottements sec entre corps solides, la loi de Coulomb, malgré sa rusticité et son apparente simplicité, aboutit fréquemment à des complications mathématiques.

**Numérotation des corps**

* À la structure du robot correspond un graphe orienté : les corps sont les nœuds (sommets) et les articulations sont les arcs.
* Dans le cas d'une chaîne ouverte (acycliques), le graphe est une arborescence. On peut alors utiliser, le vocabulaire généalogique des lignées paternelles : ainsi pour chaque corps les 4 termes : ascendants, père, fils, descendants; sont définis de manière intuitive.
* Chaque corps est désigné par son numéro dénominatif qui respecte la convention «Numéro du père < Numéro du fils».
* À chaque corps est attaché son repère propre, de même numéro dénominatif.

### Prérequis mathématique

**Espace vectoriel euclidien à trois dimensions**

**Vecteurs et matrices**

Définitions dans l'espace euclidien à 3 dimensions ${\mathcal {E}}^{3}$.

* Base orthonormée : trois vecteurs de longueur un, perpendiculaires entre eux.
* Orientation: Ce terme a plusieurs significations:
   * Orientation d'un plan par le sens de rotation d'un point sur un cercle ; deux sens de rotation : sens antihoraire ou trigonométrique ou CounterClockWise OU sens horaire ou des-aiguilles-d'une-montre ou ClockWise.
   * Orientation propre d'un trièdre, d'un repère cartésien donné : direct ou indirect, on peut utiliser des règles basées sur la distinction entre la gauche et la droite, règle de trois doigts de la main droite, du bonhomme d'Ampère.
   * Orientation d'un axe dans l'espace ou d'une ligne de visée : par deux paramètres, deux angles (exemple : azimut et site ou hauteur).
   * Orientation dans l'espace d'une base ou d'un repère ou d'un solide rigide : par trois paramètres, (exemple : trois angles d'Euler, trois angles de Tait-Bryan).
* Soit le vecteur libre ${\vec {\mathbf {v} }}$ , dont les composantes sont $x,y,z$ dans une base orthonormée ${\mathcal {B}}$ de l'espace ${\mathcal {E}}^{3}\,.$

Sous la condition de spécifier que ce vecteur est exprimé dans la base ${\mathcal {B}},$ il peut être caractérisé par une matrice dont les trois éléments sont les composantes du vecteur. En pratique, les calculs effectifs sont effectués en utilisant l'écriture matricielle suivante :

$\mathbf {v} ={\begin{Vmatrix}x\\y\\z\end{Vmatrix}}=\mathbf {v} _{(31)},\qquad \mathbf {v} ^{t}={\begin{Vmatrix}x&y&z\end{Vmatrix}}=\mathbf {v} _{(13)}^{t},\qquad {\begin{bmatrix}\mathbf {v} \end{bmatrix}}_{(33)}={\begin{Vmatrix}0&-z&y\\z&0&-x\\-y&x&0\end{Vmatrix}}.$

* Avec cette notation, le produit vectoriel ${\vec {\mathbf {v} }}={\vec {\mathbf {a} }}\wedge {\vec {\mathbf {b} }}$, projetée dans ${\mathcal {B}}$, prend la forme matricielle :

$\mathbf {v} ={\begin{bmatrix}\mathbf {a} \end{bmatrix}}\mathbf {b}$. Cependant, en pratique, lorsque le risque d'ambiguïté semble faible, l'écriture fautive : $\mathbf {v} =\mathbf {a} \wedge \mathbf {b}$ est tolérable.

* De même, au produit scalaire ${\vec {\mathbf {v} }}\bullet {\vec {\mathbf {w} }}$ correspond l'expression matricielle $\mathbf {v} ^{t}\mathbf {w} =\mathbf {w} ^{t}\mathbf {v}$.

**Espace vectoriel euclidien à trois dimensions**

**Changement de bases**

Soit deux bases orthonormées dans l'espace euclidien à trois dimensions ${\mathcal {E}}^{3}$ :

* ${\mathcal {B}}=({\vec {e}}\,^{1},{\vec {e}}\,^{2},{\vec {e}}\,^{3})$, dénommée l' «Ancienne base»;
* ${\mathcal {B}}'=({\vec {e}}\,'^{1},{\vec {e}}\,'^{2},{\vec {e}}\,'^{3})$, la « Nouvelle base » que l'on caractérise par l'exposant « prime ».

La définition des composantes (ou coordonnées) revient à écrire :

${\vec {\mathbf {x} }}=\sum _{i=1}^{3}x_{i}{\vec {e}}\,^{i}=x_{1}{\vec {e}}\,^{1}+x_{2}{\vec {e}}\,^{2}+x_{3}{\vec {e}}\,^{3}=x'_{1}{\vec {e}}\,'^{1}+x'_{2}{\vec {e}}\,'^{2}+x'_{3}{\vec {e}}\,'^{3}.$

La matrice de passage directe ${\mathcal {P}}={\mathcal {P_{B,B'}}}$, qui donne les anciennes coordonnées du vecteur dans ${\mathcal {B}}$ en fonction des nouvelles dans ${\mathcal {B'}}$, est déterminée par :

${\mathcal {P}}_{ij}={\vec {e}}\,^{i}\centerdot {\vec {e}}\,'^{j},$ avec ${1\leqslant i\leq 3,\quad 1\leq j\leqslant 3}.$

Règle mnémotechnique : Les colonnes de la matrice de passage sont les coordonnées des vecteurs de la nouvelle base, exprimés dans l'ancienne base.

Dans le cas où les bases sont orthonormées, la matrice de passage est orthogonale. Son inverse, qui est dénommée matrice de passage inverse, est égale à sa transposée, et la valeur absolue de son déterminant est égale à 1 :

${\mathcal {P}}^{-1}={\mathcal {P}}^{t}$ , et $\det({\mathcal {P}})=\det({\mathcal {P}}^{t})=\pm 1.$ autrement dit :

${\mathcal {P}}\,{\mathcal {P}}^{t}={\mathcal {P}}^{t}\,{\mathcal {P}}={\boldsymbol {1}}_{(33)}.$

Pour les vecteurs (vecteurs polaires) $\mathbf {x}$, la formule du changement de coordonnées s'écrit :

$\mathbf {x} ={\mathcal {P}}\,\mathbf {x} ^{'},$ ou bien $\mathbf {x} ^{'}={\mathcal {P}}^{t}\,\mathbf {x}$.

* Lorsque les bases orthonormées ${\mathcal {B}}$ et ${\mathcal {B}}'$ ont la même orientation, alors $\det({\mathcal {P}})=+{1}$ , et ${\mathcal {P}}$ correspond à une rotation dans l'espace.
* Sinon $\det({\mathcal {P}})=-1$, et ${\mathcal {P}}$ correspond à l'association d'une rotation avec une symétrie par rapport à un plan. L'introduction de repères orientés dans le sens indirect rend les notations relatives aux robots présentant un plan de symétrie sagittal plus maniables. En effet, en cas de configuration symétrique, les variables articulaires qui sont à gauche sont alors égales à celles qui sont à droite.

**Espace ponctuel à trois dimensions**

Dans l'« espace ordinaire », un déplacement quelconque se décompose en une translation et une rotation.

**Espace ponctuel à trois dimensions**

**Repères**

On utilise des repères orthonormés « R » qui sont constitués par une origine O et une base ${\mathcal {B}}$ de trois vecteurs. Ainsi, la position d'un point géométrique M peut être caractérisée par un seul vecteur ${\vec {\mathbf {x} }}={\overrightarrow {\rm {OM}}}$ (ses coordonnées étant $\mathbf {x} ={\begin{Vmatrix}x&y&z\end{Vmatrix}}^{t}$), tandis que la position d'un repère (ou d'un solide) est défini par celle d'un point particulier et aussi par son orientation (orientation dans l'espace).

**Espace ponctuel à trois dimensions**

**Changement de repères**

Soit 2 repères orthonormées, R et R', définis par leurs origines O et O' et par leurs bases ${\mathcal {B}}$ et ${\mathcal {B'}}.$ Avec :

* ${\mathcal {P}}_{ij}={\vec {e}}\,^{i}\centerdot {\vec {e}}\,'^{j}\qquad :$ la matrice de passage directe (33) ;
* ${\mathcal {T}}_{i}={\vec {e}}\,^{i}\centerdot {\overrightarrow {OO'}}\qquad :$, pour caractériser la translation de O vers O'.

La matrice de passage (44) en coordonnées homogènes, prend la forme :

${\mathfrak {P}}={\begin{Vmatrix}{\mathcal {P}}_{(33)}&{\mathcal {T}}_{(31)}\\\mathbf {0} _{(13)}&1_{(11)}\end{Vmatrix}}.$ L'inverse de la matrices de passage (44) directe ${\mathfrak {P}}$ est la matrice de passage (44) homogène inverse :

${\mathfrak {P}}^{-1}={\begin{Vmatrix}{\mathcal {P}}_{(33)}^{t}&-{\mathcal {P}}_{(33)}^{t}{\mathcal {T}}_{(31)}\\\mathbf {0} _{(13)}&1\end{Vmatrix}}.$

Et les formules de changements de repères s'écrivent :

${\mathfrak {X}}={\begin{Vmatrix}x\\y\\z\\1\end{Vmatrix}}={\begin{Vmatrix}\mathbf {x} _{(31)}\\1\end{Vmatrix}}={\mathfrak {P}}\!\cdot \!{\mathfrak {X'}}\;,\qquad {\mathfrak {X'}}={\begin{Vmatrix}x'\\y'\\z'\\1\end{Vmatrix}}={\mathfrak {P}}^{-1}\!\cdot \!{\mathfrak {X}}.$

### Expressions des matrices de passages

Les matrices de passage entre deux repères dépendent, en général, des paramètres constitutifs et des variables articulaires.

**Orientation par une rotation autour d'un axe quelconque**

Rotation d'un angle $\varphi$ autour d'un vecteur unitaire ${\vec {\mathbf {u} }}$, la matrice de passage directe est donnée par la formule de Rodrigues :

       ${\mathcal {P}}=\mathbf {1} _{(33)}\,+\,\left[\mathrm {u} \right]sin\varphi \,+\,[\mathrm {u} ]^{2}(1\!-\!cos\varphi ).$

**Orientation par des rotations autour de trois axes de coordonnées**

On passe du repère fixe (« ancien ») Oxyz au référentiel lié au solide (« nouveau ») Ox'y'z' par trois rotations successives autour d'un des axes de coordonnées. La matrice de passage correspondante est le produit de trois matrices élémentaires représentant chacune une rotation autour d'un seul axe d'une coordonnée. Selon les axes intermédiaires choisis, on distingue:

* Les angles d'Euler, 6 ordres possibles : (z-x-z | x-y-x | y-z-y | z-y-z | x-z-x | y-x-y). Les angles étant dénommés: précession - nutation - rotation propre. On rencontre généralement l'ordre (z-x-z), dans les manuels français.
* Les angles de Tait-Bryan, six ordres possibles : (x-y-z | y-z-x | z-x-y | x-z-y | z-y-x | y-x-z).

Les angles de Cardan, qui sont utilisés dans les domaines aéronautique et spatial, correspondraient à l'ordre (z-y-x), et apparaissent souvent sous les noms : (z:)Azimuth=lacet=yaw ; (y:)Tanguage=pitch ; (x:)Roulis=roll.

**Orientation par un quaternion**

L'utilisation des quaternions unitaires élimine les difficultés numériques dues aux configurations singulières.

**Denavit-Hartenberg**

Les axes articulaires étant donnés ou bien définis, ils sont choisis comme axes des «z» des repères propres et les conventions de Denavit-Hartenberg permettent de caractériser la position relative (dans l'espace ponctuel) de deux repères avec seulement quatre paramètres. On rencontre surtout deux variantes :

* Denavit-Hartenberg 1955.
* Khalil-Kleinfinger = Denavit-Hartenberg modifié, qui est particulièrement appropriée aux principaux algorithmes numériques.

### Modélisation géométrique directe

* Les matrices de passages ${\mathcal {P}}{(\mathbf {q} )}_{(33)}$ et ${\mathfrak {P}}{(\mathbf {q} )}_{(44)}$ dépendent de paramètres constitutifs constants et des variables articulaires q. Du point de vue de la modélisation, elles contiennent l'information utile pour spécifier la configuration du robot. Après la description des paramètres constitutifs, la modélisation géométrique directe se réduit donc, en pratique, à un simple produit de matrices.
* Les coordonnées cartésiennes $\mathbf {x} _{(31)}{\text{ ou }}{\mathfrak {X}}_{(41)}$ sont des composantes de l'espace opérationnel que l'on calcule avec les formules génériques du changement de bases, $\mathbf {x} ={\mathcal {P}}\,\mathbf {x} ^{'}$, ou de repères avec les coordonnées homogènes, ${\mathfrak {X}}={\mathfrak {P}}\,{\mathfrak {X'}}$.
* Exemple d'une chaîne cinématique ouverte constituée de N corps numérotés de 1 à N = 6. Les formules de changement de bases (ou de repères en coordonnées homogènes) sont utilisées pour donner des jeux de relations du type :

       ${\begin{aligned}\mathbf {x} _{0}={\mathcal {P}}_{0,1}\mathbf {x} _{1}&\,,\qquad \mathbf {x} _{1}={\mathcal {P}}_{0,1}^{t}\mathbf {x} _{0}.\\\mathbf {x} _{1}={\mathcal {P}}_{1,2}\mathbf {x} _{2}&\,,\qquad \mathbf {x} _{2}={\mathcal {P}}_{1,2}^{t}\mathbf {x} _{1}.\\\mathbf {x} _{2}={\mathcal {P}}_{2,3}\mathbf {x} _{3}&\,,\qquad \mathbf {x} _{3}={\mathcal {P}}_{2,3}^{t}\mathbf {x} _{2}.\\\mathbf {x} _{3}={\mathcal {P}}_{3,4}\mathbf {x} _{4}&\,,\qquad \mathbf {x} _{4}={\mathcal {P}}_{3,4}^{t}\mathbf {x} _{3}.\\\mathbf {x} _{4}={\mathcal {P}}_{4,5}\mathbf {x} _{5}&\,,\qquad \mathbf {x} _{5}={\mathcal {P}}_{4,5}^{t}\mathbf {x} _{4}.\\\mathbf {x} _{5}={\mathcal {P}}_{5,6}\mathbf {x} _{6}&\,,\qquad \mathbf {x} _{6}={\mathcal {P}}_{5,6}^{t}\mathbf {x} _{5}.\\{\text{ Par des substitutions successives, }}&{\text{ on en déduit les expressions pour N = 6 :}}\end{aligned}}$

$\mathbf {x} _{0}={\mathcal {P}}_{0,6}\mathbf {x} _{6},\qquad \mathbf {x} _{6}={\mathcal {P}}_{0,6}^{t}\mathbf {x} _{0}.$

${\begin{aligned}{\mathcal {P}}_{0,6}={\mathcal {P}}_{0,1}&{\mathcal {P}}_{1,2}{\mathcal {P}}_{2,3}\cdots {\mathcal {P}}_{5,6}.\\{\mathcal {P}}_{0,6}^{t}={\mathcal {P}}_{5,6}^{t}&{\mathcal {P}}_{4,5}^{t}{\mathcal {P}}_{3,4}^{t}\cdots {\mathcal {P}}_{1,0}.\\\end{aligned}}$

Pour alléger encore le formalisme dans le cas des chaînes simples, l'écriture générale d'un produit de matrices tel que :

${\mathcal {P}}_{0,N}={\mathcal {P}}_{0,1}{\mathcal {P}}_{1,2}{\mathcal {P}}_{2,3},\cdots ,{\mathcal {P}}_{N-2,N-1}{\mathcal {P}}_{N-1\,N}\,;$

peut être abrégée en :

${\begin{aligned}{\mathcal {P}}_{0,N}&={\mathcal {P}}_{0}{\mathcal {P}}_{1}{\mathcal {P}}_{2},\cdots ,{\mathcal {P}}_{N-2}{\mathcal {P}}_{N-1}.\\{\mathcal {P}}_{0,N}^{t}&={\mathcal {P}}_{N-1}^{t}{\mathcal {P}}_{N-2}^{t},\cdots ,{\mathcal {P}}_{1}^{t}{\mathcal {P}}_{0}^{t}.\\\end{aligned}}$

De cette façon, toute relation vectorielle peut se traduire sous forme matricielle (donc calculable numériquement) dans n'importe quel repère (du robot comme de l'environnement) arbitrairement choisi.

### Modèlisation géométrique inverse

Étant donné une situation opérationnelle X, quand on cherche à résoudre q= G(X), les trois cas sont possibles :

* Une infinité de solutions : configuration redondante, (cas de plus de six articulations dans un bras manipulateur). Mathématiquement le nombre de ddl est inutilement grand, (ce qui peut être justifié par d'autres avantages pratiques).
* Une ou plusieurs solutions.
* Aucune solution, la situation donnée peut se trouver en dehors de la zone d'accessibilité, ou bien c'est une configuration singulière. (Exemples : deux axes de glissières qui arrivent en parallélisme, deux axes de pivots qui se trouvent en coïncidence…).

## Modélisation statique

* La modélisation statique du robot consiste à calculer les efforts dans chaque articulation, et les efforts de réactions du sol, en considérant que le robot est immobile. Dans le cas de la manipulation de charges, lorsque le robot supporte une pièce lourde, on peut souvent négliger le poids des segments.
* Un problème voisin est la détermination des configurations d'équilibre dans lesquelles le robot finit par se trouver lorsque les efforts de tous les actionneurs sont nuls. Cela correspond à des postures typiques telles que la mise en veille volontaire ou la panne accidentelle.

## Modélisation cinématique

### Modélisation cinématique directe

Le modèle cinématique direct (MCD) calcule la vitesse dans le domaine cartésien en fonction de la vitesse articulaire du robot : $\mathbf {\dot {X}} =\mathbb {VP} ={\mathfrak {F}}(\mathbf {q} ,\mathbf {\dot {q}} )={\dfrac {\partial {\mathsf {F}}}{\partial \mathbf {q} }}\mathbf {\dot {q}}$ (voir : matrice jacobienne).

### Modélisation cinématique inverse

Le modèle cinématique inverse (MCI) permet de passer de la vitesse opérationnelle à la vitesse dans le domaine articulaire : $\mathbf {\dot {q}} ={\mathfrak {G}}(\mathbf {\dot {X}} ).$ (Possibilité de plusieurs solutions), voir également : Décomposition en valeurs singulières#Cinématique inverse.

## Modélisation dynamique

La modélisation dynamique consiste à établir les relations entre les efforts des actionneurs et les mouvements qui en découlent, autrement dit, à expliciter les équations différentielles du second ordre que sont les équations du mouvement.

          Terminologie :
* Problème dynamique direct = calcul des accélérations produites par des efforts donnés, avec une expression matricielle du type : $\mathbf {\ddot {q}} ={\mathsf {F}}(\mathbf {q} ,\mathbf {\dot {q}} ,{\boldsymbol {\tau }})$, ce qui permet la détermination du mouvement par intégration.
* Problème inverse = connaissant le mouvement, c'est le calcul des efforts ${\boldsymbol {\tau }}={\mathsf {G}}(\mathbf {q} ,\mathbf {\dot {q}} ,\mathbf {\ddot {q}} )$, qui en sont la cause.

### Lois de la dynamique

**Hypothèses simplificatrices**

En première approximation, on utilise fréquemment des hypothèses simplificatrices telles que :

* Les corps constitutifs sont des solides rigides ; les ressorts sont (éventuellement) les seuls constituants déformables.
* Les termes difficiles à évaluer de frottement visqueux sont estimés plus ou moins empiriquement.
* Les articulations sont des pivots (articulation rotoïde) ou des glissières (articulation prismatique),
* Les actionneurs (électriques, hydrauliques ou autres) sont schématisés par des forces ou des couples (qui sont des fonctions des signaux de commandes). (Dans le cas des systèmes sous actionnés, certaines articulations sont dépourvues d'actionneurs.
* Les forces de contact avec l'environnement suivent la loi approchée du frottement sec de Coulomb.

**Formulations**

**Formulation vectorielle**

* Les forces ainsi que les grandeurs cinématiques (vitesses, accélérations) sont représentées explicitement par des vecteurs.
* On aboutit à des algorithmes relativement simples à programmer et rapides à exécuter, ce qui permet leur utilisation dans les logiciels d'intégration numérique où une, ou plusieurs, résolutions d'un problème dynamique doivent être effectuées à chaque pas d'intégration.
* Dans le même ordre d'idées, tous les termes, analytiquement compliqués, des équations de Lagrange peuvent avantageusement être calculés numériquement par plusieurs appels, avec successivement $\mathbf {\dot {q}} =0,\mathbf {\ddot {q}} =0,{\boldsymbol {\lambda }}=0,g=0,\cdots$ de l'algorithme RNEA (voir plus bas).

**Formulations**

**Formulation analytique**

L'état du système représentatif $(\mathbf {q} ,\mathbf {\dot {q}} )$ est décrit par des variables de configuration ou (coordonnées généralisées) et leurs dérivées, les formulations analytiques peuvent être considérées comme des applications typiques du calcul des variations. Des principes variationnels, provenant de la physique classique, sont utilisés à partir de fonctions telles que l'énergie cinétique, l'énergie potentielle, leur somme, leur différence..., dépendant généralement seulement de l'état. Mathématiquement, il s'agit de la recherche de l'extrêmum de l'intégrale d'une fonction inconnue (fonctionnelle) à plusieurs variables, avec ou sans contraintes. Il en résulte par des changements de variables et en utilisant les ressources de l'algèbre et de l'analyse, des expressions variées qui sont pourtant équivalentes à la formulation vectorielle.

* Ainsi, les équations de Lagrange sans contrainte, sont un cas particulier des équations d'Euler-Lagrange et peuvent être démontrées en minimisant la fonction action qui est une intégrale du lagrangien L =T-V.
* Pour prendre en compte les liaisons bilatérales holonomes, il faut rajouter des variables auxiliaires : les multiplicateurs de Lagrange pour obtenir les équations de Lagrange avec contraintes, (qui ne sont plus valables s'il y a des liaisons non holonomes). Il est aussi possible d'effectuer une partition algébrique entre les variables (déclarées) indépendantes et les autres variables qui sont dépendantes.
* D'autres approches sont conseillées, ou même indispensables, particulièrement quand il y a des liaisons non holonomes (robot sur roues évidemment, mais aussi robots rampants ou à pattes). L'introduction de quasi-vitesses : $\mathbf {w} ={\mathsf {B}}(\mathbf {q} )\mathbf {\dot {q}} ,$ est alors presque systématique.
   * Les équations de Boltzmann-Hamel sont adaptées aux robots à base libre, en prenant les composantes du vecteur rotation du corps de base comme quasi-vitesses.
   * Il existe d'autres méthodes. On se restreint ici à l'évocation de quelques noms emblématiques : Gibbs-Appell, Kane, Maggi, Udwadia et Kalaba.

**Formulations**

**Interaction avec l'environnement**

Une modélisation réaliste incorpore un éventail de sujets assez disparates qui proviennent des liaisons non permanentes.

* Liaisons unilatérales qui peuvent être saturées (égalité) ou non saturées (inégalité stricte) : conditions et multiplicateurs de Karush-Kuhn-Tucker.
* Possibilités d'impacts et de chocs subséquents.
* Les contacts avec frottement, entre le robot et son environnement, (commande en effort, robots marcheurs) sont délicats à modéliser, ce qui est dû à la forme non biunivoque de la loi de Coulomb. Ces difficultés qui avaient été entrevues dès 1895 avec le paradoxe de Painlevé (en) sont l'objet de recherches actuelles sous le nom de Mécanique non régulière (en).

**Grandeurs mécaniques préliminaires**

**Notations**

* Chaque grandeur est affectée du même indice que le corps qu'elle caractérise.
* Ainsi la masse, le centre de gravité, le tenseur d'inertie (qui est symétrique) au centre de gravité, du corps Cj, se noteront respectivement : $\quad m_{j}\,,\;{\rm {G_{j}\,,\;{\mathbf {I} }_{j}.}}$

${\begin{aligned}&{\text{Pour préciser la disposition géométrique, on pose aussi}}:\\{\vec {\boldsymbol {\rho }}}_{j}&={\overrightarrow {\rm {{O_{j}}{G_{j}}}}}\,;\;{\vec {\boldsymbol {\xi }}}_{j}={\overrightarrow {\rm {{O_{j}}{O_{j+1}}}}}\;.\\\end{aligned}}$.

* Les composantes d'une grandeur non scalaire dépendent du repère sur lequel elles sont projetées ce qui est indiqué par un indice supérieur à gauche.

${\begin{aligned}^{\ell }\mathbb {W} _{j}&\;:\quad {\text{composantes projetées sur le repère }}{\rm {R_{\ell }.}}\\^{0}\mathbb {W} _{j}&\;:\quad {\text{composantes projetées sur le repère absolu galliléen.}}\\^{j}\mathbb {W} _{j}&\equiv \mathbb {W} _{j}\;:\quad {\text{pour alléger l'écriture des composantes propres.}}\\\end{aligned}}$.

**Grandeurs mécaniques préliminaires**

**Vecteurs**

Ils sont appelés « vrais vecteurs » ou « vecteurs polaires » en cas d'ambiguïté.

* $\mathbf {f}$ : résultante générale des forces appliquées.
* $\mathbf {v}$ : vecteur vitesse linéaire.
* $\mathbf {\dot {v}}$ : accélération linéaire spatiale (en), par rapport au repère propre.
* ${\boldsymbol {\gamma }}$ : accélération linéaire inertielle, par rapport au repère absolu galiléen, avec la relation $\quad {\boldsymbol {\gamma }}=\mathbf {\dot {v}} +{\boldsymbol {\omega }}\wedge \mathbf {v} \,.$

**Grandeurs mécaniques préliminaires**

**Pseudovecteurs**

Les pseudovecteurs qui apparaissent en mécanique, proviennent de produits vectoriels de vrais vecteurs.

* ${\boldsymbol {\mu }}$ : Moment de force (pseudovecteur).
* ${\boldsymbol {\omega }}$ : Vecteur vitesse de rotation (pseudovecteur).
* ${\boldsymbol {\dot {\omega }}}$ : Vecteur accélération angulaire ou accélération de rotation (pseudovecteur).

Pour les pseudovecteurs ${\boldsymbol {y}}$ la formule du changement de coordonnées prend les formes :

${\boldsymbol {y}}=\det({\mathcal {P}})*{\mathcal {P}}\,{\boldsymbol {y}}^{'}\,$ et $\qquad {\boldsymbol {y}}^{'}=\det({\mathcal {P}}^{t})*{\mathcal {P}}^{t}\,{\boldsymbol {y}}=\det({\mathcal {P}})\times {\mathcal {P}}^{t}\,{\boldsymbol {y}}\,$.

**Grandeurs mécaniques préliminaires**

**Torseurs**

Un torseur est un champ de vecteurs glissants équiprojectif qui est similaire à un champ de moments. Un torseur est l'association d'un pseudovecteur et d'un vrai vecteur.

**Grandeurs mécaniques préliminaires**

**Énergies**

* L'énergie cinétique d'un système est la somme des énergies cinétiques des N corps constitutifs :

$T(\mathbf {q} ,\mathbf {\dot {q}} )=\sum _{j=1}^{N}{\frac {1}{2}}\left[m_{j}\;^{0}\mathbf {v} _{j}\!\centerdot \!^{0}\mathbf {v} _{j}\;+\;^{0}{\boldsymbol {\omega }}_{j}\!\centerdot \!(^{0}\mathbf {I} _{j}\;^{0}{\boldsymbol {\omega }}_{j})\right].$

* De même l'énergie potentielle dans le champ de pesanteur $\mathbf {\vec {g}}$ :

$V(\mathbf {q} )=\sum _{j=1}^{N}[-m_{j}\;^{0}\mathbf {g} \centerdot^{0}\mathbf {r} _{j}].$

**Notations spatiales (avec des sextuplets)**

La dynamique des solides rigides entremêle les mouvements de translation et de rotation. D'où l'intérêt pratique d'utiliser des symboles représentant 6 paramètres. En anglais, cette notation est qualifiée de « spatial ».

**Notations spatiales (avec des sextuplets)**

**Torseurs**

Le torseur cinématique (des vitesses des points d'un solides), le torseur des efforts et la dérivée du torseur cinématique (en un point M d'un repère), peuvent respectivement s'écrire :

$\mathbb {F} _{\rm {M}}={\begin{Vmatrix}{{\boldsymbol {\mu }}_{\rm {M}}}\\{\mathbf {f} }\end{Vmatrix}};\quad \mathbb {V} _{\rm {M}}={\begin{Vmatrix}{\boldsymbol {\omega }}\\{\mathbf {v} _{\rm {M}}}\end{Vmatrix}};\quad {\dot {\mathbb {V} }}_{\rm {M}}={\begin{Vmatrix}{\boldsymbol {\dot {\omega }}}\\{\mathbf {\dot {v}} _{\rm {M}}}={\boldsymbol {\gamma }}_{\rm {M}}-{\boldsymbol {\omega }}\wedge \mathbf {v} _{\rm {M}}\end{Vmatrix}}.$

**Notations spatiales (avec des sextuplets)**

**Opérateurs sur deux torseurs**

Soit, en un même point, les torseurs $\mathbb {V} _{1}\,{,}\qquad \mathbb {V} _{2}\,{,}\qquad \mathbb {F} _{2}\,.$

${\begin{aligned}{\text{Deux opérateurs utiles }}&{\text{agissant sur les torseurs sont : }}\odot {\text{ et }}\oplus {\text{ définis par : }}\\\mathbb {V} _{1}\odot \mathbb {V} _{2}&={\begin{Vmatrix}{\vec {\boldsymbol {\omega }}}_{1}\wedge {\vec {\boldsymbol {\omega }}}_{2}\\{\vec {\boldsymbol {\omega }}}_{1}\wedge {\vec {\mathbf {v} }}_{2}\,+\,{\vec {\mathbf {v} }}_{1}\wedge {\vec {\boldsymbol {\omega }}}_{2}\end{Vmatrix}}.\\\mathbb {V} _{1}\oplus \mathbb {F} _{2}&={\begin{Vmatrix}{\vec {\boldsymbol {\omega }}}_{1}\wedge {\vec {\boldsymbol {\mu _{2}}}}\,+\,{\vec {\mathbf {v} }}_{1}\wedge {\vec {\mathbf {f} }}_{2}\\{\vec {\boldsymbol {\omega }}}_{1}\wedge {\vec {\mathbf {f} }}_{2}\end{Vmatrix}}.\end{aligned}}$

**Notations spatiales (avec des sextuplets)**

**Changement d'un même torseur dans 2 repères consécutifs**

Soit R1 (« ancien repère ») et R2 (« nouveau repère ») deux repères. Pour alléger les notations nous posons d'abord ici :

* ${\vec {\boldsymbol {\xi }}}={\overrightarrow {{O\!_{1}}{O\!_{2}}}},$ vecteur dont on utilisera les composantes dans R1 ;
* ${\mathcal {P}}={\mathcal {P}}_{1,2},$ la matrice de passage(33) directe de R1 vers R2 ;
* $\mathbb {A} =\mathbb {A} _{1,2},$ la matrices de passage(66), de R1 vers R2, pour les torseurs.

Nous disposons des formules suivantes :

${\begin{aligned}\mathbb {A} ^{t}&={\begin{Vmatrix}{\mathcal {P}}^{t}&\quad 0\\{\mathcal {P}}^{t}\,{[{\boldsymbol {\xi }}]^{t}}&\quad {\mathcal {P}}^{t}\end{Vmatrix}};\quad \mathbb {V} _{2}=\mathbb {A} ^{t}\,\mathbb {V} _{1}.\\\mathbb {A} ^{-t}&={\begin{Vmatrix}{\mathcal {P}}&\quad 0\\{[{\boldsymbol {\xi }}]}\,{\mathcal {P}}&\quad {\mathcal {P}}\end{Vmatrix}};\quad \mathbb {V} _{1}=\mathbb {A} ^{-t}\,\mathbb {V} _{2}.\\\mathbb {A} &={\begin{Vmatrix}{\mathcal {P}}&\quad {[{\boldsymbol {\xi }}]}\,{\mathcal {P}}\\0&\quad {\mathcal {P}}\end{Vmatrix}};\quad \mathbb {F} _{1}=\mathbb {A} \,\mathbb {F} _{2}.\\\mathbb {A} ^{-1}&={\begin{Vmatrix}{\mathcal {P}}^{t}&\quad {\mathcal {P}}^{t}\,{[{\boldsymbol {\xi }}]^{t}}\\0&\quad {\mathcal {P}}^{t}\end{Vmatrix}};\quad \mathbb {F} _{2}=\mathbb {A} ^{-1}\,\mathbb {F} _{1}.\end{aligned}}$

**Notations spatiales (avec des sextuplets)**

**Équations de Newton-Euler**

Soit un corps rigide dont la masse, le centre de gravité, le tenseur d'inertie au centre de gravité, sont respectivement $m{\text{ , G , }}\mathbf {I} _{\rm {G}}$. Le point O étant une origine quelconque, en posant :

* ${\vec {\boldsymbol {\rho }}}={\overrightarrow {\rm {OG}}}$, pour définir la position du centre de gravité.
* ${\mathcal {\tilde {I}}}=\mathbf {I} _{\rm {G}}/m$ : le tenseur réduit (33), au centre de gravité.
* ${\mathfrak {I}}=m\,{\begin{Vmatrix}{{\mathcal {\tilde {I}}}-[{\boldsymbol {\rho }}}]^{2}&[{\boldsymbol {\rho }}]\\*[{\boldsymbol {\rho }}]&{\boldsymbol {1}}_{(33)}\end{Vmatrix}}$, matrice d'inertie (6×6) du corps isolé.

En notation sextuplet et en un point quelconque d'un solide rigide, les équations de Newton-Euler (en) prennent la forme :

$\mathbb {F} ={\mathfrak {I}}\,\mathbb {\dot {V}} +\mathbb {V} \!\oplus {\mathfrak {I}}\,\mathbb {V} .$

### Algorithmes numériques provenant de la formulation vectorielle

* Nous considérons d'abord ici les chaînes cinématiques ouvertes simples. Les corps constitutifs : C1...CN, sont numérotés de 1 à N, l'indice 0 correspond à un repère absolu ou règne un champ de pesanteur d'intensité g. La liaison C0-C1 possède 6 degrés de liberté (ddl) pour les robots à base libre ou flottante, et 0 ddl dans le cas des robots à base fixe.
* Les grandeurs ${\boldsymbol {\omega }}_{j},\mathbf {v} _{j},{\boldsymbol {\mu }}_{j},\cdots$ caractérisent le corps Cj, et sont projetées sur son repère propre Rj, fixé à Cj, d'origine Oj.
* Le corps Cj se meut autour de l'articulation j, d'axe ${\vec {z}}_{j}\;$ (conformément à la convention de Khalil-Kleinfinger), dont la nature est caractérisée par une matrice (6×1) (sauf pour la base libre) :

$\mathbb {S} _{j}={\begin{Vmatrix}0\\0\\1\\0\\0\\0\end{Vmatrix}}:$ pivot ; $\mathbb {S} _{j}={\begin{Vmatrix}0\\0\\0\\0\\0\\1\end{Vmatrix}}:$ glissière ; $\mathbb {S} _{1}=\mathbf {1} _{(66)}:\,$ si C1 est une base libre.

* Quelques modifications mineures permettent d'adapter les algorithmes pour chaînes simples au cas des chaînes arborescentes. En adoptant un vocabulaire généalogique, le principe de ces modifications est de remplacer le prédécesseur d'un corps par son « père ». Chaque corps, sauf C0, a un seul père, quoiqu'il puisse posséder un nombre quelconque de fils (zéro pour un corps terminal ou feuille du graphe représentatif). Avec la convention « numéro père < numéro fils » le parcours dans le graphe s'effectue de manière adéquate et la simplicité des algorithmes est conservée.
* Chaînes fermées...

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Principe**

L'algorithme RNEA, résout le problème de la dynamique inverse : à un instant donné, $\mathbf {q} ,\,\mathbf {\dot {q}} ,\,\mathbf {\ddot {q}}$ étant connus, on obtient les efforts des actionneurs $\mathbf {\tau } .$ Il comporte deux boucles de récurrences :

* Une montée (indices de 1 à N) cinématique, qui utilise la composition des vitesses et des accélérations.
* Une descente (de N à 1) des efforts, où interviennent les lois de Newton-Euler et des actions réciproques.

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Implémentation de la pesanteur**

L'effet de la pesanteur est (rigoureusement) obtenu par une accélération du corps de base C1 opposée à la pesanteur.

L'axe ${\overrightarrow {O_{0}\,z_{0}}}$ étant la verticale ascendante du repère absolu galiléen ${\rm {R_{0}}}$, on ajoute artificiellement l'accélération $\mathbf {\tilde {g}} _{1}$ à l'accélération naturelle du repère ${\rm {R_{1}}}$ avec :

$\mathbf {\tilde {g}} _{0}={\begin{Vmatrix}0\\0\\+\left|g\right|\end{Vmatrix}}\,;\qquad {\mathcal {P}}\!{_{0}}={\mathcal {P}}_{0,1}\,;\qquad \mathbf {\tilde {g}} _{1}={\mathcal {P}}_{0}^{t}\,\mathbf {\tilde {g}} _{0}.$

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Conditions initiales**

Les conditions initiales sont ${\boldsymbol {\omega }}_{1},\mathbf {v} _{1},{\boldsymbol {\dot {\omega }}}_{1},\mathbf {\gamma } _{1},$ les vitesses et les accélérations de la base (corps $\mathrm {C} _{1}$), les variables articulaire proprement dites, $q_{2},q_{3},\cdots ,q_{N}$) et éventuellement, l'effort ${\mathfrak {F}}_{N+1}$) exercé par l'environnement sur le point de contact $\mathrm {O} _{N+1}$ du corps terminal $\mathrm {C} _{N}$ , projeté dans le repère $\mathrm {R} _{N+1}$ attaché à ce point de contact appartenant à $\mathrm {C} _{N}$ :

${\begin{aligned}{\begin{cases}\mathbb {V} _{0}&=0\;;\\\mathbb {\dot {V}} _{0}&={\begin{Vmatrix}0\\-{\boldsymbol {\vec {g}}}\end{Vmatrix}}\;;\\\\\mathbb {F} _{N+1}&=-{{\mathfrak {F}}_{N+1}}.\end{cases}}\end{aligned}}$

La base mobile ayant six degrés de liberté (et non un seul), l'harmonisation des notations est imparfaite. Ici nous adoptons la notation conventionnelle suivante :

${\begin{aligned}{\begin{cases}{\text{Rappels : }}&\mathbb {S} _{1}={\boldsymbol {1}}_{(66)}\;;\;q_{1}\Leftrightarrow \mathbf {q} {(1)}_{(61)},\cdots \;;\\\mathbb {V} _{1}=\mathbb {S} _{1}\,{\dot {q}}_{1}&={\begin{Vmatrix}{\boldsymbol {\omega _{1}}}\\\mathbf {v} _{1}\end{Vmatrix}}\;;\\\\\mathbb {\dot {V}} _{1}=\mathbb {S} _{1}\,{\ddot {q}}_{1}&={\begin{Vmatrix}{\boldsymbol {\dot {\omega }}}_{1}\\{\boldsymbol {\gamma _{1}}}-{\boldsymbol {\omega _{1}}}\wedge \mathbf {v} _{1}\end{Vmatrix}}\;;\\\\\tau _{1}\Leftrightarrow {\boldsymbol {\tau }}{(1)}_{(61)}=\mathbb {F} _{1}\;.\\\end{cases}}\end{aligned}}$

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Montée cinématique**

For j= 1 to N do ${\begin{aligned}{\begin{cases}\qquad_{i}&=_{j-1}\,;\,\mathbb {A} _{i}=\mathbb {A} _{ij}\;;\\\qquad \mathbb {V} _{j}&=\mathbb {A} _{i}^{t}\,\mathbb {V} _{i}+\mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad \mathbb {\dot {V}} _{j}&=\mathbb {A} _{i}^{t}\,\mathbb {\dot {V}} _{i}+\mathbb {S} _{j}\,{\ddot {q}}_{j}+\mathbb {V} _{j}\!\odot \mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad \mathbb {R} _{j}&={\mathfrak {I}}_{j}\,\mathbb {\dot {V}} _{j}+\mathbb {V} _{j}\!\oplus {\mathfrak {I}}_{j}\,\mathbb {V} _{j}.\\\end{cases}}\end{aligned}}$

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Descente des efforts**

For k= N+1 downto 2 do ${\begin{aligned}{\begin{cases}\qquad_{j}&=_{k-1}\,;\,\mathbb {A} _{j}=\mathbb {A} _{jk}\;;\\\qquad \mathbb {F} _{j}&=\mathbb {A} _{j}\,\mathbb {F} _{k}+\mathbb {R} _{j}\;;\\\qquad \tau _{j}&=\mathbb {S} _{j}^{t}\,\mathbb {F} _{j}.\end{cases}}\end{aligned}}$

**Algorithme RNEA = Recursive Newton Euler Algorithm**

**Modifications pour une chaîne arborescente**

Moyennant un adroit agencement des instructions, il est possible de ne faire appel qu'aux « grandeurs du père » et l'algorithme précédent est à peine modifié.

* Montée cinématique

For j= 1 to N do ${\begin{aligned}{\begin{cases}\qquad &{\text{p = père(j)}}\,;\\\qquad \mathbb {V} _{j}&=\mathbb {A} _{pj}^{t}\,\mathbb {V} _{i}+\mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad \mathbb {\dot {V}} _{j}&=\mathbb {A} _{pj}^{t}\,\mathbb {\dot {V}} _{i}+\mathbb {S} _{j}\,{\ddot {q}}_{j}+\mathbb {V} _{j}\!\odot \mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad \mathbb {F} _{j}&={\mathfrak {I}}_{j}\,\mathbb {\dot {V}} _{j}+\mathbb {V} _{j}\!\oplus {\mathfrak {I}}_{j}\,\mathbb {V} _{j}.\\\end{cases}}\end{aligned}}$

* Descente des efforts

For j= N downto 1 do ${\begin{aligned}{\begin{cases}\qquad &{\text{p = père(j)}}\,;\\\qquad \tau _{j}&=\mathbb {S} _{j}^{t}\,\mathbb {F} _{j}\;;\\\qquad &{\text{if }}p>0{\text{ then :}}\\\qquad \mathbb {F} _{p}&=\mathbb {F} _{p}+\mathbb {A} _{pj}\,\mathbb {F} _{j}\;;\\&{\text{ end if}}.\\\end{cases}}\end{aligned}}$

**Algorithme ABA = Articulated Body Inertia Algorithm**

* Il traite le problème de dynamique directe : connaissant l'état et les efforts des actionneurs, on obtient les accélérations (ce qui permet d'aboutir au mouvement par intégration).
* L'idée de départ est de considérer une partie de la chaîne comme étant un seul corps rigide dont on calcule l'inertie équivalente (« l'articulated body inertia ») $\mathbb {K} ,$ de manière à pouvoir écrire des équations auxiliaires du mouvement du type : $\mathbb {F} =\mathbb {K} \,\mathbb {\dot {V}} +\mathbb {D}$ (cf. Newton-Euler).
* Il est souvent appelé, d'après le nom de son auteur, algorithme de Featherstone.
* Le cas d'une chaîne simple est seul considéré ici.

**Algorithme ABA = Articulated Body Inertia Algorithm**

**Conditions initiales**

${\begin{aligned}{\begin{cases}\qquad \mathbb {V} _{1}&={\begin{Vmatrix}{\boldsymbol {\omega _{1}}}\\\mathbf {v} _{1}\end{Vmatrix}}\;;\\\\\qquad {\boldsymbol {\alpha }}_{1}&=0\,;\quad {\text{car}}\quad \mathbb {V} _{1}\!\odot \mathbb {V} _{1}\mathbf {\dot {q}} _{1}=0\;;\\\qquad {\boldsymbol {\beta }}_{1}&=\mathbb {V} _{1}\!\oplus {\mathfrak {I}}_{1}\,\mathbb {V} _{1}\;;\\\mathbb {K} _{N+1}&=0\;;\\\mathbb {B} _{N+1}&=\mathbb {F} _{N+1}\;;\\\mathbb {D} _{N+1}&=\mathbb {F} _{N+1}.\end{cases}}\end{aligned}}$

**Algorithme ABA = Articulated Body Inertia Algorithm**

**Montée cinématique pour l'initialisation des vitesses**

For j= 2 to N do ${\begin{aligned}{\begin{cases}\qquad_{i}&=_{j-1}\,;\\\qquad \mathbb {V} _{j}&=\mathbb {A} _{j}^{t}\,\mathbb {V} _{i}+\mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad {\boldsymbol {\alpha }}_{j}&=\mathbb {V} _{j}\!\odot \mathbb {S} _{j}\,{\dot {q}}_{j}\;;\\\qquad {\boldsymbol {\beta }}_{j}&=\mathbb {V} _{j}\!\oplus {\mathfrak {I}}_{j}\,\mathbb {V} _{j}.\\\end{cases}}\end{aligned}}$

**Algorithme ABA = Articulated Body Inertia Algorithm**

**Descente des inerties des corps articulés**

For j= N downto 1 do ${\begin{aligned}{\begin{cases}\qquad_{k}&=_{j+1}\,;\\\qquad w_{k}&=\mathbb {S} _{k}^{t}\mathbb {K} _{k}\mathbb {S} _{k}\,;\\\qquad \mathbb {K} _{j}&={\mathfrak {I}}_{j}+\mathbb {A} _{j}\left[\mathbf {1} _{(66)}-\mathbb {K} _{k}\mathbb {S} _{k}\mathbb {S} _{k}^{t}/w_{k}\right]\mathbb {K} _{k}\mathbb {A} _{j}^{t}\,;\\\qquad \mathbb {B} _{j}&=\mathbb {A} _{j}\left[\mathbb {D} _{k}+\mathbb {K} _{k}\mathbb {S} _{k}\left(\tau _{k}-\mathbb {S} _{k}^{t}\mathbb {D} _{k}\right)/w_{k}\right]+{\boldsymbol {\beta }}_{j}\;;\\\qquad \mathbb {D} _{j}&=\mathbb {K} _{j}{\boldsymbol {\alpha }}_{j}+\mathbb {B} _{j}.\\\end{cases}}\end{aligned}}$

**Algorithme ABA = Articulated Body Inertia Algorithm**

**Remontée pour les accélérations**

For j= 1 to N do ${\begin{aligned}{\begin{cases}_{i}&=_{j-1}\,;\\{\ddot {\mathrm {q} }}_{j}&=\left(\tau _{j}-\mathbb {S} _{j}^{t}\left[\mathbb {K} _{j}\mathbb {A} _{i}{\dot {\mathbb {V} }}_{i}+\mathbb {D} _{j}\right]\right){/}w_{j}\;;\\{\dot {\mathbb {V} }}_{j}&=\mathbb {A} _{i}^{t}\,{\dot {\mathbb {V} }}_{i}+\mathbb {S} _{j}\,{\ddot {q}}_{j}+\mathbb {V} _{j}\!\odot \mathbb {S} _{j}\,{\dot {q}}_{j}.\end{cases}}\end{aligned}}$

**Algorithme CRBM = Composite Rigid Body Method**

Cet algorithme calcule la matrice d'inertie dans l'espace de configuration. Son principe consiste à « rigidifier » l'arborescence, excepté en une seule articulation, en considérant successivement les N configurations $\mathbf {\dot {q}} =0\,;\qquad \mathbf {\ddot {q}} =0\,,\,{\ddot {q}}_{\ell }=1,\,\ell =1,\cdots ,N.$ Pour j = 1, $\mathbb {F}$ doit être considéré comme une matrice (66).

${\mathfrak {M}}=0.$

For j= 1 to N do ${\begin{aligned}{\begin{cases}{\mathcal {K}}_{j}&={\mathfrak {I}}_{j}.\\\end{cases}}\end{aligned}}$

for j= N downto 1 do ${\begin{aligned}{\begin{cases}\quad \mathbb {F} &={\mathcal {K}}_{j}\mathbb {S} _{j}\,;\\\quad {\mathfrak {M}}_{jj}&=\mathbb {S} _{j}^{t}\mathbb {F} \,;\\\quad p&={\text{père}}{(j)}\,;\quad \qquad {\text{if }}p>0{\text{ then :}}\\\quad {\mathcal {K}}_{p}&={\mathcal {K}}_{p}+\mathbb {A} _{pj}{\mathcal {K}}_{j}\mathbb {A} _{pj}^{t}\,;{\text{end if}}\\\quad \ell &=j\;;\\\quad &{\text{while }}p>0{\text{ do :}}\\\quad \mathbb {F} &=\mathbb {A} _{p\ell }\mathbb {F} \,;\\\quad \ell &={\text{père}}(\ell )\,;\\\quad {\mathfrak {M}}_{j\ell }&=\mathbb {S} _{\ell }^{t}\mathbb {F} \,;\qquad {\mathfrak {M}}_{\ell j}={\mathfrak {M}}_{j\ell }\,;\\&{\text{ end while.}}.\\\end{cases}}\end{aligned}}$

**Algorithme GAHA = Gibbs-Appell Hessian Algorithm**

Cet algorithme calcule la matrice d'inertie dans l'espace de configuration. Il s'avèrerait particulièrement efficace pour les chaînes simples (bras manipulateurs). Il a l'originalité de provenir des équations de Gibbs-Appell, c'est-à-dire d'un calcul des variations opérant sur « l'énergie » d'accélération (analogue de l'énergie cinétique dans lequel le carré des vitesses est remplacé par le carré des accélérations). La matrice d'inertie du système est en effet la matrice hessienne de l'énergie d'accélération.

### Formulation analytique

Soit un système mécanique articulé composé de $Nc$ corps et dont les articulations sont des pivots ou des glissières.

* Dans le cas d'un système à base fixe, le nombre de variables articulaires est égal au nombre de degrés de liberté du système $N=Nc.$ (chaque corps est mobile autour de son articulation).
* Dans le cas d'un système à base entièrement libre, la base, C1, possède 6 degrés de liberté et le nombre de degrés de liberté du système est alors $N=Nc+5.$

En appelant $q^{j}\,;\,{j=1},\cdots ,N$ les variables de configuration (ou coordonnées généralisées) les grandeurs qui interviennent dans la formation des équations de Lagrange sont :

* L'énergie cinétique du système $T(\mathbf {q} ,\mathbf {\dot {q}} )$ , qui est la somme des énergies cinétiques des Nc corps constitutifs ${\rm {{(\,Nc\leqslant N\,)}.}}$ En appelant, pour le corps d'indice $_{i}\;,\mathbf {v} _{i},\;{\boldsymbol {\omega }}_{i},\;\mathbf {I} _{i},$ respectivement, la vitesse au centre de gravité, le vecteur rotation, le tenseur d'inertie au centre de gravité, toutes ces grandeurs étant exprimées dans le repère absolu galiléen, on a :

$T(\mathbf {q} ,\mathbf {\dot {q}} )={\frac {1}{2}}\sum _{i=1}^{Nc}\left[m_{i}|\mathbf {v} _{i}|^{2}+{\boldsymbol {\omega }}_{i}^{t}(\mathbf {I} _{i}{\boldsymbol {\omega }}_{i})\right].$

* La matrice d'inertie du système ${\mathfrak {M}}_{jk}(\mathbf {q} )\,,$ est une matrice [N×N], symétrique, définie positive, telle que :

$T(\mathbf {q} ,\mathbf {\dot {q}} )={\frac {1}{2}}\sum _{j=1}^{N}\sum _{k=1}^{N}{{\mathfrak {M}}_{jk}{\dot {q}}^{j}{\dot {q}}^{k}}={\frac {1}{2}}{\mathfrak {M}}_{jk}{\dot {q}}^{j}{\dot {q}}^{k},$ avec la convention de sommation d'Einstein sur les indices répétés.

* L'énergie potentielle : $V(\mathbf {q} ).$

Dans le cas où il n'y a pas de composant élastique, l'énergie potentielle $V(\mathbf {q} ,g)$ est proportionnelle à l'intensité de la pesanteur $g,$ et avec ${\boldsymbol {r}}_{j}={\overrightarrow {OG_{j}}}$ dans R0, elle devient simplement : $V(\mathbf {q} ,g)=\sum _{j=1}^{Nc}[-m_{j}{\boldsymbol {g}}^{t}{\boldsymbol {r}}_{j}].$ On pose ici : ${\mathcal {V}}_{k}(\mathbf {q} )={\frac {\partial \ V_{\mathbf {q} )}{\partial q^{k}}},$ pour le terme d'énergie potentielle d'indice $k.$

* $\tau _{k}$ : Effort (couple ou force) exercé par l'actionneur de l'articulation $k$.
* Le lagrangien est défini par la différence entre l'énergie cinétique $T$ et l'énergie potentielle $V$ :

    ${\mathcal {L}}=T-V.$

**Équations sans contrainte**

Avec les formules précédente pour T et V, l'expression générale des équations de Lagrange :

       ${\frac {\mathrm {d} }{\mathrm {d} t}}\!\left({\frac {\partial {\mathcal {L}}}{\partial {\dot {q}}^{k}}}\right)-{\frac {\partial {\mathcal {L}}}{\partial q^{k}}}={\frac {\mathrm {d} }{\mathrm {d} t}}\!\left({\frac {\partial T}{\partial {\dot {q}}^{k}}}\right)-{\frac {\partial T}{\partial q^{k}}}+{\frac {\partial V}{\partial q^{k}}}=\tau _{k}\;;$

peut se mettre sous la forme habituelle suivante :

${\begin{aligned}{\begin{cases}{\mathfrak {M}}_{jk}(\mathbf {q} ){\ddot {q}}{\,}^{j}&+\quad {\mathfrak {C}}_{k}(\mathbf {q} ,\mathbf {\dot {q}} )+{\mathcal {V}}_{k}(\mathbf {q} )=\tau _{k}\,;\\{\mathfrak {C}}_{k}(\mathbf {q} {,}\mathbf {\dot {q}} )&=\Gamma _{ijk}(\mathbf {q} ){\dot {q}}{\,}^{i}{\dot {q}}{\,}^{j}\,;\\\Gamma _{ijk}&={\frac {1}{2}}\left({\frac {\partial {\mathfrak {M}}_{jk}}{\partial q^{i}}}+{\frac {\partial {\mathfrak {M}}_{ki}}{\partial q^{j}}}-{\frac {\partial {\mathfrak {M}}_{ij}}{\partial q^{k}}}\right)\,.\end{cases}}\end{aligned}}$

Le terme ${\mathfrak {C}}_{k}$ représente les forces centrifuge et de Coriolis et peut être exprimé avec les symboles de Christoffel de première espèce.

Le calcul algébrique des coefficients de ces équations est envisageable avec un logiciel de calcul symbolique. Toutefois, les algorithmes des sections précédentes, qui sont basés sur la formulation vectorielle de la mécanique, permettent aussi de calculer numériquement ces coefficients.

**Équations avec contraintes**

Lorsque des points du robot sont en contact avec un obstacle fixe de l'environnement, sa position $\mathbf {Z} =\phi (\mathbf {q} )$ est une constante, ce qui correspond à des liaisons bilatérales (qui sont permanentes si les vitesses et les accélérations sont nulles, ou transitoires dans le cas contraire). Cette situation est représentée par les équations de Lagrange avec r > 0 contraintes égalités :

${\begin{aligned}{\begin{cases}\quad \phi _{\ell }(\mathbf {q} )&=0\,;\;\ell =1,\cdots ,r.\\\quad {\mathfrak {J}}_{\ell i}(\mathbf {q} ){\dot {q}}\,^{i}\!&=0\,;\qquad {\mathfrak {J}}_{\ell i}(\mathbf {q} )={\frac {\partial \phi _{\ell }}{\partial q^{i}}}\,;\quad \ell =1,\cdots ,r\,;\quad i,k=1,\cdots ,N.\\{\mathfrak {M}}_{ik}(\mathbf {q} ){\ddot {q}}{\,}^{i}&+\;{\mathfrak {C}}_{k}(\mathbf {q} ,\mathbf {\dot {q}} )+{\mathcal {V}}_{k}(\mathbf {q} )=\tau _{k}+{\mathfrak {J}}_{k\ell }^{t}(\mathbf {q} )\lambda ^{\ell }.\\\qquad {\text{Les r variables }}&{\text{ supplémentaires }}{\boldsymbol {\lambda }}{\text{ sont les multiplicateurs de Lagrange.}}\end{cases}}\end{aligned}}$

Lorsque les contraintes représentent des liaisons ayant une signification géométrique, les multiplicateurs sont les composantes des efforts de réaction exercés par l'environnement sur le système mécanique.

Il est physiquement plus satisfaisant de modéliser les actions de contact par des liaisons unilatérales et par des équations de Lagrange avec contraintes inégalités :

${\begin{aligned}{\begin{cases}\quad \phi _{\ell }(\mathbf {q} )&=0\,;\;\ell =1,\cdots ,r.\\\quad \psi _{m}(\mathbf {q} )&\geqslant 0\,;\;m=1,\cdots ,s.\\\quad {\mathfrak {J}}_{\ell i}(\mathbf {q} ){\dot {q}}\,^{i}&=0\,;\qquad {\mathfrak {J}}_{\ell i}(\mathbf {q} )={\frac {\partial \phi _{\ell }}{\partial q^{i}}}\,;\quad \ell =1,\cdots ,r\,;\quad i,k=1,\cdots ,N.\\\;{\mathfrak {K}}_{mi}(\mathbf {q} ){\dot {q}}\,^{i}\!&\geqslant 0\,;\qquad {\mathfrak {K}}_{mi}(\mathbf {q} )={\frac {\partial \psi _{m}}{\partial q^{i}}}\,;\quad m=1,\cdots ,s\,;\quad i,k=1,\cdots ,N.\\{\mathfrak {M}}_{ik}(\mathbf {q} ){\ddot {q}}{\,}^{i}&+\;{\mathfrak {C}}_{k}(\mathbf {q} ,\mathbf {\dot {q}} )+{\mathcal {V}}_{k}(\mathbf {q} )=\tau _{k}+{\mathfrak {J}}_{k\ell }^{t}(\mathbf {q} )\lambda ^{\ell }+{\mathfrak {K}}_{km}^{t}(\mathbf {q} )\mu ^{m}.\\\quad {\text{Les s variables }}&{\text{ supplémentaires }}{\boldsymbol {\mu }}{\text{ sont les multiplicateurs de Karush-Kuhn-Tucker qui vérifient les conditions :}}\\\qquad \psi _{m}\geqslant 0&\Leftrightarrow \mu ^{m}=0\,;\qquad \psi _{m}=0\Leftrightarrow \mu ^{m}\geqslant 0.\end{cases}}\end{aligned}}$

**Équations avec termes de glissement**

Considérons un point du robot en contact avec une surface fixe dont le coefficient de frottement est ${\hat {\mathfrak {f}}}.$ Utilisons un repère fixe, Oxyz, orthonormé, tel que la normale au plan tangent à la surface soit l'axe Oz. La vitesse du point et la force de réaction qui s'exerce sur le robot étant respectivement : $\mathbf {\vec {v}} {\text{ et }}\mathbf {\vec {f}} ,$ en introduisant la matrice jacobienne partielle ${\mathfrak {Jp}}_{(6N)},$la loi de Coulomb, implantée dans les équations de Lagrange, prend, hors cas particuliers, la forme ci-dessous :

${\mathbb {V} p}_{(61)}(\mathbf {q} ,\mathbf {\dot {q}} )={\mathfrak {Jp}}_{(6N)}*\mathbf {\dot {q}} _{(N1)}={\begin{Vmatrix}\omega _{x}&\omega _{y}&\omega _{z}&v_{x}&v_{y}&v_{z}\,=0\end{Vmatrix}}^{t}.$

* Cas adhérence, point de contact non glissant.

${f_{z}^{2}>{\hat {\mathfrak {f}}}*(f_{x}^{2}+f_{y}^{2})\;;\;{\mathbb {V} p}_{(61)}={\mathfrak {Jp}}_{(6N)}\;\mathbf {\dot {q}} ={\begin{Vmatrix}\omega _{x}\\\omega _{y}\\\omega _{z}\\v_{x}=0\\v_{y}=0\\v_{z}=0\end{Vmatrix}}\Rightarrow \quad {\mathfrak {M}}\mathbf {\ddot {q}} +\cdots ={\boldsymbol {\tau }}+{\mathfrak {Jp}}_{(N6)}^{t}\Lambda ={\boldsymbol {\tau }}+{\mathfrak {Jp}}^{t}{\begin{Vmatrix}0\\0\\0\\f_{x}\neq 0\\f_{y}\neq 0\\f_{z}>0\end{Vmatrix}}}.$

* Cas glissement, point de contact glissant.

$f_{z}^{2}={\hat {\mathfrak {f}}}*(f_{x}^{2}+f_{y}^{2})\;;\;{\mathbb {V} p}_{(61)}={\mathfrak {Jp}}\;\mathbf {\dot {q}} ={\begin{Vmatrix}\omega _{x}\\\omega _{y}\\\omega _{z}\\v_{x}\neq 0\\v_{y}\neq 0\\v_{z}=0\end{Vmatrix}}\Rightarrow \quad {\mathfrak {M}}\mathbf {\ddot {q}} +\cdots ={\boldsymbol {\tau }}+{\mathfrak {Jp}}^{t}\Lambda ={\boldsymbol {\tau }}+{\mathfrak {Jp}}^{t}{\begin{Vmatrix}0\\0\\0\\f_{x}=-{\hat {\mathfrak {f}}}*f_{z}*v_{x}/{\sqrt {v_{x}^{2}+v_{y}^{2}}}\\f_{y}=-{\hat {\mathfrak {f}}}*f_{z}*v_{y}/{\sqrt {v_{x}^{2}+v_{y}^{2}}}\\f_{z}>0\end{Vmatrix}}.$

### Mécanique non régulière

Le simple exemple de la préhension d'un objet qui est saisi puis posé ainsi que l'exemple des robots à pattes font comprendre intuitivement que les formalismes de la dynamique traditionnelle, qui considère des systèmes évoluant continument dans le temps, sont insuffisants pour permettre une modélisation réaliste de nombreux robots évolués.

* Il convient donc de prendre en compte des systèmes à structure variable (en) qui sont des systèmes hybrides et d'utiliser des fonctions continues par morceaux. Les transitions entre phases temporelles pouvant être détectées avec des « fonctions critères ».
* Ces considérations interviennent, selon des réalisations plus ou rigoureuses, dans les moteurs physiques de diverses bibliothèques logicielles de simulation mécanique. Exemples : Bullet, Newton Game Dynamics, Open Dynamics Engine.
* La mécanique non régulière (en) considère les systèmes mécaniques multi-corps avec des contacts, du frottement et des impacts. C'est une matière qui présente des difficultés mathématiques et qui englobe plusieurs approches dont les développements ne sont sans doute pas entièrement achevés.

Un des pionniers de la mécanique non régulière est le mécanicien et mathématicien français Jean-Jacques Moreau

Quelques thèmes à développer dans le cadre de la mécanique non régulière :

**Liaisons unilatérales**

Algorithme pour le cas plan : Complémentarité linéaire. Problème de complémentarité non linéaire (en)

**Impacts et chocs**

Un choc se traduit par une discontinuité dans les vitesses, la détermination de l'état après un choc dépend des hypothèses.

* Voir : Choc élastique - Collision inélastique Coefficient de restitution - Percussion mécanique
* Exemple de chocs : Chocs des billes suspendues.

**Frottements**

* Cone de frottement : Analyse convexe - Fonction multivaluée - Mesure (mathématiques).
* Glissement - Adhérence (physique) - Stick-slip.
* Problèmes complémentaires ; inclusions différentielles.

**Détection des collisions**

détections des collisions

