Petite Voiture Autonome

Avec une Arduino, Raspberry Pi et une Pi Camera

a marqué ce sujet comme résolu.

Bonjour,

Pour une course de robots autonomes à Toulouse (Toulouse Robot Race), un ami et moi avons transformé une petite voiture télécommandée en voiture autonome.

Nous sommes partis d’une petite voiture télécommandée et avons remplacé l’électronique existante par une Raspberry Pi et une Arduino. Afin de la rendre autonome, nous avons également ajouté une caméra et imprimé les pièces nécessaires en 3D.

Pour le traitement d’image, nous avons exploré deux approches: une basée sur la couleur, une autre utilisant un petit réseau de neurones (suffisamment léger pour tourner à 60FPS). L’algorithme de contrôle a d’abord été testé dans un environnement de simulation créé avec Blender avant d’être déployé sur le robot.

Le détail de notre approche est disponible dans cet article (en anglais): https://medium.com/@araffin/autonomous-racing-robot-with-an-arduino-a-raspberry-pi-and-a-pi-camera-3e72819e1e63

Le résultat en vidéo: https://www.youtube.com/watch?v=xhI71ZdSh6k

Nous rendons également public les pièces 3D, le code source ainsi que les données utilisées pour l’apprentissage: https://github.com/sergionr2/RacingRobot

Le but de ce projet est aussi de donner les clés aux personnes qui souhaiteraient rendre autonome une petite voiture (nous avons essayé de documenter un maximum notre méthode).

N’hésitez pas à poser vos questions si vous souhaitez en savoir plus ;)

PS: Les remarques constructives sont aussi les bienvenues =)

Salut !

La vidéo en jette :waw: On voit rapidement qu’il y a beaucoup de travail derrière.

Juste une petite question : comment se fait-il que, alors que la voiture semble très bien prédire la ligne droite à suivre, qu’elle oscille comme pas possible ? (je ne parle pas des virages). On a l’impression que la voiture corrige très/trop fortement sa trajectoire lorsqu’elle dérive…

Quand est-il sinon du résultat de la voiture à la compétition ?!

La vidéo en jette :waw: On voit rapidement qu’il y a beaucoup de travail derrière.

effectivement =), ça nous a demandé plusieurs week-ends de boulot

Juste une petite question : comment se fait-il que, alors que la voiture semble très bien >prédire la ligne droite à suivre, qu’elle oscille comme pas possible ? (je ne parle pas des >virages). On a l’impression que la voiture corrige très/trop fortement sa trajectoire >lorsqu’elle dérive…

Bien observé, il y a deux raisons à cela:

  1. La vidéo de la caméra embarquée correspond à un essai où l’apprentissage sur les images avec du soleil n’avait pas été fait, de plus les paramètres du contrôleur n’était pas encore bien ajustés (d’où les oscillations par rapport à la détection qui semble bonne)

  2. On avait un problème mécanique au niveau de la direction: sans correction, la voiture dévie "naturellement" vers la gauche (on a corrigé en partie le problème de manière logiciel mais ce n’était pas suffisant)

Quand est-il sinon du résultat de la voiture à la compétition ?!

Et bien, nous avons fini… hors classement ^^"

La voiture marchait bien pendant les essais mais lors des chronos nous avons eu plusieurs problèmes:

  • la voiture est allé trop vite au premier essai
  • la voiture ne s’est pas arrêtée de manière automatique à l’arrivée (nous n’avons pas eu le temps de programmer la détection de la ligne d’arrivée, notre premier objectif était de faire des tours de piste)
  • au dernier essai, nous avions mis une minuterie pour s’arrêter au bout d’un certain temps mais il commençait à se faire tard et la petite voiture s’est prise le soleil en pleine caméra dans le dernier virage… :/

Donc au final, nous avions un temps honorable (environ 1"10 pour les 110m) mais comme la voiture ne s’est pas arrêtée, il n’a pas été retenu.

Vous avez pensé à équiper votre caméra d’un pare soleil ?

A-312

Après coup, une casquette ou des lunettes de soleil auraient pu aider ^^ En fait, le problème ne s’est posé qu’à la fin de la compétition, donc il était déjà trop tard.

Chouette votre projet. J’irai jeter un coup d’oeil à votre github car ça m’intéresse ;)

=)

Ça me fait penser au concours NXP Cup, concours au quel participe une école d’inge de ma région. https://youtu.be/gFlw8ZsKSeU

WinXaito

Je connaissais pas, je trouve l’idée plutôt pas mal que toutes les équipes partent avec la même voiture. Par contre, je ne sais pas si c’est facile à programmer. (et la grosse différence avec la compétition de Toulouse est que tout se passe en intérieur (pas de problème d’éclairage))

Je parlais de ce genre de chose, n’est-ce-pas ? Sachant que la caméra n’a pas besoin de filmer le haut, vous pouvez prévoir un angle/cache pour cacher une luminosité extrême.

A-312

C’est vrai que ce serait une bonne amélioration, par contre, il faudrait le faire sur-mesure pour la caméra (et vérifier que le champ de vision ne soit pas réduit).

Mise à jour concernant le projet:

  • le traitement d’image a été complètement ré-écrit en c++ avec des binding python, l’algo tourne à 110 Hz maintenant =) (au final, notre limite maintenant est celle de la caméra qui a une fréquence max de 90 FPS)
  • nous avons publié un article (ainsi que des implémentations dans différents langages (c++, arduino, python, rust)) sur la communication entre arduino et raspberry pi (il y a aussi un sujet dédié sur le forum: https://zestedesavoir.com/forums/sujet/10617/communication-ordinateur-arduino-simple-et-robuste/)

Dans les pistes d’améliorations, je travaille sur prédire la ligne directement (avec un nouvel outil pour annoter les images: https://github.com/araffin/graph-annotation-tool) avec un modèle plus complexe (CNN), mais aussi sur comment intégrer le temps dans la prédiction (et ne plus faire des prédictions indépendantes). L’idée serait peut-être d’utiliser un filtre de Kalman.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte