Une année dans la robotique amateure
Dans le courant de l’année 20171, je m’étais trouvé une nouvelle passion (oui, je suis sujet aux passions aussi fulgurantes que passagères). En effet, après avoir aperçu cela de très loin grâce à un ami, je me suis penché de plus près sur les arduino !
Arduino est la marque d’une plateforme de prototypage open-source qui permet aux utilisateurs de créer des objets électroniques interactifs à partir de cartes électroniques matériellement libres sur lesquelles se trouve un microcontrôleur […] Le microcontrôleur peut être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches très diverses comme la domotique (le contrôle des appareils domestiques — éclairage, chauffage…), le pilotage d’un robot, de l’informatique embarquée, etc.
Wikipedia
Pour faire simple, une carte Arduino est une carte électronique disposant d’un certain nombre d’entrées et de sorties. Via celles-ci, il est possible de connecter tous types de composants qui interagiront ensemble, alternativement et/ou en fonction de l’environnement du montage ainsi obtenu. Pour cela, il faut bien sûr uploader dans l’arduino un programme, permettant de relier les entrées et sorties, codé en langage C ou C++.
De cette manière, j’ai fait quelques pas dans le domaine de la robotique. Je ne vous ferai pas une synthèse exhaustive de tout ce que j’y ai fabriqué (au propre comme au figuré), mais je vous propose un rapide panorama de mes bricolages dans ce domaine. Gardez néanmoins en tête que le présent article est une synthèse de mes archives, rédigée plusieurs années après les étapes relatées ci-dessous.
Premiers pas
J’ai commencé avec un abonnement à Robobox, qui proposait une box mensuelle, livrée à domicile, contenant du matériel et des instructions pour fabriquer de premiers robots.
Cette première vidéo correspond à l’une des premières box, permettant de concevoir et fabriquer une alarme basée sur un détecteur de mouvement. Plutôt rigolo, et cela permet de comprendre les rudiments.
Par la suite, j’ai testé plus ou moins individuellement différents type de détecteurs : vibrations (cf. ci-dessous), proximités, lumière, température, humidité, etc…
Toutefois, je me suis rapidement trouvé confronté au rythme trop lent des box mensuelles. C’est ainsi que je me suis naturellement tourné vers internet et ses innombrables tutoriels, ainsi que vers l’achat de menus composants sur des sites chinois à la fiabilité très variable…
Je me suis d’abord amusé à croiser des capteurs d’ambiance (lumière, température, humidité…) à un petit module doté d’une carte SD. Ainsi, j’ai pu enregistrer les cycles journalier chez moi, pour les afficher ensuite. A quoi ça sert ?! En soi, à pas grand chose tel quel. Mais les applications théoriques2 peuvent être multiples :
- Allumer la lumière lorsque la luminosité ambiante est trop basse (A l’aide d’un module d’émission/réception radio, j’avais même réussi à
piraterpiloter des prises radiocommandés de ce genre avec mon arduino.) ; - Enclencher un chauffage si la température diminue trop ;
- Etudier l’évolution d’un taux d’humidité dans un local, afin de le comprendre et de mettre en place des solutions adaptées…
Plus tard, j’ai découvert l’existence de modules Bluetooth, permettant de recevoir des informations directement sur mon mobile, mais également d’envoyer des instructions ! L’exemple ci-dessous emploie le shield de chez Adafruit. Il s’agissait ici d’allumer et d’éteindre une diode depuis mon mobile :
A titre d’exemple supplémentaire, au moment où j’écris ces lignes, il y a actuellement une campagne de financement participatif sur Kickstarter pour un module de mesures biométriques ! Carrément. Bon, par contre, c’est hors de prix…
Robots radiocommandés
Puis, j’ai commencé à m’intéresser aux moteurs électriques, avec la possibilité évidente de les coupler à des roues, de manière à concevoir et fabriquer des petits robots capables de se déplacer !
Ainsi, en couplant un robot capable de se mouvoir avec la possibilité de lui envoyer des instructions par bluetooth, j’ai réalisé mes premiers engins radiocommandés. A cet effet, j’ai utilisé cette excellente application sous Android, qui permet de concevoir un tableau de bord fonctionnel, avec boutons de commandes et panneaux d’affichage. Alors, évidement, ça n’était rien de plus que les vieilles voiture télécommandées de notre enfance… mais la grosse différence, c’est que là c’était 100% de ma conception !
Avec la possibilité d’émettre du bruit, de clignoter de mille façons, d’actionner des roues dans différents sens et à différentes vitesse, j’ai progressivement amélioré mon robot en y ajoutant tout un tas de fonctions parfaitement inutiles, et donc totalement indispensables.
Oui oui, j’avais même un bouton pour le faire danser !
Alors, peut-être trouvez-vous que depuis le début de cet article, j’emploie le terme de robot à mauvaise escient, et vous n’auriez par tort… En effet, jusqu’à présent, il ne s’agit pas de robot mais de simple engins télécommandés.
Robots autonomes
En réalité, comme on peut le voir sur sa photo, le robot ci-dessus était bardé de capteurs :
- Capteurs infrarouges à l’avant pour éviter les collisions de dernière minute ;
- Capteur infrarouge sous le châssis, afin d’éviter toute zone de vide (qui a dit « escalier » ?) ;
- Capteur à ultrasons (le truc qui ressemble à des yeux) permettant de mesurer la distance à l’obstacle le plus proche.
A cela s’ajoutait plusieurs effecteurs :
- Quatre roues motrices independantes, à sens de rotation et vitesses variables ;
- Un servo-moteur sur lequel était fixé le capteur à ultrasons.
Avec tout cela, le robot était capable de se déplacer en autonomie, tout en évitant les obstacles. Ainsi, je pouvais le passer du mode « piloté » au mode « autome » : c’était le levier rouge sur l’image du tableau de bord ci-dessus. Il était alors simplement programmé pour se diriger dans la direction présentant l’obstacle le plus lointain (le tout en sifflotant) :
J’ai évoqué les servo-moteurs ci-dessus. Il s’agit d’un type de moteurs particuliers, qui ne tourne pas à l’infini, mais qui prend une position angulaire en fonction de l’instruction qu’il reçoit. Dit autrement : l’axe du servomoteur execute l’angle qui lui est demandé. Ce type de composants est tout à fait adapté au pilotage d’articulations.
Par exemple, parmi mes expérience, j’avais imaginé ce que j’avais appelé un tournesol électronique. Il s’agissait d’un petit robot statique dont la seule fonction était d’analyser son environnement, puis de s’orienter vers la plus forte source de lumière. Pour cela, j’ai détourné des éléments mécaniques (pièces en alu) d’un kit de ce type.
Vers un hexapode…
Arrivé à ce stade, mon objectif était de réaliser un hexapode autonome. Similaire aux réplicateurs dans Stargate, un hexapode est un robot qui est doté, non pas de roues, mais de 6 pattes à la manière des insectes.
Mon idée était donc de concevoir et fabriquer un tel robot… Pour cela, j’ai eu quelques défis supplémentaires à relever.
Cinématique inverse
Tout d’abord, j’ai dû faire face à un premier problème : une patte c’est pas comme une roue ! Sans blague !
Une patte est en fait généralement constituée de 3 articulations (éventuellement 2, parfois 4) pilotées par des servo-moteurs. Pour chaque patte, l’intelligence embarquée dans l’arduino du robot doit pouvoir gérer simultanément les 3 servos afin d’amener l’extrémité de la pattes là où on le souhaite. Ca peut sembler évident, mais ça ne l’est pas tant que ça !
En effet, faire décrire une trajectoire précise (par exemple rectiligne) à l’extrémité de la patte en ne pilotant que des rotations, c’est un domaine qui se nomme la cinématique inverse. Et sans être une science occulte, cela nécessite quand même de se gratter un peu la tête afin de comprendre son fonctionnement, et comment l’implémenter.
Néanmoins, je suis parvenu à programmer un tel comportement sur un prototype de patte. Voyez plutôt, c’est pas très beau, mais ça marche :
Arrivé à ce stade, en théorie, le plus dur était fait ! Avec une patte fonctionnelle, il suffisait de reproduire cela 6 fois, pour obtenir un hexapode. Toutefois, je voulais lui insuffler une capacité supplémentaire : celle de comprendre son environnement.
Comprendre son espace
D’accord, le mot « comprendre » est sans doute un poil fort. Mais je ne voulais pas reproduire une simple machine radiocommandée comme ci-dessus. Et je ne voulais pas non plus qu’il se contente de se balader dans des directions aléatoires en évitant les obstacles. Je voulais qu’il soit capable de se repérer dans l’espace !
Pour cela, mon robot avait besoin de deux choses :
- Être capable de cartographier son environnement, c’est à dire repérer les obstacles, les localiser dans l’espace, et les mémoriser. Cet aspect ne me semblait pas poser de problème majeur, aussi l’ai-je laissé pour plus tard ;
- Être capable, une fois la zone cartographiée, de savoir où il est, où il veut aller, et surtout quel chemin emprunter.
Odométrie
L’odométrie est une technique permettant d’estimer la position d’un véhicule en mouvement.
Wikipédia
D’odométrie permet au robot de savoir où il se trouve dans l’espace, notamment en considérant le point où il se trouvait précédemment, ainsi que la trajectoire qu’il a parcouru.
Là encore, ça semble simple mais la mise en pratique est plus délicate. J’ai essayé d’appliquer l’odométrie avec mon robot à roues… Et les résultats n’ont pas été des plus concluants. En effet, le patinage des roues motrices (en particulier lors des virages) fausse toute analyse de leurs axes en rotation. J’ai donc dû ajouter 2 roues supplémentaires dont la seule fonction était d’estimer le chemin parcouru, avec une structure articulée conçue via OnShape par moi-même, et imprimée en 3D.
Rétrospectivement, j’ai retrouvé assez peu d’informations sur cette partie de mes pérégrinations. Je ne me souviens donc plus trop du résultat aujourd’hui… Néanmoins, j’étais parti du principe que l’odométrie devrait être beaucoup plus simple sur un robot équipé de pattes, ses mouvements étant beaucoup mieux connus et contrôlés dans l’espace grâce à la cinématique inverse.
Recherche de chemin
Enfin, je me suis penché sur la manière dont un robot peut planifier son chemin pour aller d’un point de départ à un point d’arrivés, tout en évitant des obstacles. Partant du principe que le robot connaît son environnement et sait où il est (cf. les deux paragraphes précédents), il lui reste à planifier sa trajectoire avant de l’exécuter.
Là encore, je n’ai rien réinventé. Cette discipline se nomme le pathfinding ou « recherche de chemin » et il existe des algorithmes permettant cela. Je n’ai fait que les décortiquer pour les comprendre, et les implémenter dans mon arduino. Et me connaissant, j’ai probablement dû y ajouter ma petite touche personnelle, par forcément nécessaire mais toujours satisfaisante.
Ainsi, j’ai pu vérifier que mon code injecté dans mon arduino permettait bien de trouver le chemin le plus court entre deux points. Pour cela, je n’avais pas besoin d’un robot capable de mouvements réels : une partie de mon code (embarqué dans l’arduino) générait aléatoirement une carte avec des obstacle, puis la suite du code devait trouver le chemin le plus court entre le départ et l’arrivée. En sortie, le code produisait un petit dessin tel que celui ci-dessous.
- En blanc : les secteur que le robot peut traverser ;
- En noir : les secteurs que le robot ne peut pas traverser. Ce sont donc des obstacles à contourner. Dans le cas présent, ils étaient générés aléatoirement ;
- En rouge : le chemin retenu par l’algorithme ;
- En gris : des secteurs à éviter si possible (comportement jamais implémenté).
Ainsi, les principales briques techniques de mon futur hexapode étaient posées et fonctionnelles : contrôle d’une patte par la cinématique inverse, odométrie pour se repérer dans l’espace, nombreux capteurs pour comprendre son environnement, et pathfinding pour calculer ses trajectoires en autonomie. Et bien sûr, avec toujours la possibilité de le contrôler depuis mon smartphone.
Abandon
Hélas, je ne suis pas allé plus loin dans mon projet. Pourquoi ? Par manque de ressources.
Manque de temps, pour commencer… Car ce hobby avait commencé à me consommer de plus en plus d’heures. Bien sûr, comme je vous l’ai exposé, le plus difficile était fait. Néanmoins, il restait encore énormément de temps à passer à combiner les différentes briques de base, et à les peaufiner pour les faire fonctionner entre elles (problèmes de mémoire machine, problèmes de précision des effecteurs, problèmes de fiabilité, problème inconnus, etc.). Bref, il y avait encore de nombreuses dizaines d’heure à y passer. Et contrairement aux étapes précédentes, il n’y avait plus tellement de défi intellectuel à relever. Uniquement d’interminables soirées de mises au point vraiment pas passionnantes.
Mais aussi (et peut-être surtout) : manque d’argent ! En effet, je l’ai évoqué plus haut, je me fournissais beaucoup en composants chinois bas de gamme, dont la fiabilité était très approximative (quand certains étaient des contrefaçons en plastique de pièces métalliques, voire ne fonctionnaient tout simplement pas). Afin d’avoir un robot abouti et fonctionnel, j’allais être obligé de monter en gamme, et donc en coût. De mémoire, un servo-moteur seul, robuste et de bonne qualité coûtait à partir de 20-30€. Et rappelez-vous : une patte en nécessite 3, pour un hexapode à 6 pattes.
Bref, par manque de ressources, j’ai progressivement abandonné au début de l’année 2018. Mais qui sait, j’ai conservé tous mes composants ainsi que mes codes… en prévision d’une reprise éventuelle, un jour, peut-être.
Et pour ne pas vous frustrer complètement, voici à quoi ressemble un bel hexapode radiocommandé (sauf erreur, les composants sont commercialisés avec le code du robot) :
Conclusion
Gardez en mémoire que cet article a été rédigé au milieu de l’année 2021, et porte sur des activités que j’ai réalisées entre fin 2017 et début 2018. Il y a sans doute quelques erreurs ici et là. Et je suis moi-même frustré, car je suis sûr que j’avais d’autres images et vidéos, et je n’ai pas réussi à retrouver…
Je suis tout de même assez satisfait d’avoir fait ce petit travail d’archéologie, et d’en avoir tiré le présent article. J’ai passé beaucoup de temps (et de plaisir !) dans ce voyage au pays de la robotique, et il aurait été dommage que ces réflexions, photos et quelques vidéos restent définitivement au fin-fond de mes archives. Non ?
- Notez que cela correspond au début de l’hibernation de ce blog, ce qui n’est sans doute pas un hasard…[↑]
- Attention tout de même à la sécurité électrique ![↑]