Contrôle Pid - Pololu QTR-1A Guide Utilisateur

Détecteur de ligne
Table des Matières

Publicité

{
// Faire une action. Cela peu signifier que l'on est à la fin
// de la course ou peut être tombé de la table, auquel cas, nous
// nous devrions arrêter de bouger, se retourner, aller à la
// recherche de la ligne.
return;
}
// Calculer l' "erreur" par rapport à la position de la ligne.
// Nous allons faire en sorte que l'erreur = 0 lorsque la ligne est
// placée sous le milieu du senseur (parce que c'est notre but).
// L'erreur aura une valeur entre -1000 et +1000.
// Si nous avons le senseur 0 à gauche et le senseur 2 à droite alors
// une lecture d'erreur de -1000 signifie que nous voyons la ligne
//
sur la gauche par rapport au centre du senseur alors qu'une
// lecture de +1000 signifie que la ligne est sur la droite
// par rapport au centre.
int
error
=
position
-
// Vitesse des moteurs
int
leftMotorSpeed
=
100;
int
rightMotorSpeed
=
100;// droite
if
(error
<
-500)
// ligne sur la gauche
// tourner à droite
// -> arrêter moteur gauche
leftMotorSpeed
=
0;
if
(error
>
500)
// ligne sur la droite
// tourner à gauche
// -> arrêter le moteur droit
rightMotorSpeed
=
0;
// Fixer la vitesse des moteurs en utilisant
// les valeurs de leftMotorSpeed et rightMotorSpeed
}
Contrôle PID
TLa valeur entière retournée par readLine() peu facilement être convertie la mesure de notre erreur de position pour les applications de suivit
de ligne, comme démontré dans le précédent exemple de code. La fonction utilisée pour générer cette valeur de position/error est conçue pour
être monotonique, ce qui signifie que la valeur change toujours dans la même direction au fur et a mesure que que les senseurs croisent la
ligne. Cela en fait une grandeur utile pour réaliser un contrôle PID (Proportionnel Intégram Dérivé).
Expliquer la nature du contrôle PID va au delà des objectifs de ce document, mais wikipedia offre un bon article
https://fr.wikipedia.org/wiki/R%C3%A9gulateur_PID
Le code suivant est un exemple très simple de contrôleur PD pour suivit de ligne (le terme intégrale "I" d'un régulateur PID n'est
habituellement pas nécessaire dans le cadre d'un suivit de ligne). Les valeurs des différentes constantes PID (ou PD dans le cas présent) est
généralement spécifique à votre propre application mais d'une façon générale vous pourriez noter que la constante de dérivation Kd est
habituellement beaucoup plus grande que la constante proportionnelle Kp. C'est parce que la dérivée de l'erreur (quantification de la variation
de l'erreur) est beaucoup plus petite que l'erreur elle même. Par conséquent, pour produire une correction signification il est nécessaire de
multiplier le terme dérivé par une constante beaucoup plus grande.
int
lastError
=
0;
void
loop()
{
unsigned int
sensors[3];
// Obtenir les valeurs calibrées retournées dans
// tableau de senseur accompagné de la position
// de la ligne (valeur entre 0 et 2000) avec
// 1000 correspondant à la ligne au milieu du
// senseur
int
position
=
qtr.readLine(sensors);
// Calculer notre "erreur" depuis la position
// de la ligne. Nous allons la calculer de sorte
// que l'erreur égale 0 si la ligne est sous la
// position centrale du senseur (ce qui est notre
// but). L'erreur aura une valeur entre -1000 et
// +1000. Si nous avons le senseur 0 à gauche et
// le senseur 2 à droite, alors une valeur lue
// de -1000 signifie que la ligne est vue sur la
// gauche du senseur. Une valeur de +1000
// signifie que que nous voyons la ligne sur
// la droite du senseur.
int
error
=
position
-
// Baser la vitesse des moteurs sur base des
// termes proportionnel et dérivés d'un PID.
// KP est la constante proportionnelle (commencer
//
avec une valeur 0.1)
// KD est la constance dérivée (vous pouvez peut-être
//
commencer avec un valeur autour de 5)
// Note: lors d'un asservissement PID, il est très
//
important d'avoir le bon signe pour les valeurs
1000;
// gauche
sur le sujet.
1000;

Publicité

Table des Matières
loading

Ce manuel est également adapté pour:

Qtr-1rcQtr-l-1aQtr-l-1rcQtr-3aQtr-3rcQtr-8a ... Afficher tout

Table des Matières