Sem tempo para explicar, faça o piloto automático

imagem



Olá camaradas!



No fim de semana, foi realizado o hackasborkaton - uma corrida de modelos de carros autônomos baseados no kit burro com a ajuda de X5 , FLESS e a comunidade de entusiastas de direção autônoma .



A tarefa era a seguinte: primeiro era preciso montar um carro com peças de reposição, depois treiná-lo para passar na pista. O vencedor foi determinado pelas 3 voltas mais rápidas. Por bater em um cone - desqualificação.



Embora tal tarefa para aprendizado de máquina não seja nova, dificuldades podem aguardar por todo o caminho: desde a incapacidade de fazer o wi-fi funcionar normalmente até a relutância do modelo treinado em pilotar o hardware ao longo da pista. E tudo isso em um prazo apertado!



Quando íamos para esta competição, ficou imediatamente claro que seria muito divertido e muito difícil, pois tínhamos apenas 5 horas, incluindo uma pausa para o almoço, para montar uma máquina de escrever, gravar um conjunto de dados e treinar uma maquete.



Máquina burro



O Donkeycar consiste em uma caixa na qual uma câmera com lente grande angular (170 graus) está acoplada, um Raspberry Pi3 +, uma placa de controle servo, software e basicamente tudo. Mas, como ficou claro mais tarde, mesmo a montagem de um dispositivo tão simples em um tempo limitado e falhas aleatórias no equipamento pode levar muito tempo, e você não terá tempo.



imagem



Montagem



A competição começou com o fato de que primeiro era necessário desmontar a máquina e montá-la novamente. Devemos prestar homenagem aos organizadores, não nos foi oferecido para coletar um monte de peças incompreensíveis do zero, mas foi dada a oportunidade de entender o dispositivo usando um exemplo pronto. Economizamos muito tempo tirando fotos de todas as conexões e colocamos a máquina de volta em 10 minutos.



imagem



imagem



imagem



imagem



Conectando-se à máquina e verificando o trabalho



Depois de montarmos o carro, houve uma pausa, pois tínhamos que conectar o carro ao wi-fi e começar a calibrar o chassi. Acontece que trabalhar com Wi-Fi no futuro será um dos maiores problemas ao trabalhar com o Raspberry, aparentemente você teve que levar seu Wi-Fi com uma antena.



Decidimos não ficar entediados e nos conectar ao cabo Ethernet, que, junto com o resto do lixo, está sempre guardado na minha mochila. Por algum motivo, a máquina de escrever não tinha um servidor DHCP, ou não funcionava, ou nem deveria estar lá, e percebemos que o WireShark obteria facilmente o ip de origem por broadcast quando o cabo fosse conectado ao Raspberry. E assim aconteceu, mas depois de entrar na máquina, passamos muito tempo tentando fazer o wi-fi funcionar. No final, todos os participantes foram expulsos de um arquivo especial onde a configuração estava localizada.



Calibrando o chassi e conectando o joystick



imagem



Demoramos cerca de 35 minutos para conectar o joystick, enquanto líamos as docas e escaneamos o bluetooth, tentando emparelhar a máquina de escrever e o joystick. Descobriu-se que o problema era que havia muitos joysticks na sala e eles combinavam aleatoriamente com carros de outros competidores - foi muito divertido descobrir que você estava controlando o chassi de um carro aleatório =)



A próxima etapa foi calibrar a direção e o acelerador, ou seja, PWM volta e gás.

Este era um dos parâmetros mais importantes, era necessário para correlacionar o valor com a velocidade do carro e o modelo lida com o controle.



imagem



Por intuição, tentamos fazer a aceleração e virar para que o carro andasse rápido o suficiente, mas ao mesmo tempo pudesse ser controlado.





Faltavam apenas cerca de 2 horas para o final do evento, levando em consideração o desempenho das equipes, e era necessário acelerar com urgência. Corremos para anotar os dados com a ideia de que era necessário criar as mais variadas condições em que a máquina ficaria. Presumimos que, quando a competição começar, as luzes provavelmente serão reorganizadas, objetos estranhos aparecerão ao lado da pista, etc.



Gravamos cerca de 18 mil fotos junto com os valores do gás e da curva, tentando colocar muita gente no enquadramento, corremos ao redor da pista, pulamos, colocamos cadeiras, fizemos pontes, colocamos luzes aleatoriamente, fomos na direção oposta.



Nós também adicionamos albumentações como acréscimos e tentamos adicionar o máximo possível!



Neste garfoEu codifiquei maliciosamente ampliações pesadas com um envelope de pil e vice-versa - também exigiu reconstruir o ambiente para a máquina de escrever, o que afetou o tempo.



Na hora que o primeiro modelo foi treinado, já tínhamos o código do segundo, os caras trouxeram novos dados de uma pista vizinha e correram para verificar como ficaria o primeiro modelo.



O primeiro modelo deu 3 voltas com erros e disparou 4 voltas. Depois disso, perdemos mais 20 minutos, pois esquecemos de inserir um cartão SD na máquina.



O modelo final foi treinado em 19 mil imagens com aumento personalizado e limpeza de dados.



imagem



É assim que a própria rede se parece:



imagem



Vê-se que existe um campo para reversão, pode-se pelo menos cortar um batchnorm para começar, mas decidimos mexer no mínimo, para que não acontecesse uma cagada.



Além disso, os gráficos do primeiro e segundo modelos com a melhor perda de MSE de 0,093 e 0,086, respectivamente.



imagem



imagem



O segundo gráfico parece estar melhor!



É claro no vídeo que calibramos mal a direção e limpamos mal o conjunto de dados, mas isso foi o suficiente para nós.





Vídeo da GoPro, que gravamos após o lançamento principal:





O final



Fomos os primeiros a largar a corrida e fomos para a pista, mas lá o fracasso nos esperava, o wi-fi caía constantemente, quase fomos retirados da competição. E agora, quando a partida estava quase dada, a máquina de repente começou a voltar. Aparentemente, confundi algo ao calibrar o acelerador.



Mas nada, para o riso de todo o público, ela seguiu em frente e manteve dignamente os círculos 8 ou 9 na pista, desviando-se fortemente, mas ainda assim nos trouxe uma vitória merecida!





Tento não olhar para a moldura.



imagem



imagem



Agradecimentos



Graças à comunidade ods.ai , é impossível desenvolver sem ele! Muito obrigado aos meus companheiros de equipe: Valea Biryukova, Egor Urvanov (Urvanov), Roma Derbanosov (Yandex). Estamos ansiosos para uma análise do vídeo de Viktor Rogulenko (FLESS).



PS: Agradecimento especial a Valya Biryukova, que, infelizmente, estava com temperatura de 38,5 na véspera da competição, mas ajudou muito com o link .



Aurorai, llc



All Articles