Quadrotors

Cela fait à peu prêt un an (depuis septembre 2011) que je m’attelles (pas à temps plein bien sur) à la réalisation d’un quadrotors. Le but de ce projet n’est pas vraiment de faire voler mon quadrotors en 3 mois ^^ mais bel et bien de le réaliser de A à Z, afin d’appliquer les connaissances que j’ai ; d’en asseoir d’autres et d’en apprendre de nouvelles.
A travers cette page, j’espère permettre aux moins initiés d’appréhender avec simplicité le monde de l’automatique, de l’informatique et du modélisme. Ainsi que d’échanger avec mes confrères, qui je l’espère me feront des remarques constructives :p.

Pour cela je commencerais par la base : c’est quoi un quadrotors? Appelait aussi quadri-rotors; quad-copter, etc. Je présenterais ensuite le matériel utilisé (et pourquoi celui là et pas un autre nom de nom!), ses spécificités et son prix (hé oui car mine de rien ça pèse dans la balance). Bref tout ce qui m’a poussé à choisir cette liste de matos. La suite sera la partie intéressante car je présenterais pas à pas la réalisation de ce projet, que ce soit

  • Le montage de la structure (j’ai pas forcément pris de photos pendant la construction mais j’essaierais de faire des schémas illustrateurs)
  • Le câblage
  • La programmation
  • Les tests
  • Les problèmes rencontrés (pourquoi? Comment j’ai fait? Qui m’a aidé?)
  • etc.

Bien sur cette page ne sera pas figée, tout simplement par ce que mon projet n’est pas encore terminé et que j’espère le faire évoluer en procédant par étapes, en définissant plusieurs sprints. Ainsi par exemple, je peux définir les étapes suivantes :

  • Faire voler mon petit drone à la « main » (via une radio commande)
  • Ajouter une caméra et faire de l’immersion visuelle
  • Commander mon drone par ordinateur (communication Xbee)
  • Navigation autonome par calcule de trajectoire (autom, détection d’obstacles, traitement d’images, GPS, altimètres, télémétrie, lasers, etc.). On peut tout imaginer pour cette dernière étape ^^

——————————————————————————————————————————————————————————————————————————————————————————-

Principes et théorie des quadrotors

Un quadrotors est une sorte « d’hélicoptère »  à 4 hélices disposées sur un même plan (parallèle à l’horizon en stabilité).

Source : Wikipédia

Les trois axes de rotation :

Un peu de vocabulaire pour commencer. En aéronautique les appareils se déplacent en 3 dimensions, plus précisément, en tournant autour de 3 axes qui sont nommés

  • L’axe du Roulis (en rouge)
  • L’axe du Tangage (en vert)
  • L’axe du Lacet (en bleu clair)

Afin de pouvoir commander la rotation autour de l’axe du lacet il est indispensable que 2 hélices tournes dans le sens horaires et les 2 autres dans les sens anti-horaire (il faut pas oublier de prendre des hélices couple et ante-couple ^^), de telle manière que les hélices tournant dans le même sens soient à l’opposée l’une de l’autre. Pour la commande du lacet, il faudra donc appliquer un différentiel de vitesse entre la paire d’hélices qui tourne dans un sens et la paire qui tourne dans l’autre, afin d’appliquer une force inertielle et faire tourner notre appareil.

Sur la figure ci dessus j’illustre le principe du lacet. En haut le quadrotors est stable et ne tourne pas autour de l’axe du lacet (en bleu claire), en bas celui-ci tourne dans le sens horaire car les hélices horaires (en rouge) tournent plus vite que les autres.

Pour tourner le quadrotor autour de l’axe du roulis ou du tangage il faut appliquer une vitesse différentielle des moteurs opposés afin de faire pencher notre appareil dans un sens ou dans l’autre.

Les différentes configurations :

Il est possible de représenter le même quadrotors de plusieurs façons. Cela dépend de où sont placés les axes de tangage et roulis par rapport à la structure. Nous ressortons ainsi 2 configurations :

  • La configuration en « x » (à gauche)
  • La configuration en « + » (à droite)

Selon la configuration que vous aurez choisit, la commande des moteurs sera différente. En effet en « + », seul 2 moteurs sont commandés en différentiel lorsque nous commandons l’axe de roulis ou de tangage. En « x » les 4 moteurs sont commandés (voir schémas ci-dessus sur l’explication des rotations autour des axes roulis et tangage).

J’ai envie de dire que cela dépend des goûts et des couleurs, mais ces configurations présenterons des performances et une maniabilité différente. Je ne peux pas encore quantifier cela.

Pour ma part j’ai décidé de choisir pour le moment la configuration en « x » qui a priori me semble plus stable et use moins les moteurs.

Pourquoi c’est pas comme un avion???

Sa différence avec les autres appareils volants (hélicoptère et avion) en fait sa complexité. En effet contrairement à un avion par exemple, nous ne contrôlons pas chaque moteur indépendamment.  Sur un avion chaque canal de commande (sur la radio commande) contrôle un moteur :

  • Gaz pour l’hélice
  • Lacet pour l’aileron de gouverne arrière (de la dérive)
  • Roulis pour  les ailerons
  • Tangage pour l’empannage horizontal

Par conséquent chaque axe est commandé par un moteur. Tandis que sur un quadrotor tous les moteurs sont contrôlés en fonction des valeurs des 4 commandes (gaz, lacet, roulis et tangage). Cela veut dire qu’un étage de conversion des consignes, en commandes moteurs est à faire.

Pour plus d’informations sur la théorie aéronautique je vous invites à aller voir ce site.

——————————————————————————————————————————————————————————————————————————————————————————-

Schémas de principe de mon quadrotors

Aller! C’est parti! On se met au boulot!!

Ici je vais vous présenter la conception de mon quadrotors en vous présentant des schémas de principe et d’architecture.

Ce schéma sera mis à jour au fur et à mesure de l’avancée de mon quadrotors, la première chose à ajouter sera la centrale inertielle ^^.

——————————————————————————————————————————————————————————————————————————————————————————-

Matériel utilisé

Listons un peu le matériel que j’utilise pour le moment :

  • Arduino Uno ou Leonardo : cerveau du quadrotors, cette carte s’occupe de traduire les consignes en commandes moteurs, de plus sont rôle sera de stabiliser le drone en modifiant les commandes moteurs selon l’attitude du drone (retournée par la centrale inertielle). Pas cher, facilement programmable en USB (sauf pour Leonardo dans ses début ><). De plus, une grand communauté existe autour des produits arduino (et c’est bien pratique!!), j’en profite d’ailleurs pour remercier les membres du forum d’arduino et particulièrement Skywodd pour son aide (avec Leonardo >< !!) et pour son blog très instructif!
  • Micro servo maestro de Pololu : sont rôle est de dispatcher les commandes moteurs (envoyées par l’arduino) vers chaque ESC/Moteur concerné. Celui-ci à l’avantage de maintenir la commande tant qu’il n’en reçoit pas une nouvelle et génère nativement des PWM de 50Hz. Ainsi je me facilite grandement la vie ;). De plus je m’évites des attente actives (rheuu pas bien!) avec l’arduino qui pourra s’occuper de l’asservissement à temps plein (ou quasiment). Toutes ces raisons et son faible coût m’ont fait l’adopter. Les servo maestro de Pololu sont vraiment de très bonne cartes, pas chers et très pratiques!! Je les conseils.
  • Centrale inertielle 6D (IMU) 6DOF Atomic de Sparkfun : cette centrale est l’oreille interne du drone, elle permet de récupérer l’attitude en X,Y,Z du quadrotor en étant équipé de 3 gyroscopes et de 3 accéléromètres. Cette pièce est indispensable pour un vol stable. Elle retournera l’attitude du drone à l’arduino qui asservira la vitesse des moteurs, pour réduire l’erreur entre la consigne et l’attitude réelle.
  • Radio commande et récepteur 2.4GHz Turnigy.
  • Electronic Speed Controller (ESC) Turnigy X4 : Indispensable pour contrôler les moteur brushless.
  • Moteurs Brushless X4.
  • Batterie 3S de puissance.
  • Batterie 2S pour l’électronique et les LEDs.

Pour la structure j’ai fait le choix du carbone, pour le poids :

Coût total : 310 euros!!! (sans compter les outils, les câbles, la visserie, etc.). Tout cela n’est pas négligeable. Donc pour faire bien je dit qu’il m’a coûté 400 euros!

——————————————————————————————————————————————————————————————————————————————————————————-

Choix Moteurs/ESCs/Batteries

Ce choix n’est pas si évident si on n’y connaît rien (comme moi au début ^^). Pour le choix de la batterie d’alimentation de l’électronique c’est simple : 2S (pour avoir 7.4V), ce qui est largement suffisent. Donc là, pas de prise de tête. On peut faire le choix de mettre un BEC et d’utiliser qu’une seule batterie pour tout. Mais personnellement je trouve ça risqué. En effet le problème du BEC c’est qu’il chauffe, ce qui peut engendrer des perturbations (notamment dans la réception). De plus la batterie qui va nous freiner en autonomie c’est la batterie de puissance. Donc, même si cela est négligeable, si on peut la soulager de quelques cartes à alimenter, faisons le ^^. Mais là encore, c’est qu’une question de choix!!!!

Choix des moteurs:

Ce choix est le plus important! En effet, tous les autres calculs dépendent de celui-ci. Sur internet on peux trouver des sites qui vous aident facilement à calculer tout ça…. Pour les avions!! ^^. En passant je vous propose ce site qui est très bien fichu : geeby22.

Pour ma part j’ai voulu prendre large, c’est pour ça que j’ai pris 4 moteurs de 1500kv (tours par minute par volts). A priori, ça me semble suffisent. Encore une fois mon quadrotors est un prototype, donc pas de masse finale connue. A termes, en fonction des types de vols souhaités, je me pencherais plus sur le choix des moteurs qu’il faut. On en reparlera quand il volera ^^.

NB : sur la référence des moteurs il est précisé le type d’hélice que l’ont peut utiliser avec ce moteur. Encore une fois ce choix dépend de ce que l’on veut faire : vitesse, réactivité, stabilité, autonomie, couple, couper les merguez, monter les blancs en neige, etc.

Choix des ESCs:

Le choix des ESCs découle directement de celui des moteurs. En effet, il suffit de regarder le courant max et la tension consommés par le moteur pour choisir un ESC. Mes moteurs sont en 11.1v et consomment 15.5 A max. J’ai donc choisit des ESCs de 25A (on prend une marge c’est toujours mieux).

Choix de la batterie de puissance :

Pour le choix de la batterie il faut faire des maths ^^. Tout d’abord le nombre de cellule. Les moteurs demandes 11.1V, on choisit donc 3 cellules (car 3.7 * 3 = 11.1V ;)).

De plus, il faut calculer l’amperage max consommé par tous les moteurs. Cela nous donne donc le calcul suivant : Amax * nbMoteurs. Ici 15.5*4 = 62Amax. Pour une bonne durée de vie des batteries il faut que la consommation effective ne dépasse pas les 2/3 de la puissance fournie par la batterie. Ici ça revient à choisir une batterie de 93A.

Pour la batterie, le calcul est le suivant : Ah * Constant discharge. Pour ma batterie cela donne : 4.9Ah * 20C = 98A

98A > 93A => OK!!!

——————————————————————————————————————————————————————————————————————————————————————————-

Réalisation de la structure

Je n’ai malheureusement pas pris de photos pendant l’assemblage de la structure, mais je pense que d’ici peu j’en prendrais (premier vol = crash en général ^^). Je peux toutefois expliquer le principe (pas bien compliqué) et fournir des photos générales de la structure :

  • Découpez les tiges en 2.
  • Découpez les plaques en carrés de 10cm.
  • Percez les plaques selon le schémas ci-dessous, ainsi que chaque tige (2 trous pour les fixer aux plaques et 1 trou pour le moteur).

  • Fixez les tiges en sandwich entre la plaque 1 et 3 (je n’utilise plus la 2 ^^). Ressortez votre écaire de la trousse!!! Je vous conseilles d’ailleurs de fixer les moteur pendant cette étape (afin de vérifier que les tiges sont droites et perpendiculaires).
  • J’ai choisit une plaque de cuivre de 20cm de coté pour fixer mon électronique (et remplacer ainsi la plaque n°2) : celle-ci vient se fixer sur la plaque n°3 (rotation de 45°) avec des entretoises à vis.

  • Soudez les câbles sur les cartes (ou mettez des connecteurs c’est comme vous voulez). Mais là attention! Un quadrotors ça vibre! Donc il faut que ce soit solide et que ça ne bouge pas. Un câble débranché en vol et c’est la fin des haricots!
  • Fixez les cartes sur la plaque à électronique.
  • Fixez les ESCs (avec des sert-câbles ou du chatterton) sur les tiges (à coté des moteurs). (Pensez à inverser le sens de rotation de 2 des 4 moteurs!! Faire de même pour les hélices).
  • Reliez les entrées des ESCs sur le micro servo maestro et les sorties aux moteurs.

Le tour est joué!!!

——————————————————————————————————————————————————————————————————————————————————————————-

Initialisation des ESCs

Les différents modes d’une radio commande :

En règles générale, les ESCs se programme via la radio commande (et cela dépend du mode que vous utilisez), d’ailleurs petit memo sur les modes : schémas modifié depuis ce site.

Pour ma part j’utilise le mode 2 ^^.

Souvent (encore une fois cela dépend des radio commandes) on doit inverser le contrôle du gaz (c’est à dire que quand la manette est en bas, cela équivaut à gaz = 0, ce qui n’est pas le cas par défaut).

Pour cela, il suffit d’aller dans les configurations de la manettes et inverser le « throttle« .

Allez dans les functions settings.

Dans reverse.

Enfin sélectionnez THR. Et le tour est joué!

Désolé pour la qualité des images….

Programmation des ESCs :

Revenons à nos moutons. Désormais il faut programmer les ESCs (car il existe des options). A la radio commande c’est simple, il suffit de réaliser les manipulations suivantes (en mode 2) :

Toutefois je vous conseilles VIVEMENT de vous procurer un programmateur (pas cher, utile, et surtout il permet de supprimer les bip bip bip qui peuvent vous rendre fou !).

Explication des différentes options :

  • Brake setting : frein moteur (Disabled conseillé)
  • Batterie type : pour ma part Li-poly
  • Cut off type : OFF signifie que lorsque la batterie est en fin de décharge, le contrôleur va couper net l’alimentation. SOFT il va réduire la puissance progréssivement. Personnellement je prend le SOFT ^^
  • Cut off voltage : définit le seuil où l’ESC considère que la batterie est en sous charge, et donc où le cut off intervient, LOW désigne 3V et HIGH désigne 3.3v par cellule. Personnellement je prend MEDIUM (à tester).
  • Start mode : définit l’accélération des moteurs. J’ai choisit SOFT.
  • Timing : LOW.

——————————————————————————————————————————————————————————————————————————————————————————-

Lecture de la consigne envoyée par la radio commande sur l’arduino

La radio commande envoie des signaux à 2.4Ghz, qui sont traduits par le récepteur en signaux PWM, dont la durée de l’état haut traduit la valeur du canal. Ce qui veut dire que nous auront un signal PWM par canal. Notamment la valeur la plus petite de consigne est traduite par un état haut de 10ms et la valeur max par un état haut de 18ms.

Ainsi, dans le cas du roulis par exemple, 14ms correspond au 0 (on ne bouge pas), 10ms correspond à fond à gauche et 18ms correspond à fond à droite.

Ainsi il nous suffit, avec l’arduino, de mesurer la durée de l’état haut pour chaque canal (gaz, roulis, lacet et tangage) pour comprendre la valeur de consigne.

——————————————————————————————————————————————————————————————————————————————————————————-

Traduction de la consigne en commandes moteurs

Comme je l’ai dit, la principale différence entre un quadrotor et un avion, c’est que la valeur des moteurs dépend de la consigne dans son ensemble (gaz, roulis, lacet et tangage). Par conséquent il faut interpréter cette consigne, pour savoir quelle valeur donner à chaque moteur. Je vais expliquer le principe pour une configuration en x.

Le principe général est le suivant :

  • Assigner aux 4 moteurs la consigne de gaz (10ms = éteint ; 18ms = à fond les ballons!).
  • Calculer la consigne relative du lacet, du roulis et du tangage. (10ms = rotation max d’un coté ; 14ms = on tourne pas) ; 18ms = rotation max de l’autre). Par exemple si ma consigne en roulis et de 16ms, nous avons en réalité une commande de rotation vers la droite de 0.5*max (14 = 0 ; 10 = max vers la gauche et 18 = max vers la droite). Par conséquent on retient ici deltaRoulis = 2ms. De plus nous divisons cette consigne relative par 2, tout simplement car cette valeur sera ajoutée à une paire de moteur et soustraite à l’autre (dans le cas de la configuration en x). Par exemple dans le cas d’une consigne de roulis de 16ms (donc rotation vers la droite), nous considérons que deltaRoulis = 2ms, nous appliquons donc la commande différentielle suivante (pour une configuration en x) :

% +1ms aux moteurs 0 (en « haut à gauche ») et 3 (en « bas à gauche »).

% -1ms aux moteurs 1 (en « haut à droite ») et 2 (en « bas à droite »).

Bien évidemment le coefficient de division (ou de multiplication) des consignes relatives peut varier en fonction du poids, de la puissance des moteurs, de la taille des hélices, de leur pas, des caractéristiques souhaitée, etc.

——————————————————————————————————————————————————————————————————————————————————————————-

Communication entre l’arduino et le micro servo maestro

Nous récupérons les consignes, nous les traduisons en commandes moteurs, maintenant il faut envoyer ces commande au servo maestro pour qu’il les dispatches aux bon ESCs. Cette partie m’a posée problème 2 fois ^^. Quand j’étais sur l’arduino Uno tout simplement car j’avais mal lu la doc…. hé oui je sais…

Commençons par le début, tout d’abord nos deux cartes communique en série via la pin Tx (coté arduino) et la pin Rx (coté servo maestro). Jusque là rien de compliqué il suffit de lire la doc et on tombe sur le protocole de communication qui est le suivant :

Merci à Orange Narwhals pour son blog très bien fait.

La doc de Pololu.

Pas de problème jusque là!! Et ben si!!! Car ayant mal lu la doc, je n’ai pas vu cette ligne : « […] the target represents the pulse width to transmit in units of quarter-microseconds « . Voila! Donc en fait les commandes moteurs que vous venez de calculer, il suffit des les multiplier par 4 ^^ (en µs).

Là, content, ça marche très bien, mes moteurs tournent comme il faut etc. Seulement j’ai changé de carte, je suis passé sur Leonardo, qui propose quelques différences par rapport au Uno (notamment le port série usb différencié du port série Rx/Tx), mais surtout des emm****!! >< En effet le nouvel IDE sortie exprès pour lui est pourri!! Rien à dire sur ça! La version française est ridicule, l’uploading marche une 4 fois sur 5 et l’ouverture du moniteur série est très fastidieuse. De plus il n’y a pas d’auto reset, il faut ajouter une petite boucle dans le setup pour l’utilisation du port série USB : UNIQUEMENT si on veut utiliser le moniteur usb.

Vraiment déçu par cette carte!! J’espère qu’ils vont mettre à jours tout ça très rapidement!

De plus j’ai du galérer 1 bon mois pour réussir à faire communiquer Leonardo avec le servo maestro. Je remercie encore une fois au passage Skywodd pour son aide.

Et au final par un pur hasard je me suis débuggé…. L’histoire est drôle mais un peu trop longue à raconter ^^. Surtout qu’il n’est pas impossible qu’une micro modification de mon code puisse résoudre complètement mon problème. Tout ça pour dire qu’avec le Uno aucun problème, avec Leonardo *%$$%£!!!*

——————————————————————————————————————————————————————————————————————————————————————————-

Mise en place de LEDs de contrôle du niveau de batterie

LEDs de direction :

Maintenant que nous sommes capables de « commander » notre petit quadrotors (sans pour autant pouvoir le faire voler), une pensée vient à moi : comment je fais pour discerner le devant du derrière en vol? Hé oui très bonne question! Pour cela je m’enquiquine pas trop : je met 4 LEDs rouges sur les pattes arrières et 4 LEDs vertes sur les pattes avants reliées à la batterie 2S.

Ici le calcule est simple : U = RI ^^. Nous connaissons U = 7.4V – 2.0V (tensions batterie 2S – chute de tension provoquée par la led), nous ne voulons pas que I dépasse 20ma (courant max supporté par la led). Par conséquent : R = U/I = 5.4 / 0.02 = 270 Ohms.

LEDs de contrôle des niveaux de batteries :

Par la suite une autre pensée est venue à moi (hé oui je pense beaucoup ^^). J’aimerais bien que mon drone me prévienne quand il a plus de batterie (2S et/ou 3S). Hé oui je me creuse la tête à le faire voler ce serait dommage de le planter car je ne regarde pas ma montre. Pour cela je rajoute 4 LEDs bleues (diffuses de 10mm) contrôlées par un transistor MOSFET canal N. Ce transistor sera lui même contrôlé par l’arduino, afin de faire clignoter les LEDs quand le jus commencera à manquer.

Alors petit rappel du MOSFET : SI une certaine tension seuil Vgs est appliquée entre la GRILLE et la SOURCE, ALORS le courant entre le DRAIN et la  SOURCE s’ouvre. Voila aussi simple que ça ^^.

Pour calculer R il suffit d’appliquer le même principe que pour les autres LEDS, seulement ici la chute de tension provoquée par la LED bleue est de 3.0V. Donc R = 220 Ohms.

Nous sommes capable de contrôler nos LEDs, il faut maintenant lire le niveau de batterie (2S et 3S). Rien de plus simple! Il suffit de faire le branchement suivant qui permet de venir lire la valeur de l’une des cellules de chaque batterie. Ainsi nous déterminons « l’algorithme » suivant :

SI cellule3S < 3.2V OU cellule2S < 3.2V

       ALORS clignotement à 100ms

       SINON clignotement à 500ms

FIN SI.

  1. félicitation à vous tous j’admire bien la technoque

Laisser un commentaire