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 đ.
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.
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 đŠ .
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 đ„șđ€âŠ
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 đâŠ