AMORCE
La technologie progresse sans cesse, fatalement, nous ne pouvons que l’admettre.. Mais le saviez-vous ? L’homme à envoyé son tout premier véhicule à quatre roues dans l’espace en 1970. Il s’agissait de Lunokhod 1, une RC Car* soviétique ☭ robotisée à distance lors de la mission Luna 17.
La bête ne pesait pas moins de 756kg, était alimentée par des panneaux solaires et a parcouru la distance de 10km de terre lunaire pendant une durée d’environ 10 mois, et le tout en étant contrôlée depuis la Terre ! Impressionnant, n’est-ce pas ?
Illustration 3D de Lunokhod 1
Et si nous étudiants en 2ème année à Polytech Angers, construisions quelque chose capable de telles prouesses ?
INTRODUCTION
Tout d’abord, qui sommes-nous et comment nous est venue l’idée parmi la longue liste de thèmes proposés ?

M.Bassel, Gabriel, Samuel, Hector et Oussama
En effet, peu doués avec l’informatique pour la majorité du groupe, nous avions envie de rechercher l’effort plutôt que le confort. En effet, le projet repose sur de fortes compétences en programmation.
Nous décidons alors d’affronter nos limites avec courage et de nous confronter à nous-même ! En voilà une belle philosophie. Notre projet a été encadré par notre tuteur, M.Chokr Bassel, un enseignant-chercheur de l’Université d’Angers, travaillant actuellement sur l’intelligence artificielle.
CONTENU DU PROJET
Notre problématique était donc de réaliser une RC Car complètement autonome, autrement dit un petit Rover de quelques kilos à peine, capable de suivre ordres et directions, le tout en disposant d’un système de reconnaissance se basant sur du deep-learning. Dit comme cela, on peut se dire que la mission sera laborieuse. C’était le cas, et on vous explique cela !
Premièrement, le rover se comporte comme une voiture (plus ou moins), c’est un engin à quatre roues et donc doit se mouvoir sans la moindre contrainte, il est équipé d’une carte Raspberry-Pi 4 qui joue le rôle d’un ordinateur et qui est connecté à une carte Adeept, qui permet de contrôler le robot. La carte Adeept dispose de connecteur sur lesquels viennent se brancher les servomoteurs* qui permettent le bon mouvement des roues de l’essieu avant et de la caméra ainsi que les composants électroniques alimentant les LEDs, les capteurs et module de Line-Tracking (on en parlera plus tard, on en a bavé), puis des connecteurs permettant le de relier le moteur ainsi que le boitier porte-piles, utiles alimenter le robot et pour le faire rouler. On branche sur la carte Raspberry la caméra, qui permet la reconnaissance via Yolo.
LE DÉBUT DES ENNUIS
Tout d’abord, il faut contextualiser la chose. Le robot fonctionne grâce à une carte Adeept directement connectée à une carte Raspberry-pi 4, la carte Raspberry se comportant comme un petit ordinateur, elle nous est très utile pour programmer le robot . La carte Adeept dispose de ses propres programmes au préalable pour nous permettre de contrôler le robot à distance… Voici un schéma de la carte Raspberry :
En tout cas, ces programmes nous ont pas aidés, ceux-ci étaient truffés d’erreurs du à des soucis d’incompatibilité. Mais pourquoi ne pas avoir choisi un Raspberry plus récent ? En effet, le Raspberry tourne sous un logiciel d’exploitation dérivé de Linux, est le seul OS compatible avec Adeept était Legacy. Cependant, il n’existait pas sur Raspberry 5, donc nous n’avions pas le choix.
C’est pas un bug, c’est une surprise !
En progressant on s’est rendu compte que l’incompatibilité causait de nombreux déréglages, notamment dans le PWM. Il s’agit ici d’électronique numérique : le robot fonctionne comme un système analogique, et non pas numérique (binaire). Les paramètres comme la puissance par exemple varient de façon non pas discrète mais continue, voici un graphe illustrant la différence :
Le principal souci était que le robot ne disposait pas de l’équipement le lui permettant. La carte Adeept dispose donc d’un composant PWM* et de son driver* (Pulse Width Modulation) et de son programme pour contrôler la puissance de ses composants, en l’occurence des servomoteurs. Or réglage de la fréquence était erroné. En effet, celui-ci était beaucoup trop élevé ce qui déréglait totalement le bon fonctionnement des ses servomoteurs ce qui a un impact sur la puissance fournie. A titre comparatif, c’est comme si on fournissait la puissance d’un double V12 à une petite voiturette, cela provoque littéralement un crash-out du Rover car les servomoteurs (qui sont littéralement les articulations du robot) devenaient littéralement folles, ce qui abimait ses composants. Pour remédier à cela, il fallait passer par le programme PWM et modifier les fréquences d’entrées qui étaient calibrées à 1000Hz.. C’était trop, beaucoup trop.. On est donc passé à 50Hz, et c’est bien mieux.
Driver 16 Servo12 Bits PWM I2C – PCA9685 : le composant à l’origine de tout ce raffut.
L’engrenage à coincé, il avait une dent contre moi !
Après ces réglages le robot pouvait enfin rouler, cependant on à rencontré un autre souci… C’est presque le dernier, promis ! Puisque tout allait bien jusque là d’un côté électronique et informatique, il fallait que ça pêche niveau mécanique. Cette fois-ci, c’était au niveau du moteur.
En effet, pour se déplacer le robot est monté comme tel : deux essieux, un relié au moteur et où les roues vont tourner et le second relié à un servomoteur où les roues vont s’orienter suivant la commande sélectionnée.
Essieu arrière relié au moteur DC* par une transmission d’engrenages coniques installés en perpendiculaire
Essieu avant relié au servomoteur A
Après avoir procédé à l’installation de tous les programmes indispensables au bon fonctionnement du robot, on a enfin pu accéder à l’interface de contrôle du robot à distance, et celui-ci arrivait à rouler ! C’était une prouesse, jusqu’à ce qu’on décide d’accélérer et là, c’est le drame.. Les roues de l’essieu arrière se coincent et glissent sur le sol, on a alors procédé à une vérification pour comprendre d’où venait le problème et au début cela ne paraissait pas évident. On pensait que les roues étaient mal vissées : c’était pas ça. On à donc procédé a un démontage-remontage complet pour les deux essieux pour mieux comprendre, et c’est une fois rendu à l’arbre de transmission qu’on a compris que une pièce était abîmée. En effet, un des deux engrenages coniques était défectueux, ce qui créait du jeu entre les deux engrenages. On a changé la pièce défectueuse et finalement, ça roule !
Finalités
Elle a eu des ratés, des pannes, des plans foireux.. Mais ça y est, elle a enfin pris la route de la gloire !
Précédemment, on vous a parlé du module incluant la fonctionnalité appelée “Line-Tracking”, ce module permet au véhicule de suivre une ligne en autonomie et qui ne faisait que désobéir sans cesse. Comme tout ce que j’ai pu mentionner auparavant, ce module dispose de son propre composant et de son propre driver sur la carte Arduino, et de son programme complet dans la carte Raspberry. Tout d’abord, le robot suivait sa propre ombre en pensant qu’il s’agissait d’une ligne ! On a du alors aménager le terrain pour que la ligne soit bien distinguable du sol (qui était bleu) afin qu’il ne la confonde plus avec son ombre. Puis enfin, on a inévitablement du passer par la modification de ce programme, qui faisait preuve d’incohérences à cause de conflits de compatibilité, puis après ces derniers réglages on a enfin réussi à faire rouler la bête de façon à ce qu’elle soit autonome !
En conclusion, de quoi est capable la voiture ?
Effectivement, on vous a parlé du module incluant la fonctionnalité appelée “Line-Tracking”, ce module contient tout plein d’autres fonctionnalités. Après 100h de travail acharné, voici les prouesses que peuvent accomplir notre Rover radio-commandé :
- Contrôle a distance : c’était la moindre des choses, c’est clair ! Mais au moins on y est arrivés. La voiture peut être pilotée à distance via une interface web accessible depuis un ordinateur, une tablette ou même un smartphone !
- Suivi de ligne : en utilisant ses capteurs infrarouges pour suivre une ligne tracée au sol
- Suivi de lumière : capable de détecter et de suivre une source lumineuse (ce qui interférait avec le Line-Tracking)
- Reconnaissance d’objets : en ayant intégré OpenCV (la bibliothèque utilisée via python), la voiture est capable d’identifier des objets spécifiques.
- Transmission vidéo en temps réel : via la caméra liée a la carte Raspberry, on peut en plus de faire de la reconnaissance d’objets les retransmettre en direct sur une interface.
- Eclairage RGB : On sait avoir la classe ! La voiture dispose de modules LED RGB (2x Adeept RGB, 4x WS2812 RBG) pour des effets lumineux personnalisables
- Evitement d’obstacle automatique : grâce à un capteurs d’ultrasons, la voiture détecte et évite les obstacles sur son chemin.
Pour finir, il est évident que notre petite voiturette ne posera jamais pied sur la lune, et si c’était le cas, elle ne résisterait pas une seconde.. Les températures extrêmes, les rayons UV, les particules solaires… l’électronique ne dispose pas de protections nécessaires, notre pauvre voiture finira irradiée, cuite ou explosée.
Cependant, elle dispose de nombreuses fonctionnalités impressionnantes, que nous ne pensions pas capable de mettre en place jusque là. Nous restons fiers du travail produit et malgré les obstacles rencontrés, l’équipe n’a pas renoncé alors on remercie notre tuteur M.Bassel Chokr de nous avoir aidé,accompagné et encouragé tout le long du projet pour y mener à bien son accomplissement.
Définitions :
RC Car : Voiture télécommandée, pilotée à distance par radio.
PWM (Pulse Width Modulation) : Technique pour contrôler la puissance envoyée à un moteur en modulant la largeur des impulsions électriques.
Servomoteur : Moteur contrôlable en position ou en angle, souvent utilisé pour diriger.
Driver : Circuit électronique qui contrôle un moteur (vitesse, direction).
Moteur DC : Moteur à courant continu, qui tourne lorsqu’il reçoit une tension électrique.
MERCI D’AVOIR LU





