
● 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
- liens
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 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é.

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).
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.

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.


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 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.

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.


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.