Cannonball de voitures RC/FicheSuivi

De fablab
Aller à : navigation, rechercher

Encadrants: Vivien Quema, Didier Donsez

Sujet du Projet Cannonball de voitures RC

Présentation du projet

Ce projet à pour vocation de transformer une voiture radiocommandée (ici une Scorpion XXL VE de Kyosho) en une voiture autonome à l'aide d'une caméra et d'une tablette embarquées. La caméra prend des images qui sont traitées par la tablette, qui va envoyer des signaux à un microcontrôleur dirigeant la voiture.

Ce projet implémente 2 modes :

  • Un mode dit "lièvre" ou "rabbit" permettant à la voiture de suivre un marqueur à la trace.
  • Un mode "cannonball" permettant à la voiture de suivre un circuit constitué de portes

Nous utilisons pour cela une tablette Lenovo et un microcontrôleur Arduino.

Le code est disponible sur Github sous licence MIT.


Cahier des charges

Le projet à pour but de rendre une voiture RC autonome par suivi de marqueurs. Il s'appuie sur le travail déjà fourni par Benoit Peruche et Jules Legros. Les différentes étapes du développement sont :

  • Reprendre le code fourni
  • Etudier la faisabilité de passer d'un Arduino à un Pololu
  • Etudier la faisabilité de passer d'une tablette Windows à une tablette Android
  • Reconnaitre des marqueurs afin de pouvoir guider la voiture au milieu de ces marqueurs, et si possible faire en sorte que la voiture suive un marqueur.
  • Installer un système de log pour suivre l'état de la voiture à distance


Diagrame de Gantt prévisionel

Gantt prévisionel


Journal de bord

Pour des raisons de présentation, le journal de bord possède sa propre page.

GitHub

Le code est disponible en open source sous licence MIT sur GitHub.


Pistes explorées et détails techniques

Cette partie se veut utile en cas de reprise du projet. Il témoigne des recherches d'hors et déjà éxécutées par l'équipe.

Arduino

L'utilisation de l'Arduino est préférée par rapport au Pololu. En effet, le Pololu ne peut que controller des Servos moteurs par séquences. Il est impossible de lui envoyer des données via le port Serial pour lui faire éffectuer une action bien précise. Autre gros problème du Pololu : Il est impossible de mapper un signal d'urgence dessus.

Marqueurs

L'utilisation de QR code est à proscrire. En effet le QR code a pour vocation de propager un message en son sein. Or le but ici est de détecter un marqueur, et ensuite seulement son contenu. Un QR code est trop orienté sur son contenu et pas assez sur sa facilité de détection. La portée de détection des QR code avec notre caméra est seulement d'un ou deux mètres, ce qui est clairement insuffisant pour notre étude. Nous utilisons donc les marqueurs ArUco de 7x7 qui contiennent uniquement un nombre, mais qui sont plus faciles à détecter.

OpenCV

L'utilisation d'OpenCV pure est trop délicate pour le projet. En effet, nous avons besoin d'informations comme la distance et l'orientation d'un marqueur que ne fourni pas OpenCV. Il faut pour cela utilisé une librairie de rélaité augmentée capable de fournir de telles informations. Nous utilisons ici ArUco, surcouche à OpenCV.

Câblage

Actionner le servo de direction et le moteur est très couteux à l'Arduino. Un Arduino est alimenté en 5V par le câble USB, ce qui est insuffisant : le témoin d'alimentation de l'Arduino clignote, signe qu'il reboot sans cesse car il n'a pas assez d'énergie pour s'alimenter, de plus les servos ne réagissent pas comme ils devraient. Il est donc nécessaire de fournir une autre alimentation à l'Arduino. L'entrée VIN de l'Arduino accepte du 9V, il faut donc relier la batterie à cette entrée.

Autre point clé est l'utilisation du signal d'arrêt d'urgence. Toutes les masses doivent être reliées pour qu'il fonctionne, sinon le signal lu prend des valeurs abérantes.

Pour tout soucis de câblage, veuillez vous référer à la notice de câblage dans la documentation.

Socle de la caméra

La voiture nous a été fournie avec un socle en carbone muni de 4 ressorts en caoutchouc. Comme en témoigne cette prise de vue, le socle entraine trop de vibrations, néfastes à la capture temps réel. Il faut donc solidement attacher la caméra sur le toit pour éviter ce genre de désagréments.

Android

Il faut savoir qu'il n'est possible de lire une caméra externe depuis Android que s'il dispose de l'USB Host. Pour cela il faut qu'il soit compilé avec un flag très précis. Toute version d'Android supérieure à 3 dispose de ce flag.

Malheureusement, OpenCV Android est incapable de lire une caméra externe. Il ne peut lire que FRONT et BACK. Une issue a été ouverte sur le sujet.

L'utilisation de Debian sur la tablette en vue de compiler directement le cpp a nécessité de rooter la tablette. Puis l'instalation se fait via le shar prévu. Mais il est impossible d'utiliser les caméras Android une fois sur Debian avec un serveur X.

Servomoteurs

Le servo de direction de la première voiture a lâché. Il s'agissait d'un Kyosho KS-203-SERVO. Nous l'avons remplacé par un Futaba S3305, qui a ensuite subit le même sort. Le servo actuel est un servo de remplacement bien moins puissant qu'un servo de RC, il ne doit pas être utilisé à fortes vitesses.

Documentation

Manuels

Vous pouvez trouver le manuel ici au format PDF.

Poster

Vous pouvez trouver le poster ici au format PDF.

Flyer

Vous pouvez trouver ici le flyer au format PDF.

Video

Trailer :

Le mode lièvre :

Le mode circuit :

Galerie de Photos