← travaux
Le drone en vol sous des arbres : un quadricoptère noir aux hélices fines, équipé de pieds et d'une pince jaunes imprimés en 3D.

● parcoursmai 2022 — juil. 2022

Un drone qui attrape un cube, au Brésil

rôle
Stagiaire ingénieur (stage de 4e année)
entreprise
LAMMI · Université fédérale du Paraná (UFPR)
lieu
Curitiba, Brésil
outils
  • Python
  • Qt
  • Raspberry Pi
  • Blender
  • Cleanflight

Le contexte

Trois mois, du 2 mai au 28 juillet 2022, au LAMMI, le laboratoire de magnétisme, de mesures et d'instrumentation de l'université fédérale du Paraná, à Curitiba. Créé en 2003, il travaille sur l'instrumentation électronique, la micro-électronique et le magnétisme. Depuis 2017, il accueille chaque année des étudiants de Polytech Grenoble ; cette fois, nous étions trois : Fabien Pagès, Ryan Hatil et moi.

Le laboratoire LAMMI : une grande salle lumineuse avec des paillasses, des postes de travail et du matériel de mesure.
Le laboratoire LAMMI, à l'université fédérale du Paraná.

Le défi D100

Le stage prépare une compétition entre universités, à Curitiba. Le drone décolle d'une zone A, va chercher à 100 mètres un cube de 10 cm et 200 g posé dans une zone B, puis le ramène. Le pilote ne bouge pas, le drone ne touche le sol que dans les zones, et la pince doit être conçue par l'équipe. Le plus rapide gagne, et une règle résume l'esprit : tout ce qui n'est pas interdit est autorisé.

Schéma du parcours : la zone A et la zone B, deux cercles d'un mètre de diamètre séparés de 100 mètres, le trajet du drone, et les règles en liste.
Le parcours et les règles de la compétition.

Reprendre le projet

Un drone existait déjà, construit par les promotions précédentes, qui avaient aussi tenté d'automatiser l'atterrissage avec ROS, sans y parvenir. Le vrai problème était la stabilité : au moment de saisir le cube, le pilote, à 100 mètres, réagissait trop tard. Nous avons donc choisi un système qui demande le moins possible au pilote : la vision pour repérer le cube (Ryan), des capteurs de distance pour l'approche (Fabien), et une pince qui pardonne les écarts (moi).

L'électronique du drone : la radiocommande et son récepteur, le contrôleur de vol Naze32, quatre contrôleurs de moteurs en Oneshot125 et quatre moteurs brushless, une batterie LiPo, la pince à deux servomoteurs ; et sur la Raspberry Pi, la caméra stabilisée, le capteur ultrason, les capteurs de temps de vol et l'interface du pilote.

Une interface pour le pilote

Envoyer la vidéo au pilote ? À plus de 100 mètres, la latence l'aurait rendue inutile. La Raspberry Pi n'envoie donc que des positions et des mesures, et une interface en Qt, ma première en Python, reconstitue la scène : le drone au centre, le cube qui bouge autour de lui, une jauge d'altitude, une boussole pour l'angle du cube et une jauge de connexion. Tout passe du rouge au vert à mesure qu'on s'approche.

L'interface du pilote : une boussole verte en haut à gauche, une jauge d'altitude verticale, le drone vu de dessus au centre avec le cube sous lui, des barres de connexion en haut à droite, les valeurs x, y et h, et une rangée de boutons de test en bas.
L'interface du pilote, en Qt.

Mesurer l'altitude

À 100 mètres, on ne voit pas à quelle hauteur vole le drone. J'ai branché un capteur ultrason HC-SR04 sur la Raspberry Pi, à travers un pont diviseur de tension pour protéger ses entrées, et écrit sa classe Python : chaque lecture fait dix mesures, écarte les extrêmes et garde la moyenne, parce que le capteur renvoie parfois une valeur aberrante. Sous 30 cm, les capteurs de temps de vol devaient prendre le relais.

Un banc de test au mètre ruban a mesuré sa précision : moins de 2 % d'erreur au-delà de 10 cm, jusqu'à 3,60 m (pour 4,50 m annoncés), largement assez pour l'approche du cube, qui se joue autour d'un mètre.

Le banc de test : un mètre ruban posé sur une table, le capteur ultrason à un bout et le cube blanc déplacé le long du mètre.
Le banc de test.
Courbe de l'erreur du capteur ultrason en pourcentage selon la distance : un pic de 15 % à 2 cm, puis une erreur entre 0 et 2 % au-delà de 10 cm.
L'erreur selon la distance : sous 2 % après 10 cm.

Stabiliser la caméra

Pour repérer le cube, la caméra doit rester parallèle au sol quand le drone s'incline. Elle est montée sur une nacelle à deux axes (Basecam), que j'ai réglée avec SimpleBGC : pour le tangage et le roulis, I fixé à 0,05, puis P augmenté jusqu'aux premières oscillations, et D augmenté pour les amortir, jusqu'à ce qu'il n'améliore plus rien.

La nacelle de stabilisation posée sur une table : deux moteurs gimbal, sa carte de contrôle et ses câbles rouges.
La nacelle à deux axes de la caméra.

La pince

Ma première pince, modélisée sous Blender, devait coulisser sur des rails pour se centrer sur le cube. Puis les règles ont changé : le cube serait posé dans la zone du pilote, qui pourrait se déplacer. Il fallait moins de précision et plus d'amplitude. Avec Fabien, nous l'avons redessinée en deux mâchoires, chacune sur son servomoteur, imprimées en 3D, puis rapprochées après les premiers essais, où le cube glissait.

La première pince modélisée sous Blender, en pièces détachées : deux engrenages, deux bras et deux mâchoires.
Le premier prototype de pince, sous Blender.

Sans les capteurs de temps de vol, qui ne fonctionnaient pas, la Raspberry Pi ne pouvait plus commander la pince. J'ai soudé les signaux des deux servos en un seul câble, branché sur une voie auxiliaire du récepteur : la pince s'ouvre et se ferme depuis la radiocommande.

Régler le vol

Restait la stabilité, avec Cleanflight : calibrer l'accéléromètre, régler le protocole des contrôleurs de moteurs en Oneshot125, couvrir le contrôleur de vol, sensible à la lumière et au vent, puis ajuster les PID et baisser les « RC rates » pour que les manettes soient moins nerveuses. Au bout du compte, le drone tenait assez bien pour saisir le cube en une trentaine de secondes.

Capture de Cleanflight : le réglage PID, avec les coefficients proportionnel, intégral et dérivé pour le roulis, le tangage et le lacet.
Les PID du contrôleur de vol.
Capture de Cleanflight : les RC rates du roulis, du tangage et du lacet, et leurs courbes de réponse.
Les RC rates, abaissés.
Les vingt premières secondes d'un vol d'essai : le décollage, le cube dans la pince.

Ces trois mois m'ont appris à écrire une interface graphique, à concevoir des pièces en 3D et à régler des PID pour de vrai, à l'autre bout du monde, en équipe et dans une autre langue.