Outils pour utilisateurs

Outils du site


robotics:asservissement_d_un_robot

Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

robotics:asservissement_d_un_robot [2014/09/25 10:58]
ldo [Asservissement différentiel]
robotics:asservissement_d_un_robot [2014/11/28 14:05] (Version actuelle)
ldo [Asservissement différentiel]
Ligne 30: Ligne 30:
 Il faut donc travailler sur l'​ensemble des 2 moteurs en asservissant un moteur en tenant compte de l'​autre. En couplant l'​asservissement du moteur droit à celui du moteur gauche, si le moteur gauche prend du retard sur le moteur droit, le moteur gauche va accélérer alors que le moteur droit va ralentir. Il faut donc travailler sur l'​ensemble des 2 moteurs en asservissant un moteur en tenant compte de l'​autre. En couplant l'​asservissement du moteur droit à celui du moteur gauche, si le moteur gauche prend du retard sur le moteur droit, le moteur gauche va accélérer alors que le moteur droit va ralentir.
  
-L'​asservissement va se dérouler ​en 2 étapes. D'​abord on va asservir la position ​(x,y) du robot. Une fois que le robot est arrivé à la position consigne, on va asservir son orientation.+=== Position et vitesse === 
 +Pour plus de simplicité,​ nous allons travailler ​en coordonnées polaires et donc définir une position ​et une vitesselinéaire et angulaire pour l'​ensemble ​du robot.
  
-=== Etape 1 : Positionner le robot ===+Grâce aux encodeurs placés sur les moteurs, nous pouvons mesurer la vitesse des moteur droit et gauche. A partir de ces mesures, nous allons calculer la vitesse linéaire (vitesse de déplacement) et la vitesse angulaire (vitesse de rotation) du robot :
  
-== Position et vitesse == +  * vitesse_linéaire_robot ​(vitesse_moteur_droit + vitesse_moteur_gauche) / 2 
-Pour plus de simplicité,​ nous allons travailler en coordonnées polaires et donc définir une position et une vitesse, linéaire et angulaire pour l'​ensemble du robot.+  * vitesse_angulaire _robotvitesse_moteur_droit - vitesse_moteur_gauche
  
-A partir ​des données ​de chaque codeurs (position et vitesse, droite et gauche), nous allons ​calculer ​la position du robot par rapport à l'​origine ​: +A partir de ces 2 vitesses, nous allons ​déterminer ​la position du robot par [[robotics:odometrie|odométrie]].
-La position linéaire du robot est la distance entre le robot et le point d'​origine. La position angulaire est l'​orientation entre le robot et l'axe d'​origine.+
  
-  * position_linéaire ​= (distance_codeur_droit + distance_codeur_gauche)/2 +=== Asservissement === 
-  * position_angulaire = distance_codeur_droit - distance_codeur_gauche+L'​asservissement va se dérouler en 2 étapes. D'​abord on va asservir la position ​(x,ydu robot. Une fois que le robot est arrivé à la position consigne, on va asservir son orientation.
  
-La vitesse linéaire est la vitesse de déplacement du robot. La vitesse angulaire est la vitesse de rotation du robot. +== Etape 1 : Positionner le robot == 
-  * vitesse_linéaire ​= (vitesse_moteur_droit ​vitesse_moteur_gauche/ 2 +Dans un premier temps, nous allons chercher à positionner correctement le robot à sa position cible (x, y). 
-  * vitesse_angulaire ​vitesse_moteur_droit - vitesse_moteur_gauche+Pour cela, nous allons calculer une erreur de distance et une erreur d'​angle (erreur en coordonnée polaire): 
 +  * l'​erreur_distance est la distance entre le robot et sa cible : erreur_distance ​sqrt (square (x) square (y))  ​ 
 +  * l'​erreur_orientation est l'​angle entre l'​orientation du robot et sa cible : erreur_angle ​atan (y,x) + orientation_robot
  
-== Consignes ​== +== Etape 2 : Orienter le robot == 
-Nous allons convertir les coordonnées (x,y) de la consigne de position en coordonnées polaires ​(d,O).  + 
-  * d = sqrt(x² + y²) +Une fois le robot positionnéil faut l'​orienter correctement. La consigne de distance sera mise à zéro (erreur de distance = 0et la consigne angulaire sera l'​orientation O de la consigne initiale
-  * O = atan(y/x)+  * l'​erreur_distance est nulle 
 +  * l'​erreur_orientation est l'​angle entre la consigne ​et l'​orientation du robot : erreur_angle ​O - orientation_robot;​
  
 == Schéma == == Schéma ==
-A partir ​de ces coordonnées polaires, nous allons appliquer ​2 [[robotics:​asservissement_d_un_moteur|asservissements de position/​vitesse]] en parallèle (un pour la distance, l'​autre pour l'​angle). Puis nous allons coupler les commandes distance et angulaire pour obtenir les commandes moteurs droit et gauche.+Une fois que l'​erreur ​de distance et orientation est calculée (étape 1 ou 2), nous appliquons ​2 [[robotics:​asservissement_d_un_moteur|asservissements de position/​vitesse]] en parallèle (un pour la distance, l'​autre pour l'​angle). Puis nous allons coupler les commandes distance et angulaire pour obtenir les commandes moteurs droit et gauche.
  
 {{:​robotics:​asservissement_robot.png?​600|}} {{:​robotics:​asservissement_robot.png?​600|}}
- 
-=== Etape 2 : Orienter le robot === 
- 
-Une fois le robot positionné,​ il faut l'​orienter correctement. La consigne de distance sera mise à zéro et la consigne angulaire sera l'​orientation du robot O. Puis nous appliquons les 2 asservissements en parallèle comme précédemment. 
- 
 === Remarques === === Remarques ===
  
 == Fréquence d'​asservissement == == Fréquence d'​asservissement ==
 Pour être réactif, l'​asservissement doit être effectué régulièrement et fréquemment (ici nous prendrons 10 ou 20 ms). Si la fréquence est trop basse, le robot ne sera pas réactif et aura du mal à corriger. Au contraire, si la fréquence est trop élevée, les mesures (de vitesse principalement) ne seront pas significatives (0, 1 ou 2 pulses par cycles d'​asservissement) et le robot ne corrigera pas bien. Pour être réactif, l'​asservissement doit être effectué régulièrement et fréquemment (ici nous prendrons 10 ou 20 ms). Si la fréquence est trop basse, le robot ne sera pas réactif et aura du mal à corriger. Au contraire, si la fréquence est trop élevée, les mesures (de vitesse principalement) ne seront pas significatives (0, 1 ou 2 pulses par cycles d'​asservissement) et le robot ne corrigera pas bien.
robotics/asservissement_d_un_robot.1411635480.txt.gz · Dernière modification: 2014/09/25 10:58 par ldo