No hay tiempo para explicar, haz piloto automático

imagen



¡Hola camaradas!



Durante el fin de semana, se llevó a cabo el hackasborkaton, una carrera en modelos de autos sin conductor basada en un kit de burro con la asistencia de X5 , FLESS y la comunidad de entusiastas de los autos sin conductor .



La tarea era la siguiente: primero era necesario montar un coche a partir de piezas de repuesto y luego entrenarlo para que pasara la vía. El ganador fue determinado por las 3 vueltas más rápidas. Por golpear un cono - descalificación.



Aunque tal tarea para el aprendizaje automático no es nueva, las dificultades pueden aguardar hasta el final: desde la incapacidad de hacer que el wifi funcione normalmente hasta la falta de voluntad del modelo entrenado para pilotar el hardware a lo largo de la pista. ¡Y todo esto en un marco de tiempo ajustado!



Cuando íbamos a esta competencia, inmediatamente quedó claro que sería muy divertido y muy difícil, porque solo nos dieron 5 horas, incluida una pausa para el almuerzo, para ensamblar una máquina de escribir, registrar un conjunto de datos y entrenar un modelo.



Máquina de burro



Donkeycar consiste en un estuche en el que se coloca una cámara con lente gran angular (170 grados), una Raspberry Pi3 +, una placa de servocontrol, software y básicamente todo. Pero como resultó más tarde, el ensamblaje de incluso un dispositivo tan simple en un tiempo limitado y fallas en el equipo al azar puede llevar mucho tiempo, y no tendrá tiempo.



imagen



Montaje



La competencia comenzó con el hecho de que primero era necesario desmontar la máquina y volver a montarla. Debemos rendir homenaje a los organizadores, no se nos ofreció recolectar un montón incomprensible de partes desde cero, sino que se nos dio la oportunidad de comprender el dispositivo utilizando un ejemplo listo para usar. Ahorramos mucho tiempo tomando fotografías de todas las conexiones y volvimos a poner la máquina en 10 minutos.



imagen



imagen



imagen



imagen



Conectarse a una máquina de escribir y comprobar el trabajo



Después de que armamos el auto, hubo una pausa, porque tuvimos que conectar el auto al wifi y comenzar a calibrar el chasis. Al final resultó que, trabajar con Wi-Fi en el futuro será uno de los mayores problemas al trabajar con Raspberry, al parecer, tuvo que llevar su Wi-Fi con una antena.



Decidimos no aburrirnos y conectarnos al cable Ethernet, que, junto con el resto de la basura, siempre está tirado en mi mochila. Por alguna razón, la máquina de escribir no tenía un servidor DHCP, o no funcionaba, o no debería haber estado allí en absoluto, y nos dimos cuenta de que Wireshark obtendría fácilmente la IP de origen por transmisión cuando el cable estuviera conectado a la Raspberry. Y así sucedió, pero después de iniciar sesión en la máquina, pasamos bastante tiempo tratando de que funcionara el wifi. Al final, todos los participantes fueron expulsados ​​de un archivo especial donde se encontraba la configuración.



Calibrar el chasis y conectar el joystick



imagen



Tardamos unos 35 minutos en conectar el joystick, mientras leíamos los muelles y escaneábamos el bluetooth, intentando emparejar la máquina de escribir y el joystick. Resultó que el problema era que había demasiados joysticks en la habitación y estaban emparejados aleatoriamente con autos de otras carreras; fue muy divertido descubrir que estabas controlando el chasis de un auto aleatorio =)



El siguiente paso fue calibrar la dirección y el acelerador, es decir, PWM Gire y acelere.

Este fue uno de los parámetros más importantes, se requirió hacer que el valor se correlacionara con la velocidad del automóvil y el modelo se adapte al control.



imagen



En nuestra intuición, intentamos acelerar y girar para que el coche fuera lo suficientemente rápido, pero al mismo tiempo pudiera ser controlado.





Solo quedaban unas 2 horas para el final del evento, teniendo en cuenta las actuaciones de los equipos, y era necesario acelerar con urgencia. Corrimos a anotar los datos con la idea de que era necesario crear las más variadas condiciones en las que se quedaría la máquina. Asumimos que cuando comience la competencia, las luces probablemente se reorganizarán, aparecerán objetos extraños cerca de la pista, etc.



Grabamos alrededor de 18 mil imágenes junto con los valores de aceleración y giro, tratando de meter a mucha gente en el encuadre, corrimos alrededor de la pista, saltamos, colocamos sillas, hicimos puentes, colocamos las luces al azar, fuimos en la dirección opuesta.



¡También agregamos albumentarias como aumentos e intentamos agregar tantos como fuera posible!



En esta bifurcaciónCodifiqué maliciosamente aumentos pesados ​​con un sobre de pil y viceversa; también requirió reconstruir el entorno para la máquina de escribir, lo que afectó el tiempo.



Para cuando se entrenó el primer modelo, ya teníamos el código para el segundo, los chicos trajeron nuevos datos de una pista vecina y corrieron para verificar cómo iría el primer modelo.



El primer modelo condujo 3 vueltas con errores y despegó 4 vueltas. Después de eso, perdimos otros 20 minutos, porque nos olvidamos de insertar una tarjeta SD en la máquina.



El modelo final se entrenó en 19 mil imágenes con aumento personalizado y limpieza de datos.



imagen



Así es como se ve la red en sí:



imagen



se puede ver que hay un campo para una inversión, al menos puedes cortar un batchnorm para empezar, pero decidimos tocarlo como mínimo, para que no suceda una cagada.



Además, los gráficos del primer y segundo modelo con la mejor pérdida de MSE de 0.093 y 0.086, respectivamente.



imagen



imagen



¡El segundo gráfico parece verse mejor!



En el video se desprende claramente que calibramos mal la dirección y limpiamos mal el conjunto de datos, pero eso fue suficiente para nosotros.





Video de GoPro, que grabamos después del lanzamiento principal:





El final



Fuimos los primeros en comenzar la carrera y salimos a la pista, pero allí nos esperaba un fallo, el wifi se caía constantemente, casi nos sacamos de la competencia. Y ahora, cuando estaba a punto de arrancar, la máquina de repente empezó a retroceder. Al parecer, confundí algo al calibrar el acelerador.



Pero nada, para risa de todo el público, ella siguió adelante y mantuvo dignos círculos 8 o 9 en la pista, esquivando con fuerza, ¡pero aun así nos trajo una merecida victoria!





Intento no mirar dentro del marco.



imagen



imagen



Expresiones de gratitud



¡Gracias a la comunidad ods.ai , es imposible desarrollarse sin él! Muchas gracias a mis compañeros de equipo: Valea Biryukova, Egor Urvanov (Urvanov), Roma Derbanosov (Yandex). Esperamos una revisión en video de Viktor Rogulenko (FLESS).



PD: Un agradecimiento especial a Valya Biryukova, quien, lamentablemente, tenía una temperatura de 38.5 el día antes de la competencia, pero ayudó mucho con el enlace .



Aurorai, llc



All Articles