Robot à entraînement différentiel

Objectif : programmer un robot pour que depuis un point A, il se rende à un point B, en évitant des obstacles !

 

Étude des mouvements

Le robot AlphaBot est un robot à mouvement différentiel : deux moteurs pour actionner indépendamment deux roues coaxiales.

Documentation :

 

La roue sur le sol

Supposons dans un premier temps que la roue ne touche pas le sol :

Lorsque la roue ne touche pas le sol, décrire le mouvement de la roue par rapport au sol, puis déterminer la relation entre la vitesse angulaire d’une roue \(\omega_R\) (en \(rad/s\)) et la vitesse d’un point \(A\) de sa circonférence, notée \(V_{A\in R/S}=\|\overrightarrow{V_{A\in R/S}}\|\).

 

 

Une fois en contact avec le sol, on suppose à présent que chaque roue \(\color{blue}{R}\) de centre \(O\) et de rayon \(r\) roule sans glisser , au point de contact \(A\) sur le sol \(\color{blue}{S}\) !
Définition : roulement sans glissement
On dit qu’il y a roulement sans glissement d’un solide \(1\) sur un solide \(2\), si la vitesse relative du point de contact \(P\) entre ces deux solides est nul :

\(\Large{\bbox[2px,border:2px solid black]{\overrightarrow{V_{P\in 1/2}}=\vec 0}}\)

 

Décrire le mouvement de la roue par rapport au sol. Écrire la condition de roulement sans glissement de la roue du robot sur le sol, et en déduire le centre instantané de rotation de ce mouvement. Écrire l’expression de la vitesse du centre de la roue \(\color{blue}{R}\) du robot \(\overrightarrow{V_{O\in R/S}}\) en fonction de la vitesse angulaire angulaire de cette roue \(\omega_R\).

 

Le mouvement différentiel

Le schéma ci-dessous représente le robot \(\color{blue}{A}\) vu de dessus, ainsi que la trajectoire de son centre \(C\) et les vitesses des centres de ses roues, \(O_G\) et \(O_D\) :

La distance \(O_GO_D\) s’appelle la voie du robot, on la notera \(b\).

Cas particuliers

Déterminer les lois portant sur les vitesses angulaires des roues, permettant d’obtenir chacun des mouvements particuliers suivants :

  • translation rectiligne
  • rotation autour du point \(C\)

 

Donner l’expression du rayon de la trajectoire du point \(C\) (\(IC=R\)) en fonction de la voie \(b\) (écartement des roues) et des vitesses des centres \(O_G\) et \(O_D\) des roues du robot.

 

Déterminer les expressions des vitesses angulaires \(\omega_G\) et \(\omega_D\) en fonction de la voie \(b\) (écartement des roues), du rayon des roues \(r\), de la vitesse du centre \(C\) du robot et du rayon \(R\) de la trajectoire du point \(C\).
CORRECTION

\(\frac{R-\frac{b}{2}}{R+\frac{b}{2}}=\frac{r\omega_G}{r\omega_D}\)

Et : \(r\omega_G+r\omega_D=2V_C\)

D’où le système :

\(\left\{
\begin{array}{ll}
r\omega_G\left(R+\frac{b}{2}\right)-r\omega_D\left(R-\frac{b}{2}\right)&=0 \\
r\omega_G+r\omega_D&=2V_C
\end{array}
\right.\)

On en déduit :

\(\large{\left\{
\begin{array}{ll}
\omega_G&=\frac{V_C}{Rr}\left(R-\frac{b}{2}\right) \\
\omega_D&=\frac{V_C}{Rr}\left(R+\frac{b}{2}\right)
\end{array}
\right.}\)

 

Programmation

Pour programmer le déplacement du robot, on écrit une fonction en langage Python, dont la description est donnée ci-dessous :

def vitesses_roues_robot(vitesse, rayon, b = 0.1, r = 0.035):
   """ Met en mouvement le robot selon une trajectoire circulaire
        * vitesse [m/s] : flottant
        * rayon [m] : flottant 
                  ou None pour un rayon infini (trajectoire rectiligne)
        * voie du robot [m] : flottant
        * rayon des roues du robot [m] : flottant
       Renvoie un tuple formé des vitesses angulaires des roues
   """
   ..........
   ..........
   return wG, wD # rad/s
      

Dans la déclaration de cette fonction, les paramètres vitesse et rayon sont obligatoires : il faut fournir leurs valeurs (arguments) lors de l’appel à la fonction.

Exemple pour une consigne de vitesse de \(0,8m/s\) et un rayon de braquage de \(1,2m\) : wG, wD = vitesses_roues_robot(0.8, 1.2)

En revanche, les paramètres b et r sont facultatifs : si leurs valeurs ne sont pas données lors de l’appel à la fonction, leurs valeurs par défaut seront utilisées. On choisi les valeurs par défaut correspondantes à un robot en particulier, mais on peut quand même utiliser la fonction pour un robot aux caractéristiques différentes.

Exemple pour un robot dont les roues ont un rayon de \(3\;cm\) et une voie de \(12\;cm\) : wG, wD = vitesses_roues_robot(0.8, 1.2, 0.12, 0.03)

 

Compléter cette fonction, de sorte qu’elle prenne également en compte le cas de la trajectoire rectiligne.

 

Pour éviter un obstacle, la stratégie suivante est choisie (en première approche) :

Dès que l’obstacle est détecté, le robot s’arrête, fait un quart de tour sur la droite, puis suit une trajectoire circulaire de rayon \(R=0,5m\), s’arrête à nouveau, opère un quart de tour sur la droite, et reprend son mouvement initial.

Cette procédure est réalisée par une fonction eviter_obstacle() qui est déclenchée dès que l’obstacle est détecté (c’est à dire environ 20cm avant).

Si on suppose que les vitesses des roues données en consigne sont parfaitement respectées, il est possible de contrôler les positions du robot en comptant les durées des mouvements.

def eviter_obstacle():
   """
   """
   ......
   commander_roues(wG, wD)
   ......
 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *