Sommaire

PROGRAMME de LA CARTE

 

Nous utilisons des programmes en Spin , un langage voisin du C et adapté a notre microcontrolleur a 8 coeurs parallèles : Propeller de Parallax. (depuis peu , on peut aussi le programmer avec un GCC modifié).

Avec ce langage toutes les variables déclarées au début du programme principal sont "affichées sur un tableau" et mises a jour et visibles en continu par toutes les programmes tournant dans l'un des 8 coeurs.

Certains parties de ces programmes , critiques pour la vitesse d'éxécution, sont écrites en Assembleur que le microcontrolleur accepte si elles sont insérées en fin de programme Spin.

Une grande partie du matériel utilisé est disponible sur les forums de Parallax et dans la banque d'objets open <OBEX> du site de Parallax.

Jason Dorie a publié sur ce site un programme de pilotage de drone dont nous nous sommes largement inspiré. Merci a lui.

Buts

ces programmes visent a garder le drone stable sur sa trajectoire tout en l'ajustant selon les commandes transmises par la radio.

Moyens

Pour cela il faut 5 grandes parties de programmes qui vont pouvoir fonctionner en parallèle chacune dans un des coeurs du processeur et c'est là que l'utilisation de ce processeur est intéressante. Le programme se trouvera découpé en blocs plus faciles a gérer .

Les 5 blocs principaux correspondent a :

  1. la réception des commandes radio envoyées par le pilote

  2. l'envoi de commandes aux moteurs brushless pour adapter leur vitesse a fin d'obtenir la trajectoire et l'assiette voulues

  3. la lecture des 3 valeurs d' accélérations mesurées par le gyroscope

  4. a partir de l' écart entre les consignes du pilote et les résultats des mesures gyroscopiques le calcul des corrections a apporter a la vitesse des moteurs en utilisant un algorithme de régulation PID (utilisant des corrections : P proportionnelle a l'écart , I (Intégrale) selon l' accumulation de l' écart dans le temps , D (Dérivée) selon la vitesse de variation de l'écart.

  5. un programme de mixage pour calculer la vitesse a imposer a chaque moteur en tenant compte des commandes du pilote, des corrections PID et de la position des 4 moteurs.

Il faut ajouter quelques fonctions annexes pour:

Réception des commandes radio

En fait, le récepteur radio reçoit des impulsions d'une durée qui varie de 1000 a 2000 microsecondes. Ce sont les impulsions classiques pour commander les servomoteurs en robotique, deux impulsions successives sont séparées d'environ 20 millisecondes.Elles arrivent les unes aprés les autres sur les voies correspondantes du récepteur : pour qu'un même programme les récupére il faut respecter un bon timing.

En fait on trouve dans les "objets" disponibles en open dans la partie <OBEX> du site de Parallax toute sortes de programmes capables de lire ces signaux et utilisables moyennant quelques adaptations.

Envoi de commandes aux moteurs brushless

La encore les objets disponibles vont resservir : on envoie aux ESC des signaux semblables a ceux utilisées pour commander les servo moteurs. Les ESC se chargent de les transformer en signaux compréhensibles pour les moteurs brushless.

Il y a cependant 2 différences :

  1. pour les servo moteurs on envoie un signal 50 fois par seconde , pour les ESC on l'envoie entre 200 et 400 fois par seconde (ça permet de corriger très vite la trajectoire du drone) , c'est pourquoi ce programme est en partie en assembleur (noter au passage qu'a cette vitesse le programme est inutilisable pour un servomoteur standard : il le ferait crammer)

  2. il faut alterner , dans une boucle, avec une timing bien précis , les commandes envoyées aux 4 moteurs

La lecture des 3 valeurs mesurées par le gyroscope

En fait le gyroscope calcule ces valeurs : pour les récupérer on utilise le bus I2C sur lequel sont connectées 2 pattes du microprocesseur (avec une résistance de 4, 7 K montée en pull up) . La lecture utilise un programme de l'<OBEX> adapté au gyro ITG par Jason Dorie.

Calcul de la correction PID

Elle est basée sur 3 données : la valeur cible de position souhaitée et la valeur mesurée par le gyroscope (ces 2 valeurs permettent de calculer un écart : c'est lui qui permet de calculer la correction proportionnelle en lui appliquant le facteur Kp qui restera a optimiser par l' expérience.) .

La troisiéme donnée est le temps écoulé entre 2 mesures successives de l'écart : elle permet de calculer la dérivée qu'on multiplie par un facteur Kd.

Par ailleurs on dispose d'un tampon pour accumuler un certain nombre d' écarts (en fait on démarre a zéro et on y ajoute un certain nombre d'écarts successifs : il faudra calibrer ce tampon et le tester pour éviter les débordements) On obtient un écart intégré qui sera multiplié par un facteur Ki.

Enfin on additionnera les 3 corrections.

Programme de mixage

A partir:

  1. des commandes des manches transmises par la radio : gaz, pitch, roll, yaw

  2. des corrections PID précédentes

On calcule les commandes finales a transmettre aux moteurs.

Il faut d'abord que chaque moteur tourne assez vite pour assurer un décollage puis une altitude stable du drone : donc les commandes des 4 moteurs auront d'abord comme base un facteur dépendant directement des gaz (throttle) qu'on modulera ensuite pour créer ou freiner des inclinaisons en pitch et/ou roll.

D'autre part on voit bien que les combinaisons des commandes corrigées doivent se faire différemment selon que les moteurs sont disposés en + ou en X par rapport a l' axe de déplacement du drone: ainsi avec une configuration en X pour corriger un excès d' inclinaison vers la droite on accélérera les 2 moteurs droits et on ralentira les 2 moteurs gauches.

Enfin , pendant un vol la vitesse finalement appliquée a chaque moteur doit rester au dessus d'un minimum permettant au drone de rester en l'air , donc tous les moteurs doivent tourner au dessus d'un régime minimum (il n'est surtout pas question qu'ils s'arrétent de façon imprévue !)

Fonctions annexes

Filtres

ils visent surtout a élimier des signaux parasites dus a des vibrations.

Les plus connus sont:

Limites min max