Stabilisation d'un drone : Capteurs et PID
Etude de la stabilité d'un drone parrot dans le cadre du projet CPEFly
Le
Pour ce quatrième et dernier volet de la série, nous nous penchons sur la question de la stabilisation du drone. Je vais vous présenter les différents capteurs utilisés, ainsi que la manière dont leurs données ont été exploitées pour assurer l’asservissement de l’appareil à l’aide d’un contrôleur PID.
Si vous n'avez pas lu l'article précédant (dans lequel on tests le pilotage des moteurs du drone), vous pouvez le retrouver ici.
Les capteurs
Nous avons utilisé 2 capteurs :
- une centrale inertielle MPU6050, composée d’un capteur gyroscopique sur 3 axes et d’un accéléromètre sur 3 axes ;
- un capteur de distance HC-SR04 (plus précisément un télémètre à ultra-son).
|
|
|
A noter que nous aurions pu en utiliser un troisième capteurs, un magnétomètre pour aider au calcul des angles d'Euler.
Capteurs de distance
Placé sous le drone, son rôle est de mesurer sa hauteur par rapport au sol. La partie émettrice du capteur émet une impulsion sonore à haute fréquence (40 kHz) puis lorsque cette onde rencontre un objet, elle est réfléchie et atteint la partie réceptrice du capteur. L’onde à donc parcourue deux fois la distance de l’objet (aller-retour) à une vitesse constante d’environ 340m.s-1 (vitesse du son).

Centrale inertielle
La centrale intertielle est composée
- d'un capteur gyroscopique sur 3 axes
- d'un accéléromètre sur 3 axes
Gyroscope
Le gyroscope fonctionne grâce à l'effet de Coriolis. Il est composé d'une masse suspendue oscillant à une fréquence spécifique. Lorsque le drone, et donc le gyromètre, est soumis à une rotation autour d'un certain axe, la masse suspendue liée a cet axe est soumise à la force de Coriolis créant une déviation de la direction l'oscillation de cette masse. Cette déviation est mesurée par des capteurs capacitifs et est proportionnelle à la vitesse angulaire, ce qui nous permet de la mesurer. Le fonctionnement est identique pour les 3 axes. Cette mesure est ensuite convertie par le circuit intégré du module pour donner une vitesse angulaire.

- point bleu (la masse) : Au début, il bouge uniquement de gauche à droite (c'est l'excitation mécanique pilotée par le circuit).
- phase "Rotation" : Lorsque le capteur tourne, le point bleu ne suit plus une ligne droite. Il commence à faire des petites boucles ou des vagues vers le haut et le bas.
- la ligne rouge : Elle matérialise cette déviation. C'est l'amplitude de ce mouvement rouge (sur l'axe Y) que les condensateurs mesurent pour signaler au drone qu'il tourne à 30 degrés par seconde par exemple.
Accéléromètre
L'accéléromètre est également composé d'une masse suspendue, cependant celle-la n’oscille pas. Lorsque le drone se déplace, la force inertielle déplace la masse sur son axe de détection, proportionnellement à l’accélération. Le déplacement de la masse est également mesuré par des capteurs capacitifs. Le principe de fonctionnement est le même pour les 3 axes. La mesure est ensuite convertie par le circuit intégré du module afin de donner une accélération en g.

Correcteur PID
Un peu de théorie
Le régulateur PID, appelé aussi correcteur PID est un système de contrôle permettant d’améliorer les performances d'un asservissement, c'est-à-dire un système ou procédé en boucle fermée. C’est le régulateur le plus utilisé dans l’industrie où ses qualités de correction s'appliquent à de multiples grandeurs physiques.
Wikipedia
En somme, il s'agit d'un concept de correcteur "efficace" qui va nous permettre d'assurer la stabilisation du drone. On l’intègre dans un système avec une boucle de rétroaction (système de correction d'erreur à rétroaction). Le principe est le suivant: on donne en entrée du système une consigne (un angle, par exemple 0° pour que le drone soit à l'horizontal), et ce dernier va calculer l'erreur par rapport à cette consigne (en utilisant les données fournies par les capteurs) via une boucle de retour. Ainsi, petit à petit, il va réduire cette erreur jusqu'à atteindre la valeur de la consigne le plus précisément possible.
Un correcteur PID est composé de 3 éléments: une composante proportionnelle (P), une composante intégrateur (I) et une dérivateur (D). Chacune de ses composantes à un rôle:
Proportionnel: Son rôle est de pousser le système à atteindre la consigne. Il est proportionnel à l'erreur (le coefficient de proportionnalité étant $K_{P}$. Cependant il génère une erreur statique : il s'agit d'une erreur que l'on conserve en régime permanent (après le régime transitoire, quand on est censé avoir atteint la consigne). En effet, plus on approche de la consigne, et donc du régime permanent, plus l'erreur est faible. Comme il s'agit d'un correcteur qui est proportionnel à l'erreur, son action s'en voit réduit, ce qui l’empêche d'atteindre la consigne avec précision et engendre une erreur. On peut l'observer sur l'image ci-dessous.

L'existence de cette erreur est démontrable par le calcul en utilisant le théorème de la valeur final, et est minimisé pour une entrée de type échelon en fixant la valeur de KP la plus grande possible. J'ai refait la démonstration ci-dessous (pour les amoureux des maths):L'erreur $e(p)$ du système a pour expression (que l'on déduit du schéma block):
$$ e(p) = E(p)-R(p) = E(p)-e(p).FTBO(p) \Leftrightarrow e(p) + e(p).FTBO(p) = E(p) \Leftrightarrow e(p)(1+FTBO(p)) = E(p) \Leftrightarrow e(p) = \frac{1}{1+FTBO(p)}.E(p) $$
Or le théorème de la valeur finale dit que : $E_{S}=\lim_{t \to \infty}e(t)=\lim_{p \to 0}p.e(p)$. On peut considérer notre consigne d'entrée comme un échelon ayant comme amplitude la valeur de la consigne, donc d'après la transformée de Laplace on a $E(p) = A.\frac{1}{p}$. Comme on considère un correcteur uniquement proportionnel on a $FTBO(p) = K_{p}$ donc en injectant les deux expressions on obtient: $E_{S} = \frac{1}{1+K_{p}}$. Cette erreur est bien minimisé si $K_{p}$ est grand.
Seulement si on met un grande valeur pour $K_{p}$, on aura un dépassement de la consigne, ce qui entraîne des oscillations qui peuvent être gênantes dans notre cas. En effet, si on a des oscillations, on va accélérer puis décélérer successivement la vitesse des moteurs ce qui les abîmes. De plus, il nous est impossible d'annuler l'erreur statique complètement.
A noté que plus le coefficient $K_{p}$ est élevé, plus le système est rapide.Intégrateur: L'intégrateur tient compte des erreurs précédentes. Il les additionnent (c'est pourquoi on parle d'intégration), jusqu'à ce que la consigne soit atteinte. Il permet de gagner en précision, en compensant l'erreur statique, et en stabilité.
On peut le démontrer mathématiquement : En rajoutant la transformé de Laplace d'un correcteur intégrateur dans notre expression on obtient $FTBO(p) = K_{P} + \frac{K_{I}}{p}$. On a donc $E_{S} = \lim_{p \to 0} \frac{1}{1+K_{P} + \frac{K_{I}}{p}} = 0$.
Cependant on a toujours pas réglé le problème des dépassement.Dérivateur: Le dérivateur permet de réduire voir d'éviter les dépassement (et donc les oscillations). Comme l'erreur au départ réduit rapidement (une pente abrupte), il aura une action négative qui freinera "fortement" l'évolution du système vers son état final. A l'inverse, lorsque l'évolution de l'erreur se stabilisera, son action sera quasiment nulle.
La difficulté réside dans le fait de trouver la bonne valeur pour ces 3 coefficients. La vidéo ci-dessous illustre bien l'influence du rôles des coefficients P, I et D.
On peut résumé le système du PID et du système de rétroaction au travers du schéma block ci-dessous :

Où mathématiquement le PID équivaut à:
$$ u(t) = K_{P}\times e(t) + K_{I} \times \int_0^t e(t) \mathrm{d}t + K_{D} \times \frac{e(t)}{dt} $$
avec $K_{P}$, $K_{I}$ et $K_{D}$ les coefficients du PID qu'il nous faut déterminer. Dans le cadre de notre drone il va nous falloir utiliser plusieurs PIDs, 4 au total :
- Un PID pour chaque axe de rotation (pitch, roll et yaw)
- Un PID pour la distance par rapport au sol
Les plus importants étant les PIDs pitch et roll qui assure que le drone reste stable horizontalement.
En sortie des PIDs
En fonction de la valeur retourné par chacun des PIDs, il faut augmenter ou diminuer la valeur de la vitesse de certains moteurs.

En réfléchissant un peu et en s'informant sur internet, on peut mettre au point un tableau d'action à prendre selon le cas auquel on est confronté. Lorsqu'on souhaite diminué ou augmenter la vitesse d'un moteur, on lui soustrait / ajoute la valeur en sortie du PID concerné. Vous pouvez trouver le tableau récapitulatif des actions à prendre en fonction des consignes ci-dessous:
| Consigne | Moteur 1 | Moteur 2 | Moteur 3 | Moteur 4 |
|---|---|---|---|---|
| Penche à droite (roulis positif) Translation vers la droite | ![]() |
![]() |
![]() |
![]() |
| Penche à gauche (roulis négatif) Translation vers la gauche | ![]() |
![]() |
![]() |
![]() |
| Penche en arrière (tangage positif) Translation vers l'arrière | ![]() |
![]() |
![]() |
![]() |
| Penche en avant (tangage négatif) Translation vers l'avant | ![]() |
![]() |
![]() |
![]() |
| Tourner dans le sens horaire (lacet positif) Rotation sens horaire | ![]() |
![]() |
![]() |
![]() |
| Tourner dans le sens antihoraire (lacet négatif) Rotation sens antihoraire | ![]() |
![]() |
![]() |
![]() |
Il ne nous reste plus qu'à adapter ça en code et faire des tests afin de déterminer la valeur des différents coefficients $K_{P}$, $K_{I}$ et $K_{D}$ des 4 PIDs.
NB : Comme les moteurs sont agencés en carré, les coefficients des axes pitch et roll sont les mêmes (donc plus que 9 coefficients à déterminer).
Déterminer les coefficients du PID
Ces coefficients se determinent de manière uniquement expérimental, ce qui implique la mise en place d'une plateforme de mesure qui maintient le drone, tout en lui offrant des axes de rotations.

Article en cours de rédaction
.png)
.png)

