Principe du quadricopter
Un quadricopter est très instable ce qui est compensé par l’asservissement des moteurs à la centrale inertielle via le réglage en De plus les moteurs opposés tournent en sens inverse pour éviter une rotation sur lui même de l’appareil.
micro contrôleur Arduino : La carte Arduino s’occupe de tous les calculs relatifs aux commandes et correction de trajectoire du drone. Sur cette carte sont branchés tous les modules, et celle-ci va calculer en temps réel les corrections de trajectoire du drone.
XBee : Ce module a pour fonction de transmettre les informations entre le drone et la télécommande. Il s’occupe des protocoles de communication ainsi que de la gestion de correction d’erreurs de transmission. Le rafraichissement des informations se fait tous les 100 ms . Les données circulent dans les deux sens ; En effet, d’un côté les commandes apportées par l’utilisateur transitent jusqu’au drone, ainsi que les paramètres du PID ; et dans l’autre sens, il y a l’envoi à la télécommande de la tension de la batterie afin d’avoir un aperçu du temps restant de vol.
Centrale Inertielle : Ce module a pour fonction de récupérer l’orientation du drone dans les 3 dimensions de l’espace et ensuite de les communiquer à l’Arduino afin d’effectuer les calculs de corrections automatiques.
ESC : Le drone possède un ESC par moteur, ce module permet de transformer les données de poussée émanant de l’Arduino en tension pour alimenter les moteurs. Afin d’effectuer une commande adéquate, les ESC doivent être paramétrés au préalable.
Configuration en +, pour des hélices de 11” sans chevauchement et avec un minimum de 2 cm de marge entre les hélices les dimensions obtenues sont :
Ce qui donne une envergure de 71 cm environ au drone, avec une plateforme centrale de presque 15 cm de côté.
== Matériel :==
Nous avons opté pour un drône en “+”. Pour la construction du châssis nous utilisons un profilé en “T” en aluminum (robuste à la torsion et la flexion et léger) ainsi qu'une plaque d'aluminum pour la plateforme.
Avec la colle Epoxy, nous fixons les bras avec la plateforme en aluminium préalablement découpée en 9×9 cm . Celle-ci étant perforée, elle nous permettra plus tard d'y faire passer des vis ou des câbles. Nous collons ensuite sur cette plaque du feutre afin d'atténuer les vibrations.
Les pieds sont fabriqués à partir d'un tuyau de PVC. Des rondelles de 2 cm de largeur sont découpées, puis applaties au pistolet à air chaud pour faciliter leur fixation aux bras du drône. Le PVC est peu onéreux, léger, et permet un bon amortissement lors d'une chute.
Chaque support de moteur comporte 4 trous. 2 sont utilisés pour fixer le moteur au châssis, les deux derniers servent à la fixation des pieds en rondelle de PVC.
Un carré d'aluminium a été plié puis collé à l'epoxy sous le chassis. La batterie vient s'y glisser. Un petit butoir est ajouté d'un côté pour la bloquer, l'autre côté sera sécurisé par velcro ou ficelle.
Matériel :
micro-controleur : Arduino Pro Mini
Centrale Inertielle : EY88 10DOF IMU Motion Sensor
Module Com : Xbee ZB Pro
Batterie de puissance : ZIPPY Compact 5800mAh 3S 25C Lipo Pack
Moteurs brushless : Turnigy D2836/11 750KV (x4)
ESC : HobbyKing 20A BlueSeries Brushless Speed Controller (x4)
Helices : Slow Fly Electric Prop 11×4.7SF
Helices : Slow Fly Electric Prop 11×4.7R SF
Distribution de puissance : Quadcopter Power Distribution Board
Chaque ESC est relié à son moteur d'un côté et à la batterie de l'autre.
L'arduino pro reçoit ses informations de la centrale inertielle
On transforme le 5V récupéré depuis un des ESC vers du 3.3V pour alimenter l'arduino pro mini.
Tests avec la centrale inertielle
Le tout assemblé :
Micro-controleur : Arduino UNO
Module com : xbee ZB pro
shield xbee arduino
shield lcd arduino
joystick + potentiomètres slide (direction et poussée)
La télécommande doit :
Le drône doit :
Un quadricoptère étant très instable, les moteurs sont asservis à une consigne via un correcteur PID. Ainsi à tout instant la vitesse des moteurs est modifiée pour que le drone maintienne sa position. Il y a 3 angles à corriger : le roulis, le tangage et le lacet.
Ce qui donne en code :
float compute(float com,float gyro, float dt){
error = com - gyro;
pTerm = error;
iTerm += error * dt;
dTerm = (error - prevError) / dt;
prevError = error;
return (kP*pTerm + kI*iTerm + kD*dTerm);
}
La fonction compute récupère les différentes valeur de la télécommande (joy , le thrust ,rotation)et une valeur dt qui représente le temps entre deux prises d'information et renvoie la valeur de correction. Cette fonction est implémentée dans la classe PID.h .
Afin d'utiliser la fonction compute on crée un objet PID p; Ainsi ou récupère les valeurs corrigées:
/*tangage*/
float com1=axis_X*(10/255);
angle_Xref = (euler[0] * 180/M_PI);
gyro = Angle(angle_X,angle_Xref);
temps_x1 = millis();
corrMot1 = p.compute(com1,gyro,(millis()-temps_x2));
temps_x2 = temps_x1;
Nous commençons par le tangage afin de faire une correction et on fait la même chose pour le roulis et le lacet.