IMA3/IMA4 2018/2020 P9 : Différence entre versions
(→Equipe 1) |
(→Semaine 11) |
||
Ligne 327 : | Ligne 327 : | ||
===Semaine 11=== | ===Semaine 11=== | ||
+ | ====Equipe 1==== | ||
+ | Noyau linux non chargé | ||
+ | # cyclictest -n -p 99 -i 1000 | ||
+ | policy: fifo: loadavg: 0.07 0.05 0.02 1/240 3148 | ||
+ | T: 0 ( 3148) P:99 I:1000 C: 26416 Min: 5 Act: 5 Avg: 6 Max: 10 | ||
+ | Temps de latence maximum mesuré : 10 µs | ||
+ | |||
+ | Noyau linux chargé | ||
+ | # cyclictest -n -p 99 -i 1000 | ||
+ | policy: fifo: loadavg: 66.78 19.73 6.82 52/344 3312 | ||
+ | |||
+ | T: 0 ( 3194) P:99 I:1000 C: 71956 Min: 2 Act: 3 Avg: 3 Max: 50 | ||
+ | Temps de latence maximum mesuré : 50 µs | ||
====Equipe 2==== | ====Equipe 2==== | ||
Nous avons résolu le problème, il suffisait de configurer le proxy de l'ordinateur. | Nous avons résolu le problème, il suffisait de configurer le proxy de l'ordinateur. |
Version du 22 mai 2019 à 01:13
Sommaire
- 1 Présentation générale
- 2 Analyse du projet
- 3 Préparation du projet
- 4 Réalisation du Projet
Présentation générale
Description
Le projet consiste à réaliser une voiture autonome dans le but de participer au concours Ironcar dès 2019.
Ce dernier est une course de voitures (modèle réduit) intelligentes.
Afin d'y prendre part il nous faudra concevoir un véhicule pouvant suivre un circuit sans être télécommandé et pouvant s'adapter au tracé ainsi qu'à ses obstacles grâce à la Deep Learning Technologie.
Pour arriver à cette fin nous nous appuierons sur les fiches de conceptions des anciens concurrents disponibles ici.
Objectifs
Pour participer à ce concours, on devra notamment :
- mettre en place un réseau de capteurs et concevoir un algorithme qui les exploite pour pouvoir suivre la ligne discontinue du tracé;
- mettre en oeuvre un Linux temps réel pour contrôler la voiture avec une phase de comparaison par rapport à un Linux classique ;
- mettre en oeuvre d'autres algorithmes pour l'apprentissage automatique, déjà disponibles pour contrôler la voiture ;
- gérer les servo-moteurs contrôlant la direction et la vitesse de la voiture (on utilisera un shield et un Arduino), et implémenter des algorithme de contrôle de l'accélération et du freinage.
Analyse du projet
Positionnement par rapport à l'existant
Analyse des concurrents
Patate42
Le grand gagnant de la compétition édition 2018, réalisé par des élèves de l’école 42 paris, leur prototype a réussi à boucler les 3 tours en un temps record dont le meilleur tour a duré 1'17mn, ces résultats ont leurs permis de gagner le premier titre dans ce championnat national.
Ils ont choisi la Raspberry au lieu d'autres cartes électroniques parce qu’elle présente les avantages d’être facilement programmé, sa puissance et son prix très bon marché [1][2][3]
AxioNaut
AxioNaut sont des étudiants qui viennent du groupe Axionable,qui est une principale entreprise de conseil de la Science de données basée à Paris, France, ils ont remportés la seconde manche de l’Iron Car France. Il ont utilisés le modèle de Raspberrry pi 3 B+ équipé d'une camera qui assure l'autonomie dans le positionnement de la voiture et contrôle la vitesse durant le parcourt. [4][5]
C'est un véhicule autonome qui est équipé de capteurs numériques (caméras, radars, sonars, lidars,etc) et concernant le stockage des informations, ça s'enregistre sous des microprocesseur et via des logiciels spécifique. Pour les avantages , les statistiques relèvent que 90% des accidents de la route sont liés à une erreur humaine. La génération des voitures autonomes comme la navette qui permettre de réduire les accidents a travers le meilleur temps de réaction det d'une plus grande fiabilité des systèmes informatisés. [6][7]
Scénario d'usage du produit ou du concept envisagé
Phase d’entraînement :
On disposera d'une piste pour pouvoir effectuer la phase d'apprentissage de l'IA. Lors de la journée compétition que l'on organisera, les participants commanderont la voiture avec la manette type xbox et tenteront de faire des tours de piste le plus rapidement possible.
Pendant ce temps, la caméra de la voiture sera active et enregistrera les images du circuit, et les commandes entrées correspondantes par les utilisateurs seront elles aussi stockées. On pourra par la suite pondérer les résultats, par exemple une sortie de piste implique une mauvaise commande, et un tour rapide implique un bonne commande.
Pour plus de diversité, on entraînera la voiture à partir d'images générées aléatoirement qui correspondent à une portion de circuit Ironcar.
Phase de course autonome
On déposera la voiture sur la ligne de départ, et on attend le lancement de la course. Après celui-ci, la voiture démarre et essaie de suivre le tracé le plus rapidement possible. Dans le cas où elle sortirait de la piste, c'est à nous de la repositionner correctement.
La question difficile
Comment entrainer notre IA ?
Réponse à la question difficile
- Nous pouvons organiser des courses participatives à Polytech pour récupérer des données de trajectoire qui permettront à notre voiture de connaitre davantage de situations pour lui permettre de réagir dans des conditions plus variées. Il faudrait tracer un circuit sur le parking par exemple, puis organiser une compétitions entre étudiants et personnels pour récupérer le plus de données possibles. On peut pondérer les résultats en "récompensant" les temps plus courts dans le programmation de l'IA.
- Nous pouvons aussi mettre en place un environnement virtuel pour simuler un tracé et laisser le réseau de neurones s'entrainer d'elle même au sein de cette simulation.
Bibliographie et webographie
[1]: https://www.42.fr/iron-car-2018-etudiants-champions/
[3]: https://github.com/EParisot/Patate
[4]: https://github.com/Axionable/Axionaut
[5]: https://www.axionable.com/axionaut-termine-1er-de-la-deuxieme-course-iron-car/
[7]: https://www.univ-lille.fr/nc/actualites/detail-actualite/?tx_news_pi1%5Bnews%5D=1423
[*]: https://github.com/vinzeebreak/road_simulator
[*]: https://github.com/vinzeebreak/ironcar
Préparation du projet
Cahier des charges du groupe
Cahier des charges pour la première année :
Reprendre le code source d'un ancien concurrent et l'implémenter dans notre châssis.
Avoir un modèle fonctionnel pour participer au concours de Septembre avec cette voiture.
Cahier des charges pour le seconde année :
Optimisation de la voiture (code, commandes, ...) afin qu'elle soit plus performante.
La voiture fera 3 tours de pistes sans sortie lors de la compétition.
La voiture sera autonome sur au moins un circuit
Ramenez la coupe à la maison
Détecter une sortie de piste sans avoir recours à des capteurs autres que la caméra.
La voiture finit la course le plus rapidement possible
Reconnaître des virages et des lignes droites plus ou moins grandes et adapter sa trajectoire et sa vitesse en conséquence.
Pouvoir faire exécuter le code de réseau de neurones par l'ordinateur suffisamment rapidement pour pouvoir réagir le plus rapidement possible (proche du temps réel).
Cahier des charges des équipes
Equipe 1
- Mettre en place un Linux RT dans une raspberry PI
Equipe 2
- Récupérer le code des équipes précédentes et l'implémenter sur un PC puis sur une autre raspberry
- Installer toutes les dépendances pour chaque partie du code.
Equipe 3
- Commander les moteurs en utilisant un Arduino
- Envoyer les ordres à l'Arduino depuis un Raspberry pi
- Asservir les moteurs du chassis
- Créer une base en plexiglas pour tout le système de commande pour le rendre amovible
Choix techniques : matériel et logiciel
Equipe 1
- Utiliser un mini-ordinateur à savoir Raspberry Pi 3
- Installation de Raspbian sur carte micro SD avec Etcher
Equipe 2
- On a utilisé le logiciel python pour tester le programme des vainqueurs de l'année précédente, qui comprend le réseau neuronal et l'entrainement de la voiture à partir d'images capturées, ou même générées par le programme d'entrainement.
- Nous avons dû pour cela installer toutes les librairies associées pour permettre au code de fonctionner correctement.
Equipe 3
- Installation d'un linux lite sur un raspberry pi
- Programmation de l'Arduino pour commande des moteurs
- Communication série entre raspberry pi (utilisation de Python) et l'Arduino
Liste des tâches à effectuer
- Asservissement de la voiture
- Commande de la voiture (moteur, vitesse, virages) par raspberry
- Possibilité de commander la voiture manuellement ou par ordinateur.
- Mise en place d'un Linux temps réel sur Raspberry
- Implémentation de l'IA sur le Linux temps réel de la voiture.
- Liaisons entre les différents organes de la voiture
- Agencement de la voiture
Equipe 1 : Linux RT
Mise en place d'un Linux temps réel sur Raspberry
Equipe 2 : Réseau neuronal
- Récupération du code des anciens vainqueurs
- Adaptation à notre système
- Amélioration / Entraînement du réseau neuronal
Equipe 3
- Installer un linux lite sur un raspberry pi 3
- Etablir une connection série entre une Arduino et une raspberry pi
- Commander les moteurs de la voiture avec les ordres envoyés par le raspberry pi grâce à l'Arduino.
Calendrier prévisionnel
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.
Equipe 1
Equipe 2
Equipe 3
Réalisation du Projet
Projet S6
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.
Semaine 4
- Réponse à la question difficile
- Prise d'informations sur le projet en général,
- Analyse des projets des IMA4 et IMA5
Semaine 5
Semaine 6
Equipe 1
Installation d'une distribution linux intitulé RealtimePi sur Raspbery qui est déjà patché avec un noyau temps réel.
Equipe 2
Pendant la première séance en équipe, nous avons recherché des ressources fiables et compréhensibles. Nous avons exploré le Github des gagnants des années précédentes, et avons retenu Patate 42. Leur code nous semblait plus fiable au départ, puisqu'ils ont réalisé le meilleur temps sur le parcourt, mais quand nous avons voulu le tester, nous n'avons pas compris les instructions à réaliser avant l'implémentation.
Nous nous sommes tourné alors vers Axionaute, qui ont pris soin de détailler les étapes nécessaires pour faire fonctionner leur code.
Equipe 3
Nous avons commencé par récupérer le matériel nécessaire à la mise en place du raspberry pi (raspberry pi 3, alimentation, cable Ethernet, carte SD + adaptateur). Puis nous avons recherché quel system d'exploitation nous pourrions utiliser. Nous somme resté sur une raspbian lite assez classique et simple d'utilisation. Nous avons enfin choisit de programmer le raspberry pi en python car il existe de nombreuses libraries dans ce langage et parce qu'il est simple d'utilisation.
Semaine 7
Equipe 2
Nous avons cloné le dépôt Git d'Axionaute sur une machine Linux et essayé de le faire fonctionner. Nous nous sommes très vite aperçus que l'on avait besoin de python dans un premier temps. Nous avons dû l'installer à l'aide de différentes commandes. A chaque fois que nous essayions de lancer le programme d’entrainement, il nous manquait une librairie python ou un logiciel. Cette séance a été consacrée entièrement à chercher quelles librairies manquaient, et comment les installer.
Premier essai
- su
- apt-get install python3-pip
- apt-get update
- apt-get install python-picamera python3-picamera
- git clone https://github.com/adafruit/Adafruit_Python_PCA9685
- apt-get install python-pip
- pip install picamera
- git clone https://github.com/EParisot/Patate
Equipe 3
Nous avons commencé à suivre les instructions du wiki [1] pour installer correctement le système d'exploitation du raspberry pi. Nous avons réussi à l'installer et à communiquer par liaison série avec lui. Cependant à cause d'une erreur de manipulation nous avons supprimé le système de boot il a donc fallu recommencer l'installation.
Semaine 8
Equipe 1
Implémentation du Rt-tests qui fournit un ensemble de programmes qui testent et mesurent divers composants de comportement en temps réel du noyau, tels que la latence d’horloge, la latence de signal et le fonctionnement des mutex suivant l’héritage de priorité. De plus, il fournit hackbench, un programme pour générer du travail pour l’ordonnanceur.
Equipe 2
nous avons passé presque toute la séance à compléter l’environnent de travail pour le bon fonctionnent du programme d'entrainement. Après avoir fini d'installer toutes les libraires manquantes et lancé le script, nous avons essayé d'entrainer le système, mais nous n'avons pas eu le temps de le voir se terminer.
Equipe 3
L'Arduino et le raspberry pi communicant par port série, il fallait communiquer avec le raspberry pi par ssh. Nous avons mis en place cette communication à l'adresse 172.26.145.69. Le raspberry pi doit etre branché à l'Eternet du pc souhaitant se connecter par ssh. Il peut être nécessaire d'entrer différentes commadnes pour que cela fonctionne :
- export http_proxy=http://proxy.polytech-lille.fr:3128 | sur le raspberry pi
- iptables -F & iptables -tnat -F & iptables -PFORWARD ACCEPT | sur le pc
Pour que le raspberry ait une connection à internet
Semaine 9
Equipe 1
A titre indicatif, on donnera les mesures de temps de latence dans le cas où le processeur est non chargé et dans le cas où le processeur est chargé.
L'utilitaire cyclictest On pourra l'installer comme suit :
$ cd $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git $ cd rt-tests $ make $ su $ make install
On utilisera cyclictest pour générer un processus Temps Réel périodique dans l'espace utilisateur de plus forte priorité 99 de période 1000 µs par la commande :
$ su $ cyclictest -n -p 99 -i 1000
Equipe 2
Nous avons condensé la liste des instructions à entrer pour faire fonctionner le programme. Ces instructions sont les suivantes :
Créer un nouveau répoertoire
$ mkdir ~/Ironcar $ cd ~/Ironcar
cloner le repo
$ git clone https://github.com/Axionable/Axionaut.git
Telecharger la Dataset à partir de https://s3.amazonaws.com/axionautdataset/Datasets.zip
$ cp -r ~/Downloads/Datasets.zip ~/Ironcar/Axionaut/ $ unzip Dataset
installer pip
$ apt-get install python-pip
installer les requirements
$ pip install -r requirements.txt
installer tensorflow
$ pip install --upgrade tensorflow
Lancer l'entrainement
$ python train.py
Le programme d'entrainement se lance sans prolèmes, mais prend beaucoup de temps.
Equipe 3
- Installation du paquet python3-serial pour que le raspberry pi puisse communiquer sur le port série
- Recherche sur le fonctionnement de la communication série [2] [3]
- Recherche sur la voiture pour connaitre quels sont les fils de commande
- Début de la réalisation du programme Arduino de commande des moteurs
Semaine 10
Equipe 1
Le test du noyau intégrant le patch RT démontre un comportement « temps réel » car la variation du temps de réponse est inférieure à 90 µs, bien moindre que dans le cas d’un noyau standard, même si les résultats ne sont pas extraordinaires, certainement à cause de la qualité (moyenne) du noyau de la RPI.
On utilisera cyclictest pour générer un processus Temps Réel périodique dans l'espace utilisateur de plus forte priorité 99 de période 1000 µs par la commande :
$ su $ cyclictest -n -p 99 -i 1000
Equipe 2
Pour vérifier que nous avons correctement installé toutes les librairies, nous avons décidé de retester sur une autre machie les instructions que nous avons entré lors du premier lancement du programme. Cependant, on a eu plusieurs erreurs. En effet, certains packages ne s'installeint pas correctement et cela nous a retardé. Nous avons cherché à quoi ces erreurs étaient dûes.
Equipe 3
Nous avons terminé la communication entre le raspberry pi et l'arduino ce qui nous a permis de contrôler la direction des roues de la voiture. Nous avons ensuite essayé de controler le second moteur de la voiture à l'aide de l'arduino sans succés. Le calibrage de l'ESC (contröleur moteur) est à continuer en poursuivant l'étude de la documentation.
Semaine 11
Equipe 1
Noyau linux non chargé
# cyclictest -n -p 99 -i 1000 policy: fifo: loadavg: 0.07 0.05 0.02 1/240 3148
T: 0 ( 3148) P:99 I:1000 C: 26416 Min: 5 Act: 5 Avg: 6 Max: 10
Temps de latence maximum mesuré : 10 µs
Noyau linux chargé
# cyclictest -n -p 99 -i 1000 policy: fifo: loadavg: 66.78 19.73 6.82 52/344 3312 T: 0 ( 3194) P:99 I:1000 C: 71956 Min: 2 Act: 3 Avg: 3 Max: 50
Temps de latence maximum mesuré : 50 µs
Equipe 2
Nous avons résolu le problème, il suffisait de configurer le proxy de l'ordinateur.
Configurer le proxy
$ export https_proxy=https://"proxy.polytech-lille.fr":"3128" $ export http_proxy=http://"proxy.polytech-lille.fr":"3128"
Le programme se lance sans problèmes sur nimporte quelle machine apres avoir entré toutes les instructions nécessaires.