Bonjour camarades!
Au cours du week-end, le hackasborkaton a eu lieu - une course sur des modèles de voitures autonomes basées sur un kit de voiture à âne avec l'aide de X5 , FLESS et la communauté des passionnés de conduite autonome .
La tâche était la suivante: il fallait d'abord assembler une voiture à partir de pièces détachées, puis la former pour passer la piste. Le vainqueur a été déterminé par les 3 tours les plus rapides. Pour avoir frappé un cône - disqualification.
Bien qu'une telle tâche pour l'apprentissage automatique ne soit pas nouvelle, mais des difficultés peuvent attendre jusqu'au bout: de l'incapacité à faire fonctionner le wifi normalement à la réticence du modèle entraîné à piloter le matériel le long de la piste. Et tout cela dans un délai serré!
Lorsque nous allions à ce concours, il était immédiatement clair que ce serait très amusant et très difficile, car nous n'avions que 5 heures, y compris une pause déjeuner, pour assembler une machine à écrire, enregistrer un jeu de données et former un modèle.
Machine à âne
Donkeycar se compose d'un boîtier sur lequel est fixée une caméra avec un objectif grand angle (170 degrés), un Raspberry Pi3 +, une carte de commande servo, un logiciel et en gros tout. Mais comme il s'est avéré plus tard, l'assemblage même d'un appareil aussi simple dans un temps limité et des problèmes d'équipement aléatoires peuvent prendre beaucoup de temps et vous n'aurez pas le temps.
Assemblée
Le concours a commencé avec le fait qu'il fallait d'abord démonter la machine et la remonter. Il faut rendre hommage aux organisateurs, on ne nous a pas proposé de collecter un tas de pièces incompréhensible à partir de zéro, mais on nous a donné la possibilité de comprendre l'appareil à l'aide d'un exemple prêt à l'emploi. Nous avons gagné beaucoup de temps en prenant des photos de toutes les connexions et en remettant la machine en 10 minutes.
Connexion à une machine à écrire et vérification du travail
Après avoir assemblé la voiture, il y a eu une pause, car nous devions connecter la voiture au Wi-Fi et commencer à calibrer le châssis. En fait, travailler avec le Wi-Fi à l'avenir sera l'un des plus gros problèmes lorsque vous travaillez avec Raspberry, apparemment, vous deviez prendre votre Wi-Fi avec une antenne.
Nous avons décidé de ne pas nous ennuyer et de nous connecter au câble Ethernet, qui, avec le reste des déchets, traîne toujours dans mon sac à dos. Pour une raison quelconque, la machine à écrire n'avait pas de serveur DHCP, ou elle ne fonctionnait pas, ou elle n'aurait pas dû être là du tout, et nous avons réalisé que WireShark obtiendrait facilement l'ip source par diffusion lorsque le câble était connecté au Raspberry. Et c'est arrivé, mais après nous être connectés à la machine, nous avons passé beaucoup de temps à essayer de faire fonctionner le wifi. En fin de compte, tous les participants ont été rejetés d'un fichier spécial où se trouvait la configuration.
Calibrage du châssis et connexion du joystick
Il nous a fallu environ 35 minutes pour connecter le joystick, pendant que nous lisions les quais et scannions le bluetooth, essayant de coupler la machine à écrire et le joystick. Il s'est avéré que le problème était qu'il y avait trop de joysticks dans la pièce et qu'ils étaient appariés au hasard avec des voitures d'autres courses - c'était vraiment amusant de constater que vous contrôliez le châssis d'une voiture au hasard =)
L'étape suivante consistait à calibrer la direction et l'accélérateur, c'est-à-dire PWM tournez et gaz.
C'était l'un des paramètres les plus importants, il était nécessaire de mettre la valeur en corrélation avec la vitesse de la voiture et le modèle fait face au contrôle.
Sur notre intuition, nous avons essayé d'accélérer et de tourner pour que la voiture aille assez vite, mais en même temps pourrait être contrôlée.
Il ne restait que 2 heures environ jusqu'à la fin de l'épreuve, compte tenu des performances des équipes, et il fallait accélérer d'urgence. Nous avons couru pour noter les données avec l'idée qu'il fallait créer les conditions les plus variées dans lesquelles la machine resterait. Nous avons supposé qu'au début de la compétition, la lumière sera probablement réorganisée, des objets étrangers apparaîtront à côté de la piste, etc.
Nous avons enregistré environ 18000 images avec les valeurs de gaz et de virage, en essayant de faire entrer beaucoup de monde dans le cadre, nous avons couru autour de la piste, avons sauté dessus, mis des chaises, construit des ponts, placé les lumières au hasard, sommes allés dans la direction opposée.
Nous avons également ajouté des altumentations comme augmentations et avons essayé d'en ajouter autant que possible!
Dans cette fourcheJ'ai malicieusement codé en dur des augmentations lourdes avec une enveloppe de pil et vice versa - cela nécessitait également de reconstruire l'environnement de la machine à écrire, ce qui affectait l'heure.
Au moment où le premier modèle a été formé, nous avions déjà le code pour le second, les gars ont apporté de nouvelles données à partir d'une piste voisine et ont couru pour vérifier comment le premier modèle se déroulerait.
Le premier modèle a fait 3 tours avec des erreurs et a décollé 4 tours. Après cela, nous avons perdu encore 20 minutes, car nous avons oublié d'insérer une carte SD dans la machine.
Le modèle final a été formé sur 19 000 images avec une augmentation personnalisée et un nettoyage des données.
Voici à quoi ressemble le réseau lui-même:
on peut voir qu'il y a un champ pour une inversion, vous pouvez au moins couper un batchnorm pour un début, mais nous avons décidé de le toucher au minimum, pour qu'il n'y ait pas de foutre.
En outre, les graphiques des premier et deuxième modèles avec la meilleure perte MSE de 0,093 et 0,086, respectivement.
Le deuxième graphique semble mieux!
Il ressort clairement de la vidéo que nous avons mal calibré la direction et mal nettoyé le jeu de données, mais cela nous suffisait.
Vidéo de GoPro, que nous avons enregistrée après le lancement principal:
Le final
Nous avons été les premiers à prendre le départ de la course et sommes allés sur la piste, mais là, nous étions dans un échec, le Wi-Fi tombait constamment, nous étions presque écartés de la compétition. Et maintenant, alors que le départ était presque donné, la machine a soudainement commencé à reculer. Apparemment, j'ai confondu quelque chose lors du calibrage de l'accélérateur.
Mais rien, aux rires de tout le public, elle est allée de l'avant et a gardé les cercles dignes 8 ou 9 sur la piste, esquivant fortement, mais nous a quand même apporté une victoire bien méritée!
J'essaye de ne pas regarder dans le cadre.
Remerciements
Grâce à la communauté ods.ai , il est impossible de se développer sans elle! Un grand merci à mes coéquipiers: Valea Biryukova, Egor Urvanov (Urvanov), Roma Derbanosov (Yandex). Nous attendons avec impatience une critique vidéo de Viktor Rogulenko (FLESS).
PS: Un merci spécial à Valya Biryukova, qui, malheureusement, avait une température de 38,5 la veille de la compétition, mais a beaucoup aidé avec le lien .
Aurorai, LLC