# Denavit-Hartenberg

La convention, ou notation, de Denavit-Hartenberg permet de caractériser la position relative de deux solides avec seulement quatre paramètres (au lieu de six). Ceci au prix de certaines restrictions dans le choix des systèmes de coordonnées (repères). En robotique, on rencontre en fait deux définitions qui diffèrent légèrement :
* La convention de Denavit-Hartenberg, qui fut introduite en 1955, par Jacques Denavit et Richard S. Hartenberg.
* La convention de Denavit-Hartenberg modifiée, appelée aussi convention de Khalil-Kleinfinger, qui est préconisée depuis 1986, (parce qu'elle permet un allègement du formalisme dans les exposés, portant sur les méthodes numériques par récurrence de la dynamique des robots).
Les deux notations sont couramment utilisées pour la modélisation des chaînes cinématiques constituées par des corps solides reliés entre eux par des articulations rotoïdes (pivots) ou prismatiques (glissières). Pour chaque articulation on peut définir l'axe de sa liaison et sa variable articulaire.

## Notation de Denavit-Hartenberg

Les axes de coordonnées sont définis par les règles suivantes :
* L'axe ${\overrightarrow {z_{n-1}}}$ est porté par l'axe de la liaison reliant le corps C$_{n-1}$au corps C$_n$. (${\overrightarrow {z_{n}}}$ est donc porté par l'axe de la liaison reliant le corps C$_n$au corps C$_{n+1}$).
* L'axe ${\overrightarrow {x_{n}}}$ est porté par la normale commune à ${\overrightarrow {z_{n-1}}}$ et ${\overrightarrow {z_{n}}}$ soit : ${\overrightarrow {x_{n}}}={\overrightarrow {z_{n-1}}}\wedge {\overrightarrow {z_{n}}}$.
* L'axe ${\overrightarrow {y_{n}}}$ est choisi de manière à former un trièdre direct avec l'axe ${\overrightarrow {z_{n}}}$ et ${\overrightarrow {x_{n}}}\,,\quad$ soit : ${\overrightarrow {y_{n}}}={\overrightarrow {z_{n}}}\wedge {\overrightarrow {x_{n}}}$.
La transformation entre les corps successifs C$_{n-1}$ et C$_n$ est décrite par les quatre paramètres ci-dessous:
* $d=d_{n}$, la distance selon l'axe ${\overrightarrow {z_{n-1}}}$ entre les axes ${\overrightarrow {x_{n-1}}}$ et ${\overrightarrow {x_{n}}}$ . C'est la variable articulaire dans le cas glissière.
* $\theta =\theta _{n}$, l'angle autour de l'axe ${\overrightarrow {z_{n-1}}}$ entre les axes ${\overrightarrow {x_{n-1}}}$ et ${\overrightarrow {x_{n}}}$ . C'est la variable articulaire dans le cas pivot.
* $r=r_{n}$ (ou $a=a_{n}$ ), la distance selon l'axe ${\overrightarrow {x_{n}}}$ entre les axes ${\overrightarrow {z_{n-1}}}$ et ${\overrightarrow {z_{n}}}$. C'est donc également la longueur de la normale commune.
* $\alpha =\alpha _{n}$, l'angle autour de l'axe ${\overrightarrow {x_{n}}}$ entre les axes ${\overrightarrow {z_{n-1}}}$ et ${\overrightarrow {z_{n}}}$
Ici $r=r_{n}$ et $\alpha =\alpha _{n}$ sont des paramètres constitutifs qui caractérisent le corps C$_n$.
En multipliant les matrices (4x4) de rotation et de translation élémentaire (autour ou le long d'un seul axe) en coordonnées homogènes, on obtient la matrice de passage en coordonnées homogènes entre les corps C$_{n-1}$ et C$_n$ :
${\mathfrak {P}}_{n-1,n}={\begin{pmatrix}\cos(\theta )&-\cos(\alpha )\sin(\theta )&\sin(\alpha )\sin(\theta )&r\,\cos(\theta )\\\sin(\theta )&\cos(\alpha )\cos(\theta )&-\sin(\alpha )\cos(\theta )&r\,\sin(\theta )\\0&\sin(\alpha )&\cos(\alpha )&d\\0&0&0&1\end{pmatrix}}\;.$.
La matrice de Denavit-Hartenberg modifiée :
${\mathfrak {P}}_{n-1,n}^{-1}={\mathfrak {P}}_{n,n-1}={\begin{pmatrix}\cos(\theta )&\sin(\theta )&0&-r\\-\cos(\alpha )\sin(\theta )&\cos(\alpha )\cos(\theta )&\sin(\alpha )&-d\,\sin(\alpha )\\\sin(\alpha )\sin(\theta )&-\sin(\alpha )\cos(\theta )&\cos(\alpha )&-d\,\cos(\alpha )\\0&0&0&1\end{pmatrix}}\;.$

## Convention de Khalil-Kleinfinger

À l'instar de la convention de Denavit-Hartenberg, chaque transformation faisant passer du trièdre R$_{n-1}$ au trièdre R$_n$ est le produit de deux rotations et de deux translations rangées dans un certain ordre alterné; et formellement les notations sont ressemblantes.
Les axes de coordonnées sont définis par les règles suivantes :
* L'axe ${\overrightarrow {z_{n}}}$ est porté par l'axe de la liaison reliant le corps C$_{n-1}$au corps C$_n$.
* L'axe ${\overrightarrow {x_{n}}}$ est porté par la normale commune à ${\overrightarrow {z_{n}}}$ et ${\overrightarrow {z_{n+1}}}$ soit : ${\overrightarrow {x_{n}}}={\overrightarrow {z_{n}}}\wedge {\overrightarrow {z_{n+1}}}$.
* L'axe ${\overrightarrow {y_{n}}}$ est choisi de manière à former un trièdre direct avec l'axe ${\overrightarrow {z_{n}}}$ et ${\overrightarrow {x_{n}}}$ soit : ${\overrightarrow {y_{n}}}={\overrightarrow {z_{n}}}\wedge {\overrightarrow {x_{n}}}$.
Chaque transformation entre les corps successifs C$_{n-1}$ et C$_n$ est décrite par quatre paramètres :
* $\alpha$, l'angle autour de l'axe ${\overrightarrow {x_{n-1}}}$ entre les axes ${\overrightarrow {z_{n-1}}}$ et ${\overrightarrow {z_{n}}}\,.$
* $d$, ou $a$, la distance le long de l'axe ${\overrightarrow {x_{n-1}}}$ entre les axes ${\overrightarrow {z_{n-1}}}$ et ${\overrightarrow {z_{n}}}$. C'est donc également la longueur de la normale commune.
* $r$, la distance le long de l'axe ${\overrightarrow {z_{n}}}$ entre les axes ${\overrightarrow {x_{n-1}}}$ et ${\overrightarrow {x_{n}}}$ . C'est la variable articulaire dans le cas glissière.
* $\theta$, l'angle entre autour de l'axe ${\overrightarrow {z_{n}}}$ entre les axes ${\overrightarrow {x_{n-1}}}$ et ${\overrightarrow {x_{n}}}$ . C'est la variable articulaire dans le cas pivot.
La notation de Khalil-Kleinfinger est bien adaptée aux algorithmes numériques de la modélisation et aux chaînes arborescentes, mais elle présente une certaine lourdeur dans l'attribution des indices:
* Dans le cas pivot, on est amené à poser $\theta =\theta _{n}$ pour la variable articulaire et pour les paramètres constitutifs constants caractérisant le corps C$_{n-1}$: $\alpha =\alpha _{n-1}\,,\;d=d_{n-1}\,,\;r=r_{n-1}\,.$
* De même, dans le cas glissière, on est amené à poser $r=r_{n}$ pour la variable articulaire et pour les paramètres constitutifs caractérisant le corps C$_{n-1}$: $\alpha =\alpha _{n-1}\,,\;d=d_{n-1}\,,\;\theta =\theta _{n-1}\,.$
En multipliant les matrices (4x4) de rotation et de translation élémentaire (autour ou le long d'un seul axe) en coordonnées homogènes, on obtient la matrice de passage en coordonnées homogènes entre les corps C$_{n-1}$ et C$_n$ :
${\mathfrak {P}}_{n-1,n}={\begin{pmatrix}\cos(\theta )&-\sin(\theta )&0&d\\\cos(\alpha )\sin(\theta )&\cos(\alpha )\cos(\theta )&-\sin(\alpha )&-r\,\sin(\alpha )\\\sin(\alpha )\sin(\theta )&\sin(\alpha )\cos(\theta )&\cos(\alpha )&r\,\cos(\alpha )\\0&0&0&1\end{pmatrix}}\;.$
La matrice inverse s'écrit :
${\mathfrak {P}}_{n-1,n}^{-1}={\mathfrak {P}}_{n,n-1}={\begin{pmatrix}\cos(\theta )&\cos(\alpha )\sin(\theta )&\sin(\alpha )\sin(\theta )&-d\,\cos(\theta )\\-\sin(\theta )&\cos(\alpha )\cos(\theta )&\sin(\alpha )\cos(\theta )&d\,\sin(\theta )\\0&-\sin(\alpha )&\cos(\alpha )&-r\\0&0&0&1\\\end{pmatrix}}\;.$
Remarque : on sait que ${\mathcal {P}}^{-1}={\mathcal {P}}^{t}\,$ et en posant :
${\mathfrak {P}}_{n-1,n}={\begin{pmatrix}{\mathcal {P}}_{(33)}&{\mathcal {T}}_{(31)}\\\mathbf {0} _{(13)}&1\\\end{pmatrix}}\;,\;$ alors la matrice inverse s'écrit : ${\mathfrak {P}}_{n-1,n}^{-1}={\mathfrak {P}}_{n,n-1}={\begin{pmatrix}{\mathcal {P}}^{t}&-{\mathcal {P}}^{t}{\mathcal {T}}\\\mathbf {0} _{(13)}&1\\\end{pmatrix}}\;.$