Modifications

Sauter à la navigation Sauter à la recherche
Ligne 239 : Ligne 239 :     
=== Contrôle PID ===
 
=== 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.
+
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 [https://fr.wikipedia.org/wiki/R%C3%A9gulateur_PID wikipedia offre un bon article] sur le sujet.
 
Expliquer la nature du contrôle PID va au delà des objectifs de ce document, mais [https://fr.wikipedia.org/wiki/R%C3%A9gulateur_PID wikipedia offre un bon article] sur le sujet.
   −
{{traduction}}
+
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.
 
  −
The following code gives a very simple example of PD control (I find the integral PID term is usually not necessary when it comes to line following). The specific nature of the constants will be determined by your particular application, but you should note that the derivative constant ''Kd'' is usually much bigger than the proportional constant ''Kp''. This is because the derivative of the error is a much smaller quantity than the error itself, so in order to produce a meaningful correction it needs to be multiplied by a much larger constant.
      
<syntaxhighlight lang="C">int lastError = 0;
 
<syntaxhighlight lang="C">int lastError = 0;
Ligne 252 : Ligne 250 :  
{
 
{
 
   unsigned int sensors[3];
 
   unsigned int sensors[3];
   // get calibrated sensor values returned in the sensors array, along with the line position
+
   // Obtenir les valeurs calibrées retournées dans
   // position will range from 0 to 2000, with 1000 corresponding to the line over the middle
+
  // tableau de senseur accompagné de la position  
   // sensor
+
   // de la ligne (valeur entre 0 et 2000) avec
 +
  // 1000 correspondant à la ligne au milieu du
 +
   // senseur
 
   int position = qtr.readLine(sensors);
 
   int position = qtr.readLine(sensors);
 
   
 
   
   // compute our "error" from the line position. We will make it so that the error is zero when
+
   // Calculer notre "erreur" depuis la position  
   // the middle sensor is over the line, because this is our goal.  Error will range from
+
  // de la ligne. Nous allons la calculer de sorte
   // -1000 to +1000. If we have sensor 0 on the left and sensor 2 on the right, a reading of
+
   // que l'erreur égale 0 si la ligne est sous la
   // -1000 means that we see the line on the left and a reading of +1000 means we see the
+
  // position centrale du senseur (ce qui est notre
   // line on the right.
+
   // 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 - 1000;
 
   int error = position - 1000;
 
   
 
   
   // set the motor speed based on proportional and derivative PID terms
+
   // Baser la vitesse des moteurs sur base des
   // KP is the a floating-point proportional constant (maybe start with a value around 0.1)
+
  // termes proportionnel et dérivés d'un PID.
   // KD is the floating-point derivative constant (maybe start with a value around 5)
+
   // 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 that when doing PID, it's very important you get your signs right, or else the
 
   // note that when doing PID, it's very important you get your signs right, or else the
 
   // control loop will be unstable
 
   // control loop will be unstable
29 917

modifications

Menu de navigation