Odométrie
Objectif : programmer un robot à entraînement différentiel en utilisant la technique de l’odométrie.
Matériel nécessaire :
- Robot Alphabot
- Mètre ruban
- IDE Arduino

L’activité repose sur un robot à entraînement différentiel AlphaBot :
Prérequis : avoir déjà fait l’activité robot à entraînement différentiel.
Vous répondrez aux questions sur un document texte (MS Word ou LibreOffice Writer).
La présentation doit être claire, concise, soignée, et comporter des captures d’écran et photos pertinentes.
Présentation
Le robot AlphaBot
Télécharger puis dézipper le fichierLe programme proposé permet de piloter le robot Alphabot avec 2 paramètres uniquement :
- la vitesse (en m/s) de son centre \(C\) : \(V_C=\left|V_{C\in A/0}\right|\)
- le rayon (en m) de la trajectoire de \(C\) :
- \(R \le 0\) pour un déplacement vers la gauche
- \(R \ge 0\) pour un déplacement vers la droite
- \(R=\infty\) pour un déplacement en ligne droite

Pour piloter le robot selon un mouvement prédéfini, le programme utilise des tableaux de valeurs :
- un tableau
Tpour les différents instants du profil de mouvement - un tableau
Vpour les valeurs de vitesse \(V_C\) pour chaque instant deT - un tableau
Rpour les valeurs de rayon \(R\) pour chaque instant deT
La valeur \(\infty\) s’écritINF.
Exemple : pour un échelon de vitesse comme ci-dessous :

On utilise les tableaux suivants :
// Profil de vitesse
const unsigned int n = 4; // nombre de points
unsigned long T[n] = {0, 1000, 1001, 6000}; // instants [ms]
double V[n] = {0, 0, 0.2, 0.2}; // vitesses [m/s]
double R[n] = {INF, INF, INF, INF}; // rayons [m]
Remarque : on ne peut pas imposer un échelon « parfait », d’où le petit décalage de 1ms
Cahier des charges
Précision de positionnement :
- Erreur de position du centre < 5% (du déplacement donné en consigne)
- Erreur d’orientation < 3°
Travail demandé
Trajectoire en ligne droite
On souhaite faire avancer le robot en ligne droite :

Le robot étant commandé en « vitesse », pour effectuer un tel déplacement, il faut impérativement adopter une loi d’évolution de la vitesse qui débute et qui se termine par une vitesse nulle, comme par exemple une loi en trapèze :

Remarque : les valeurs des consignes en accélération/décélération ou en vitesse doivent impérativement être inférieures aux capacités du robots.
Dans le cas contraire, on pourrait avoir un phénomène de glissement, ou bien des vitesses inférieures à la consigne, rendant impossible tout calcul d’odométrie …
On note \(a_{max}\) et \(V_{C_{max}}\) les valeurs absolues de l’accélération/décélération maximale et de la vitesse maximale dont le robot est capable.
De plus, on désire obtenir le déplacement du robot le plus rapide possible : \(a_{C}=a_{C_{max}}\) et \(V_{C_{v}}=V_{C_{max}}\).
Détermination expérimentale de \(V_{C_{max}}\) et \(a_{C_{max}}\)
Pour calculer les différents instants d’un profil de vitesse en trapèze, nous avons besoin de connaître les capacités du robot en termes de vitesse et accélération maximales.
On prend \(V_{C_{max}}=0,5\;\text{m/s}\) et \(a_{C_{max}}=1,2\;\text{m/s}^2\) …
Mesure de la performance de précision
// Profil de vitesse) afin que la loi en trapèze démarre 1s après l’allumage de l’Arduino.
