autonomee 

Adrian Delmarre – Adrien Duffy – Ahmed Kachkach – Alexis Fasquel – Ianic Almeida – Karim Alaoui – Loric Brevet 

autonomee ?

         Robotique

                                     Électronique

Architecture matérielle

      
Odométrie                                      Embarqué

       Arduino                                    Raspberry Pi

                      Capteurs analogiques

                                       Développement logiciel

        Interfaces graphiques (Qt)
  

                                        Applications mobiles


         Programmation réseau (TCP)

                                     Intelligence artificielle

         Parsing                                              SVG/XML





Et même des maths !


  • Beaucoup de probabilités

  • Pas mal de géométrie

  • Un poil de traitement de signal


Mais encore... ?

But annoncé du projet fil-rouge: Réaliser une voiture télécommandée 'from scratch'

Use-case

(de l'utilisateur aux moteurs)

Un utilisateur (avec un ordinateur + joystick ou une tablette) manipule l'engin.

Quels outils?

  • Une carte programmable Arduino pour la partie électronique 'bas-niveau'

  • Un mini-ordinateur Raspberry Pi pour faire l'interface entre l'électronique et les clients.

  • Qt comme framework d'interface graphique.

    Langages

  • C/C++ pour le code embarqué.

  • Shell (bash) pour le scripting du Raspberry Pi

  • Python pour tout le reste (serveur, client, GUI...)

Pourquoi Python ?

  • Parce qu'on n'en fait pas à l'INSA ! ;-)

  • Langage dynamique : moins de contraintes, typage dynamique = développement plus rapide (en général)

  • Librairies (standards et externes) fournies et simples à utiliser

  • Itérations/comparaisons/parsing simplifiés à l'extrême.

    Exemple : trouver l'obstacle le plus proche (ray-casting)
    for obstacle in self.obstacles: inters = ray.intersections(obstacle)
    intersDist = min(intersect.distance(ray.origin) for intersect in inters) dist = min(dist, intersDist)

La bête


La bête - bis


Une dernière pour la route


Communication

Protocole de communication


Le client (ordinateur ou téléphone mobile) envoie une série de trames au serveur respectant le format suivant:
"OPCODE#OPERANDE_1#OPERANDE_2"Exemple :  "01#000221#000201"

Mini-ordinateur Raspberry Pi


Le Raspberry Pi reçoit ces trames, vérifie le respect du protocole de communication, puis les envoie à l'Arduino par communication série (Port USB).

Carte Arduino


L'Arduino analyse la trame et exécute l'action demandée (activer les moteurs, prendre des mesures, etc.)

Elle renvoie aussi périodiquement l'état courant de la voiture (orientation, position, données de capteurs, ...) 

Application mobile : Tablette


Application mobile : Téléphone

Application mobile


  • Responsive design : Interface fluide, s'adaptant au terminal utilisé
  • Interface différente pour les tablettes, plus complete

Limites

  • Malheureusement, Android interdit les connexions 'Ad-hoc' par défaut: Problématique car le Raspberry Pi crée ce type de réseau.

Démonstration

ALLER PLUS LOIN

Une voiture qui s'auto-localise à partir d'une connaissance partielle et bruitée de son environnement

Format des cartes (SVG)


  On crée une map (approximative, mais à la bonne échelle) de l'environnement de la voiture avec n'importe quel logiciel de dessin vectoriel (Inkscape, Illustrator, ...)

  Puis on ouvre le fichier .svg avec notre application qui va transformer ça...
  ....    <rect
style="fill:#00caff;fillopacity:1;stroke:#000000;" id="rect3053" width="254" height="102" x="436.26703" y="508.95331" /> ....

Format des cartes

En ça :

Génération de parcours

  • Basée sur l'algorithme A*
  • Trajet simplifié puis 'waypoints' extraits et envoyés à la voiture

Filtre à particules


Concept: Associer un certain nombre de positions potentielles de la voiture (particules) à une probabilité de présence. 

    Filtre à particules


    3 étapes exécutées séquentiellement:

    1. Sense: Comparaison de mesures réelles et des mesures simulées par chaque particule. Calcul de la probabilité de présence de la voiture en cette position

    2. Move: Déplacement (bruité) des particules, pour simuler un déplacement réel de la voiture.

    3. Resampling: Redistribution des particules selon leur probabilité.

    Filtre à particules

    Avantages

    • Prend en compte le bruit des mesures
    • Facilement adaptable (un ou plusieurs capteurs, ...)
    • Deux modes possible: Simple ou en Chaîne de Markov
    • Résultats satisfaisants même pour des résultats relativement imprécis

    Inconvénients

    • Taux de faux positif trop élevé pour des utilisations critiques
    • Inadapté pour des environnements à haute symétrie (surtout en mode simple)

    De la théorie à la pratique

     

    • Odométrie

    Interruptions prooquées par des capteurs infrarouge fixés sur les roues (afin de suivre le déplacement de la voiture)

    • Capteur ultrason

    Précision correcte, mais mesures faussées dans certaines situations (ghost readings)

    Malheureusement...


    • Odométrie défaillante: Capteur infra-rouge? Problème d'alimentation? 
    • Mauvais choix au niveau des moteurs: Courant continu VS Pas à pas ou Servomoteur continu
    • Mesures parasitées à cause de l'alimentation communes entre capteur et moteurs
    • Plus généralement: manque de de connaissances avancées en électronique bas-niveau (et de temps !)

    Démonstration

    Merci pour votre attention !


    Le code source et quelques vidéos sont disponibles sur:
    https://github.com/halflings/autonomee

    Autonomee

    By Ahmed Kachkach