Flying ESP32 🚀!

Flying ESP32 🚀!

Premier envol de notre drone avec Ardupilot sur ESP32 👌

Pour notre projet d’architecture commune entre tous nos robots đŸ€– nous nous sommes basĂ©s sur le programme ArduPilot. Il s’agit d’un projet open-source regroupant de nombreux experts du domaine des drones lĂ©gers et des modĂ©listes du monde entier 🌏.

image

ArduPilot est un autopilote qui propose des briques d’autonomie complexes pour contrĂŽler đŸ•č des drones multi-hĂ©lices 🚁, des avions ✈, des voitures 🚗 ou des bateaux â›”, ainsi que des sous-marins 🐳!

Nous avons entrepris de porter ce programme đŸ’» sur un nouveau micro-contrĂŽleur : l’ESP32. Celui-ci est trĂšs utilisĂ© pour l’IoT et bĂ©nĂ©ficie d’une large communautĂ©. ArduPilot est en gĂ©nĂ©ral uniquement disponible sur des micro-contrĂŽleurs STM32 Ă  architecture ARM qui nĂ©cessitent des cartes Ă©lectroniques complexes et souvent coĂ»teuses.

image image
L’ESP32, notre centrale d’attitude et la carte que nous avons designĂ©e pour aller sur tous nos robots
(avant et aprĂšs assemblage)

Ce portage facilite donc la construction d’un robot et rĂ©duit les coĂ»ts pour les briques de base de nos robots multi-milieux. Mais il a amenĂ© de nombreux challenges Ă  rĂ©soudre !

En effet, les architectures hardware entre l’ESP32 et les STM32 sont trĂšs diffĂ©rentes et ne disposent pas des mĂȘmes fonctionnalitĂ©s. Par exemple, l’ESP32 a introduit le multi-cƓurs dans le monde des micro-contrĂŽleurs. Or si on veut l’utiliser pour contrĂŽler des vĂ©hicules, la maĂźtrise fine du temps ⏳ devient primordiale et il faut donc parfaitement gĂ©rer la parallĂ©lisation des tĂąches.

Autre problĂšme de taille : venant de l’IoT 🌐 l’ESP32 n’est Ă  l’origine pas taillĂ©e pour de la performance đŸƒâ€â™‚ïžâ±ïž.

Quelques dĂ©fauts sont donc prĂ©sents pour notre application tel que le module I2C hardware qui est trĂšs lent 🐌 ou le fait qu’il n’y ait pas de canal DMA pour copier directement en mĂ©moire les donnĂ©es arrivant des diffĂ©rents capteurs. Dans notre cas, la problĂ©matique de l’I2C est particuliĂšrement importante 🧐, car c’est le bus qui nous permet de communiquer avec notre centrale d’attitude. Ce capteur est indispensable pour faire les asservissements les plus basiques du vĂ©hicule, tels que l’asservissement en assiette, en cap, en accĂ©lĂ©ration ou encore en hauteur.

Pour tous nos autres robots, ce n’était pas rĂ©ellement un problĂšme, mais pour un drone multi-rotors, la vitesse de rafraichissement des donnĂ©es en provenance des capteurs est capitale pour permettre le maintien en l’air 🩅.

image image image
Tout fonctionne pour Kraken, notre catamaran, Ryujin, notre sous-marin et Mabouya, notre voiture, mais Kiwi, notre drone volant, ne peut pas dĂ©coller đŸ˜±!

Quant à l’absence de DMA, cela impose de prendre plus de temps CPU pour certains bus (😅 heureusement on a deux cƓurs 💞).

Mis Ă  part le problĂšme de l’I2C, ces diffĂ©rentes contraintes ont Ă©tĂ© relevĂ©es par les Ă©tudiants du laboratoire, notamment avec le travail de Charles Villard, qui y est maintenant doctorant. Ces travaux leur ont permis de co-publier un article scientifique 📃🎓 sur le sujet.

Quant au dernier point bloquant pour que notre projet puisse fonctionner sur des drones volants, ce sont les Ă©tudiants d’un groupe PFE (Projet de Fin d’Études) de la majeure GISTRE, spĂ©cialisĂ©e sur les systĂšmes embarquĂ©s, qui se sont penchĂ©s dessus.

Le groupe est composĂ© de LoĂŻc Bellonnet-Mottet, Thomas Lupin et Vincent Parizet. En premiĂšre Ă©tape, ils ont mis en place une procĂ©dure de test ⚖ avec notre centrale d’attitude pour mesurer les performances initiales et Ă  venir. Puis ils ont profilĂ© 🔎 le code afin d’identifier les diffĂ©rents goulots d’étranglement ralentissant l’échantillonnage des donnĂ©es.

Ils ont pu voir, entre autres, une utilisation extensive de listes chaĂźnĂ©es, une gestion non optimale des allocations mĂ©moires dynamiques (Ă  Ă©viter au maximum en embarquĂ©) et de nombreuses interruptions dues Ă  la maniĂšre d’utiliser les buffers hardware du module I2C.

De plus, en Ă©tudiant le comportement hardware en lui-mĂȘme, ils ont constatĂ© quelques dĂ©fauts empĂȘchant une communication I2C fiable, rapide et stable.

Ce dernier point, particuliÚrement, a orienté le projet vers une solution software.

Ils ont ensuite explorĂ©, implĂ©mentĂ© et testĂ© ⚗ plusieurs solutions en s’inspirant des drivers de diffĂ©rents OS open-source supportant l’ESP32 dont ils ont comparĂ©s les performances. Forts des implĂ©mentations des diffĂ©rents OS temps rĂ©els disponibles sur ESP32 (tels RIOT OS), ils ont rassemblĂ© les optimisations des diffĂ©rents projets afin d’obtenir un driver I2C performant capable de lire les donnĂ©es de la centrale.

La vitesse mesurĂ©e par le banc de test a significativement augmentĂ©e 😯 : on a ainsi pu atteindre et dĂ©passer les 400 Hz de lecture, nĂ©cessaires au vol d’un drone !

Sauf que, en passant par une solution software plutĂŽt que hardware, le protocole se retrouve directement gĂ©rĂ© par le CPU. Il fallait donc vĂ©rifier que cette implĂ©mentation n’était pas trop gourmande en ressources et permettait bien Ă  Ardupilot de s’exĂ©cuter sans que cela impacte les autres tĂąches đŸ„șđŸ€žâ€Š

image image
Aujourd’hui, c’était l’heure du verdict avec le test sur la plateforme đŸ„!

Charles a donc ajoutĂ© leur implĂ©mentation dans le projet ArduPilot sur ESP32 et a rĂ©alisĂ© les essais de vol Ă  l’Under. Voici la vidĂ©o du rĂ©sultat, sans rĂ©glage des PIDs mais avec un peu de filtrage de donnĂ©es :


Tout premier vol : sucess đŸ„ł !!!


Ce premier vol symbolique montre la capacitĂ© de l’ESP32 Ă  tenir les contraintes des drones volants et la faisabilitĂ© du projet ! Et au final, la comparaison de la charge CPU avec et sans l’implĂ©mentation montre que le passage Ă  un driver software est plutĂŽt nĂ©gligeable sur notre utilisation đŸ€©. Maintenant il ne reste plus qu’à rĂ©gler les configurations classiques d’un drone pour qu’il puisse rĂ©pondre Ă  nos besoins de mission : bref, de la routine !

Bravo aux Ă©tudiants impliquĂ©s pour la qualitĂ© de leur travail 👍👏 !

Ce projet de portage sur ESP32 est en cours de peaufinage : l’objectif est de pouvoir contribuer sur la branche principale du projet ArduPilot et donc de faire profiter la communautĂ© des avantages et de la simplicitĂ© d’utilisation de l’ESP32.

N’hĂ©sitez pas Ă  venir contribuer si ça vous intĂ©resse !

À suivre donc 😉


Author face

Les 2L

Enseignant.e.s-chercheu.r.se.s Ă  l'EPITA en robotique d'exploration, co-responsables de l'Ă©quipe de recherche SEAL (Sense, Explore, Analyse & Learn)

Recent post