Asservissement du Drône

Cette partie consiste à établir un code permettant de stabiliser le drone. La partie a été sous-divisé en deux.

Asservissement en altitude

Développement du code permettant d'utiliser le sonar

Asservissement en x et y

Cette partie a pour but d'être intégrer au micro-contrôleur et au simulateur. Elle constitue une partie centrale du projet permettant de simuler le comportement du drone dans un environnement virtuel, ainsi que la liaison entre une tablette Androïd, les moteurs et le sonar.

Asservissement en altitude

Pour établir la première partie de ce code, nous avons dû travailler sur un tableur et simuler le comportement en Z du drone en fonction de la force exercée. Les premières simulations grâce au tableur se portait sur le décollage et la stabilisation.


Les coordonnées en y correspondent à l'altitude en mètre et les coordonnées en x correspondent au temps en millisecondes.

Ce schéma a été réalisable en prenant en compte en maximum de paramètres permettant une approche la plus proche de la réalité.

Masse

Consigne d'altitude et altitude réel

Différents coefficients au niveau des moteurs

Le force a appliqué à l'instant t

Accélération et la vitesse à l'instant t

En établissant le code, nous avons voulu éviter approche trop simpliste, consistant à mettre une poussé maximum tant que la consigne d'altitude n'est pas atteinte, et à couper les "gaz" lorsque l'altitude est atteinte ou dépassé. Cette solution facile à réaliser aurait poser un réel problème. Le drone aurait eu un comportement difficile à maitriser car il aurait effectuer des oscillations.

Pour contrer cette problématique, nous avons mis en place un code utilisant des dérivés. Le calcul de la force a appliqué prend au final en compte, la différence entre la consigne d'altitude et l'altitude réelle, l'évolution de l'erreur, ainsi que l'accélération et la vitesse à un moment t.

La formule appliqué pour calculer la force à appliquer à un moment x est celle-ci.

Force actuelle à appliquer = Force appliqué à l'instant t-1 * (Gain proportionnel * Différence entre la consigne d'altitude et l'altitude) + (Gain dérivé * Différence entre l'erreur d'altitude réel à t et l'erreur d'altitude à t-1)

Détail : On prend en considération la force appliquée précédemment et l'évolution de l'erreur d'altitude en fonction de cette force appliquer.
Cela a pour but de diminuer la force et par conséquence, de limiter l'accélération. Le drone s'élevant, va ralentir sa vitesse jusqu'à atteindre l'altitude visée. De cette manière, le drone va limiter sa monté en altitude au dessus de l'altitude visée. Le drone n'aura plus qu'à appliquer une force plus ou moins constante (dans la théorie) pour compenser le poids (P = m * 9,81) et le rendre immobile en altitude.

Développement du code permettant d'utiliser le sonar

La mesure de l'altitude du drone a été confiée à un sonar. Un sonar est un capteur de distance, celle ci est calculée par émissions d'ultrasons en fonction du temps de réflexion sur l'objet. Pour cette raison, ce capteur ne mesure pas une distance supérieur à trois mètres mais les distance mesurer sont très précises.

Pour incorporer ce matériel à la carte électronique, il a fallu développer le code associé. Ce code a été ajouté ensuite au code du micro-contrôleur dans un handler cyclique (« fonction » en programmation temps réel) exécuté toutes les 20ms. Ainsi pour déclencher une mesure, il faut envoyer une impulsion de 10µs au sonar. Il faut donc configurer un temporisateur pour générer cette impulsion. De plus vu que la mesure de distance fonctionne par calcul de temps, il nous a fallu utiliser un temporisateur capable de mesurer les largeurs d'impulsion. Nous avons donc configurer le temporisateur TB0 en mode mesure de largeur d'impulsion.

Ensuite, pour mesurer les distances supérieures à trois mètres, un capteur barométrique à été choisi. Ce type de capteur fonctionne avec la pression atmosphérique, il n'est donc pas très précis car les variations de pression sont minimes pour une petite distance. Cela reste quand même suffisamment exploitable car on peut mesurer un changement d'environ 10 cm. Le capteur à été mis en place sur la carte de l'année dernière. Sur les schémas réalisés cette année de la carte sous Kicad, l'implantation à été prévu sur le même port que sur la carte électronique précédente. En revanche en raison d'un manque de temps, le code pour que le micro-contrôleur gère ce capteur n'a pas été implémenté.

Asservissement en x et y

La seconde partie concernant l'asservissement du drône consistait à rendre plus complet l'algorithme de manière à asservir en X et en Y le drône. Cette partie a été facilement réalisable grâce à M. LAFONT. Le code développé a été principalement intégré dans le moteur du simulateur pour deux raisons.

La première raison est qu'il nous était difficile de simuler le comportement du drône en X et en Y dans un tableur. Pour cette raison, nous avons développé l'asservissement directement dans le simulateur car nous pouvions directement le tester.

Le deuxième intérêt était par soucis de temps. En effet, cette partie a été développée dans les dernières semaines et nous savions que les algorithmes de stabilisation ne pourraient pas être compilés et "uploadés" sur le micro-contôleur. Nous avons donc décidé de mettre la priorité sur cette partie pour pouvoir terminé le simulateur. Nous avons pu dans les mêmes moments, associer les parties du simulateur, à savoir les modélisations et le moteur (avec l'algorithme de stabilisation), le module Wi-fi ainsi que la tablette Androïd. Nous avons alors pu assister à un deuxième aboutissement dans le projet, à savoir que nous pouvions diriger le drône virtuel dans le simulateur grâce à un terminal Androïd, via une connexion Wi-fi.

decolage.tiff - Simulation grâce à un tableur du décolage du quadricopter (50.5 KB) Baptiste Donaux, 03/05/2012 11:19 AM