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
Électronique
Électronique
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
Applications mobiles
Et même des maths !
- Beaucoup de probabilités
- Pas mal de géométrie
- Un poil de traitement de signal
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:
-
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
-
Move: Déplacement (bruité) des particules, pour simuler un déplacement réel de la voiture.
- 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 !
Autonomee
By Ahmed Kachkach
Autonomee
- 3,240