Monster Truck GAZ66 autônomo 1/16

Habr, olá!

Quero falar sobre como eu fiz e criei uma máquina de autogerenciamento :)

Eu poderia dizer imediatamente como fazê-lo anexando secamente os circuitos e os comandos do bash, mas será muito chato. Eu ofereço a você uma história interessante (espero) sobre como eu pessoalmente fui por esse caminho e de onde vim.

Aqueles lugares onde havia algo para tirar fotos com fotos. Onde sobre o software - provavelmente sem uma foto.

Será realmente uma história em formato narrativo, como eu diria a você durante uma xícara de café. Não se trata de comandos bash, scripts python, e é tudo.

Vamos começar com fotos e vídeos do que aconteceu e, em seguida, a história completa.




O histórico seguirá esse cenário.


  • Por que eu queria isso
  • Como funciona uma máquina autônoma (vista superior)
  • Idade 1 - Gelendwagen do mundo infantil + câmera Raspberry Pi Zero W +
  • Age 2 - Câmera GAZ66 + NVIDIA Jetson Nano + para RaspberryPi
  • Idade 3 - Remo Hobby SMAX
  • Idade 4 - Conexão SMAX e GAZ66
  • Idade 5 - Montagem de componentes em um Monster Truck
  • Idade 6 - Instalando o Donkey Car e arredores
  • Idade 7 - Montagem de trilhas, viagens
  • Idade 8 - Viajar com o Joystick
  • Idade 9 - Treinamento em Neurônios
  • Idade 10 - Tudo funciona, finalmente!
  • Qual é o próximo?
  • Desafio de batalha
  • Comunidade
  • A imagem do cartão SD da minha máquina de escrever

Despeje café, estamos saindo!

Por que eu queria isso


Tudo começou com o fato de eu estar frustrado pelo fato de que em uma grande empresa de TI na Rússia eles produzem drones muito legais, isso é incrivelmente legal, mas estou sem trabalho :)

Não, bem, é realmente muito legal - carros autônomos) Uma excelente liga da mecânica e algoritmos :) A

frustração continuou até eu combinar na minha cabeça diferentes fatos sobre mim, a saber:

  • Eu posso escrever em python
  • Compreendo (aproximadamente) como o aprendizado de máquina funciona
  • Eu sei trabalhar com Linux no console
  • Passei minha infância com um ferro de soldar
  • Eu tenho uma caixa inteira com componentes de bricolage (raspberry pi, arduino, sensores, etc.)

Quando tudo deu certo na minha cabeça, eu decidi - carro autônomo (sdc)!

Para começar, decidi, vale a pena descobrir como o sdc funciona, e esta será a próxima seção.

Como funciona uma máquina autônoma (vista superior)


Para que o carro funcione sozinho, ele precisa de quatro componentes - um carrinho, sensores, um computador, um algoritmo.

Vamos descobrir


Trole

O que realmente vai dirigir. Rodas, motores, a bateria que alimenta tudo.

Há duas coortes condicionais de carros que eu nomeei para mim - carros do mundo infantil e carros para um hobby.

Nem tente flertar com carros do mundo infantil, tentei, isso é um fracasso. O ponto negativo é que eles têm motores fracos sem feedback. Isso significa que você poderá parar qualquer tapete doméstico e não poderá girar com a precisão fornecida.

Carros do mundo do hobby são o que você precisa. Eles têm motores potentes, boas baterias, servos nas rodas dianteiras para voltas. Considere isso um limite de entrada. A coisa mais barata e normal que pude encontrar foi o Remo Hobby SMAX.



Sensores

Ele coleta algumas informações sobre o mundo ao seu redor e as transfere para um computador para tomada de decisão.

Basicamente, um conjunto cavalheiro para SDC é:

  • Câmera. A base do básico do SDC. Ele olha para um pedaço de espaço à sua frente, transfere a imagem para um computador que reconhece o que está acontecendo e decide o que fazer. Parece que eu não vi implementações SDC sem uma câmera.
  • Sensor IMU. Uma peça mostrando a aceleração e o ângulo de inclinação ao longo dos eixos. Ajuda a entender para onde estamos indo e como nossa localização mudou em relação ao ponto de partida. Usado em quase todos os helicópteros.
  • . , , , . , SDC, , . , 75$, SDC Velodyne 4K$. , 3D , 2D.
  • GPS. , , , SDC .
  • . — , . 3D .



Computador

O que recebe valores dos sensores analisa a situação, transferimos os comandos de controle para o carrinho.

No mundo dos computadores para eletrônicos embarcados, os processadores ARM com eficiência de energia (como no telefone) e os computadores de placa única baseados neles são os que dominam.

Hoje existem duas das opções de placa única mais populares - RaspberryPi e NVIDIA Jetson.
RaspberryPi tem um preço mais baixo, uma grande variedade de projetos, uma grande comunidade.

A NVIDIA tem um preço mais alto, menos projetos, mas mais produtividade nas tarefas de aprendizado de máquina. Possui 128 núcleos CUDA integrados (como em sua grande placa gráfica NVIDIA), que são usados ​​para acelerar os algoritmos de aprendizado de máquina.

Existem três peças de Raspberry Pi (ZeroW, 3, 4) e NVIDIA Jetson Nano na minha coleção. Decidi montar a máquina, é claro, na Jetson.



Algoritmo

Que decide ações com base nas leituras do sensor. Geralmente, uma combinação de visão computacional e redes neurais é usada para isso. Na versão mais básica, você dirige sua máquina de escrever ao longo de algumas marcações, grava vídeos dessas viagens com rastreamento de aceleração / freio / volta e depois treina nessa rede neural para encontrar a dependência dos sinais do motor nas fotos da câmera. Simplesmente, essa é a tarefa de reconhecer a marcação e tentar permanecer nela.

Se você deseja atualizar o funcionamento da rede neural, sugiro que assista a este vídeo:


Aqui descrevi a opção mais simples, onde há apenas uma câmera e um passeio de marcação. Mas existem opções com mais sensores e uma lógica de trabalho diferente - haverá um post separado sobre isso aqui.

Se o nível for muito alto, é isso.

Resta apenas:

  • montar carrinho
  • sensores pendurados
  • conectar computador
  • desenhar marcação
  • andar nele
  • treinar uma rede neural
  • ir

Agora que descobrimos em que consiste um carro autônomo, vamos para qual era de implementação eu tinha especificamente.

Idade 1 - Gelendwagen do mundo infantil + câmera Raspberry Pi Zero W +


Sim, minha primeira abordagem foi exatamente isso. Aconteceu porque havia um mundo infantil perto da minha casa, no qual eu gostava de Gelik, e o comprei.

Ok, pensei, há uma hélice, agora preciso de um computador e sensor. Pensamento - feito. Pedi uma RPi Zero W e uma câmera para ela. Enquanto esperava o computador e a câmera, entrei e comprei um banco de potência para esse negócio.
Então, tudo está no lugar, é hora de coletar. Eu encontrei esse projeto , decidi segui-lo.
Gelik desmontou, retirou seus cérebros nativos, transferiu-os para o controlador do motor, por sua vez, transferiu-os para o RPi, conectou uma câmera a ele, alimentou tudo com um banco de potência e ficou satisfeito.

Antes de prosseguir com o governo autônomo, decidi andar pelo console por diversão, perseguindo um gato, transmitindo a imagem da câmera para o meu laptop.

Foi então que algumas falhas me aguardaram.

Primeiro, o Raspberry Pi Zero W é muito fraco em termos de desempenho.

Segundo - A passibilidade do gelik do mundo infantil é quase inexistente, foi interrompida por quase qualquer obstáculo mínimo.

Já ficou claro que o projeto era natimorto, mas por uma questão de interesse, tentei montar a visão computacional (OpenCV) para o Raspberry Pi Zero diretamente nele. Demorou, sem piadas, mais de um dia e foi o último prego na tampa do caixão dessa implementação do SDC.
Tornou-se claro que você precisa alterar o computador para obter melhor desempenho e o carrinho para obter maior capacidade entre países.

Acabou bem engraçado:



2 — 66 + NVIDIA Jetson Nano + RaspberryPi


Então, nesse ponto, ficou claro que você precisa de um carro mais aceitável e, de preferência, de um caminhão, para colocar todos os componentes no corpo. Depois de estudar um serviço para a seleção de mercadorias, ficou claro que o modelo da nossa GAZ66 nativa combina comigo, também é uma shishiga entre as pessoas. Ok, eu pedi, espere, é hora de pensar no computador. A essa altura, a NVIDIA estava apenas preparando o início das vendas do seu Jetson Nano, e fiz um pedido no primeiro dia de vendas.

Chegou um caminhão, continuei esperando Jetson, impacientemente andava de shishiga pela casa, rolava os gatinhos que o gato mencionado acima deu à luz. Para não dizer que os gatinhos gostaram - tiveram que parar.

Enquanto isso, Jetson ainda estava dirigindo, e pedi um lid lidar a vácuo da China - não sabia como usá-lo especificamente, mas entendi que queria.

Um dia, um correio comercial apareceu na entrada do escritório, me entregou uma caixa bastante grande de pagador único da NVIDIA, assinei a fatura e me senti como um entusiasta do desenvolvedor - uau, um dispositivo comprado no início das vendas veio até mim.

É hora de colecionar! Mas primeiro, você precisa se beijar, lol. Desmontou o shishigu, jogou fora seu cérebro nativo, lubrificou os mecanismos, começou a se reunir já com base em um computador.

Conectei a câmera, o controlador do motor, o motor rotativo, o motor a gás / freio, iniciei os scripts Python para o teste - novamente uma chatice!

Desta vez, a história é a seguinte: um shishigi usa um motor convencional para girar, não um servo. Então, ele não tem feedback. Portanto, não posso controlá-los com certeza, o que significa que não é adequado para SDC.

Ok, novamente, você precisa resolver de alguma forma isso, fazer alguma coisa. Passamos para a próxima era.





Idade 3 - Remo Hobby SMAX


Como, naquele momento, estava claro que a máquina precisava não apenas de componentes aceitáveis, mas também minimamente bons, a escolha caiu nas lojas para quem tem RC, este é um hobby.
Sem mais delongas, cheguei a uma dessas lojas e, sem me esconder, me disse o que estava fazendo e que tipo de máquina precisava. O vendedor, seja gentil, me disse qual máquina atende meus requisitos mínimos e era um Remo Hobby SMAX. Eu comprei isso.

Cheguei em casa, peguei um shishigu, tirei tudo dele, sentei-me para me conectar ao SMAX. E o que você acha? Está certo - falha novamente!

Basicamente, os carros RC são projetados para que o motor se conecte ao controlador do motor e que, por sua vez, se conecte ao módulo de rádio que se comunica com o controle remoto. E foi o SMAX que foi projetado para que o controlador do motor e o módulo de rádio fossem combinados - eu literalmente não tive a oportunidade de conectar-me ao controlador de motor em vez do módulo de rádio.

Ok, você tem que fazer algo novamente. Volto ao local dos carros de RC, subo nos componentes. Bisbilhotando por lá e aplaudindo, encontro um controlador de motor que tem um fio separado para o módulo de rádio.

Eu ordeno, trago, coleciono tudo de novo - funciona, mas apenas vira. Mas não há gás e vice-versa! Por que diabos, eu acho, mas continuo escolhendo.

Desta vez, não funcionou que, para que o mecanismo SMAX seja ativado, o console deve enviar a ele um determinado valor (360) através do módulo de rádio. Mas eu não sabia e inseri os valores diretamente para o gás de freio. E o motor não reagiu, partindo da lógica de que ninguém lhe pediu para acordar.

Em algum momento, sentei-me para examinar literalmente tudo em uma fila, esperando que ele reagisse a pelo menos alguma coisa.

No começo eu passei dos 100 - passados. Então 50 por. E quando cheguei na busca de 10, ouvi um grito de boas-vindas em 360 gritos! Trabalho!

Testei gás / ré / esquerda / direita no console, tudo funciona. Isso é fogo, aqui eu sou um programador =)

Parece que é hora de montar, mas há um problema - não há absolutamente nenhum lugar para colocar os componentes. Os carros de RC são projetados para que seu topo seja uma coisa muito condicional. Primeiro, o topo é composto de plástico muito fino e, segundo, é um jipe, e não há onde colocar tudo.
Nesse momento, decidi pesquisar e como os outros fazem isso.

Encontrei o projeto carro de burro, que tem tudo pronto para montar seu SDC - exemplos de hardware e estrutura de software. Parece legal, pegue e use, mas existem nuances:

  • eles imprimem a parte superior do carro em uma impressora 3D e, em seguida, lembra o carro muito distante. feio, em suma, não esteticamente agradável
  • os modelos 3D deles são compatíveis com máquinas que não vendemos.

Ok, lembre-se de Donkey Car, então usaremos a estrutura de software deles, mas por enquanto precisamos pensar em hardware.

Um dia, virando a cabeça no meu apartamento, olhei para o shishigu desmontado, no SMAX sem a parte superior, e pensei - hmmm, e eles parecem ter a mesma escala (1/16). Ele pegou um shishiga, pegou um SMAX, apenas colocou um por um no outro - e realmente faz! E parece legal! OK, eu tenho que fazer isso! Passamos para a próxima era.







Idade 4 - Conexão SMAX e GAZ66


Portanto, no início desta era, tenho um objetivo interno - conectar a parte superior de uma máquina ao fundo de outra. Como meus colegas e eu pegamos um chip em uma impressora 3D e sou seu co-proprietário (um investidor sério), foi decidido estabelecer uma conexão em um programa CAD, imprimir e, assim, conectá-los.

Com essa ideia, caminhei por cerca de 2 meses, pensando que estava prestes a me sentar para entender os sistemas CAD. Lol não. Tendo admitido para mim mesmo que não quero entender os sistemas CAD, comecei a pensar em outras opções.

Voltei ao mundo das crianças, decidi ver os designers, de repente eles de alguma forma me ajudaram. Eu comprei um construtor de metal clássico, que estava comigo quando eu estava na escola (a velha escola reunida).

Ele o arrastou para casa, colocou duas partes da máquina lado a lado e começou a aplicar todos os tipos de elementos de design nelas. Por quanto tempo, brevemente, algum tipo de entendimento começou a aparecer, como, pelo menos em teoria, isso poderia ser feito.

Começou a fazer. Passou mais de um dia com uma chave inglesa, nozes e pensamentos espaciais.

Enquanto eu estava conectado, aprendi a perfurar o plástico com uma chave de fenda, rasgue cuidadosamente as peças em excesso para não danificar a caixa, trave as porcas com outras porcas (mas sem arruelas de qualquer maneira). Em geral, meu Trudovik ficaria orgulhoso de mim.

Depois de três alterações e três dias, vi esse caminhão monstro na minha frente - o GAZ66 SMAX Edition de Beslan.

Então, parece que a base de hardware está pronta, passe para a próxima era.





Idade 5 - Montagem de componentes em um Monster Truck


Finalmente:

  • Eu tenho um carrinho com bons componentes
  • Eu tenho uma estética e espaço superior
  • gás / freio / voltas funcionam normalmente neste carrinho
  • superior e inferior estão conectados juntos =)

É hora de montar componentes nessa beleza.

Armado com uma chave de fenda como broca para plástico e fita dupla face como suporte universal para tudo, comecei a trabalhar.

Fiz uma montagem para a câmera na cabine, que permite ajustar o ângulo da câmera. Jogou um longo trem da câmera para Jetson, que, por sua vez, se estabeleceu nas costas.

Além de Jetson, as seguintes pessoas se estabeleceram nas costas:

  • powerbank para alimentar o computador (doou o seu principal, legal, com entrega de energia USB para que o jetson não falhe na alimentação)
  • PCA9685 (controlador PWM) para controle do motor
  • bateria para alimentar o motor da máquina

Como o projeto já era considerado de longo prazo naquele momento, decidi não mexer no lidar ainda e fazer MVP pelo menos na câmera e no software da Donkey Car.

Por diversão, conectei meus faróis nativos do GAZ66 para torná-lo mais bonito e mais confiante no escuro.

Ok, minha máquina liga, os mecanismos respondem aos comandos do python, a câmera dá uma imagem, as luzes estão acesas, tudo está bem, é hora de instalar o software.





Idade 6 - Instalando o Donkey Car e arredores


Felizmente, nos últimos estágios, encontrei o projeto Donkey Car, que facilitou muito minha vida e me salvou de escrever tudo sozinho. Simplificando, o DonkeyCar é uma estrutura que já possui tudo o que você precisa para SDC. E eles ainda têm guias sobre como instalar software. Mas, como é geralmente o caso do OpenSource, os guias estão desatualizados e se contradizem em instantes.

Ok, tem que descobrir isso. Para o funcionamento normal da estrutura, são necessárias as seguintes bibliotecas:

  • Opencv
  • tensorflow-gpu (gpu é para jetson, pois existe um kernel cuda. ​​para rpi existe tensorflow-lite)
  • tensorrt (biblioteca para acelerar a inferência de neurônios)
  • e tudo o que é definido automaticamente com base na lista de ambiente

Vamos começar com o OpenCV.

O guia DonkeyCar diz que você precisa compilá-lo a partir da própria fonte, porque para o ARM não há OpenCV no pip. Até fiz isso, compilei o OpenCV, mas antes de instalá-lo, decidi verificar, de repente o sistema possui uma versão antiga do OpenCV e precisa ser demolido. Chamei um python, cv2 importado, solicitei uma versão, mas é bam e relevante. Pesquisou rapidamente e descobriu que nas versões mais recentes do linux4tegra (que está em jetson), os caras da NVIDIA começaram a instalar o OpenCV. Legal, tenho menos o que fazer. Bem feito, que eu poderia me compilar :)

Em seguida, tensorflow-gpu.

O guia DonkeyCar indica, em primeiro lugar, uma ramificação de versão desatualizada (1.xx) e, em segundo lugar, nem mesmo a versão mais recente das desatualizadas. Decidi não ouvi-los e coloquei a versão atual mais recente (2.0).

O próximo passo é tensorrt.

O guia para instalar o tensrort no jetson está escrito em uma página wiki separada, e é claro que o autor não leu o guia principal =) Como no guia tensorrt, as variáveis ​​de ambiente são reatribuídas e o OpenCV para de funcionar. Eu torci dessa maneira e daquilo, revirei tudo e decidi atacar o ambiente e as variáveis ​​de ambiente - enrolei diretamente no ambiente principal.

Satisfeito, ele abriu o python, chamado cv2, tensorflow, tensorrt e, em seguida, pediu a versão do python - todos eles foram importados, todos mostraram as versões mais recentes. Legal!

O processo de instalação do carro de burro é bastante simples, não vou descrevê-lo, sugiro ler o guia deles. A única coisa que observarei agora é que, na configuração do carro de burro, você pode aumentar a resolução da imagem de 86x86 para RPi para 224x224 para Jetson (porque haverá mais desempenho e precisão será maior).

Então, está tudo pronto, é hora de executar e testar!

Minha máquina realmente liga, inicia o servidor da Web nesse IP, para o qual o roteador emitiu a máquina. E você pode realmente ir até lá e, a partir do navegador, dirija o joystick, olhando a foto da câmera.

Eu também tive que calibrar os valores fornecidos ao PWM (PCA9685) para encontrar voltas máximas para a frente, para trás e para as laterais.

Aliás, descobri que meu motor estava conectado incorretamente - a máquina voltava com muito mais energia do que a frente - encontrei experimentalmente os fios e os joguei ao contrário. Estava tão organizado ali que todos os fios do motor são da mesma cor e você não consegue se lembrar de como era. Mas eu o conectei corretamente e coloquei um psiquiatra em cada fio, para poder distingui-los mais tarde.

Legal, é hora de começar a preparar a pista!

Idade 7 - Montagem de trilhas, viagens


O algoritmo Donkey Car foi projetado para que exista um neurônio treinado por um professor. E isso significa que a imagem da câmera está rastreando, e um arquivo json aparece ao lado de cada imagem na qual o nome da imagem, aceleração, rotação, carimbo de data e hora está gravado. E, para treinar um neurônio, esses pares imagem + json precisam de pelo menos 5K.

Foi decidido montar a pista em casa, eles dizem que o apartamento é grande, há para onde se virar. Mas, começando a se reunir, ficou claro que não havia passeio pelo apartamento - o piso é de cores diferentes, o contraste será diferente e o modelo não pode ser retirado.

Ok, eu decidi colocá-lo em um quarto. Comprei 4 rolos de fita adesiva e colei na pista no chão.

Eu coloquei o carro, liguei, parti e novamente falhei - acontece que um quarto é muito pequeno e meu carro é brega não incluído nas curvas. Mais precisamente, está incluído, mas a uma velocidade que será uma pena =)

Ok, precisamos fazer a segunda iteração e precisamos de uma sala grande. A escolha caiu no escritório - há muitos lugares, o piso é monofônico, aberto 24X7. O único problema é que os limpadores trabalham à noite e a pista precisa ser removida. Ou seja, você precisa fazer tudo de uma só vez - andar com as mãos para ser professor, treinar o modelo, jogá-lo de volta na máquina de escrever e ficar sem o controle das mãos.

Ok, dia X, após o evento sobre os experimentos A / B, foi decidido ficar no escritório e fazer a pista.
O local é escolhido, a fita está pronta, a equipe de construtores no jogo. Apenas uma hora, e no corredor do escritório há uma ótima pista.

Eu coloco o carro, ligo, tento dirigir - viva, ele entra em curvas e tive que limitar a velocidade a apenas 80%.



Idade 8 - Viajar com o Joystick


Então, eu tenho uma pista, tenho um carro e preciso de 5K pares de imagens + json.

Empiricamente, descobri que uma volta da minha pista é de 250 pares de foto + json, o que significa que preciso deixar pelo menos 20 voltas.

De preferência em uma fileira. Você pode, é claro, de forma intermitente, mas o gás jogado é sacudido pelo modelo e pode começar a desacelerar, mas eu não quero isso.

Comecei a tentar fazer 20 voltas sem interrupção, e isso, devo dizer, não é uma tarefa fácil.

A primeira dificuldade surgiu porque havia uma coluna pesada no centro da rota e, quando a máquina estava dirigindo atrás dela, a conexão com o laptop do qual era controlada ficou atrasada, e esse atraso raso me tirou dos limites da rota.

Ok, então você precisa ter certeza de que a conexão é do dispositivo com o qual eu mesmo vou à máquina de escrever quando dirijo. E isso significa que você precisa dirigir a partir do navegador do telefone.

Mas ainda existe um joystick, e eu o seguro com as duas mãos. Onde mais posso obter o telefone? Carregar uma máquina de escrever não é uma opção, ela diminui a velocidade e, sem telefone, fica mais rápido e pode ficar confuso nos cantos devido à aceleração excessiva.

Hmm, então você precisa de alguma forma combinar o telefone e o joystick. Ok, eu tenho um leitor, é grande o suficiente, cabe em um telefone e em um joystick - serve. Ele pegou a fita e colocou o telefone no leitor com fita adesiva, e logo abaixo do joystick. Eu olhei para esse milagre e pensei - o que você é, em geral? :-)

Mas funcionou :) Com isso consegui deixar 20 voltas. Mas na verdade, até 25, porque eu tenho um gosto em torno de 15 círculos.

Dachshund, pronto, eu tenho um conjunto de dados para treinar um neurônio, é hora de treinar!

Idade 9 - Treinamento em Neurônios


Neste momento, tenho um carro, uma pista, um conjunto de dados - sim, estou a um passo do resultado!
Em casa, o PC estava girando no modo inativo, com o NVIDIA RTX 2070, no qual eu planejava estudar. Felizmente, para uma casa inteligente, eu tenho um IP externo e só precisava obter a porta 22 da Internet para um PC. É bom que tenha havido assistentes que fizeram isso por mim enquanto eu estava no escritório.

Então, eu vou no ssh para o computador com o ubuntu, monitore a pasta home para sshfs, carregue arquivos. Parece que apenas 40 megabytes, mas durou cerca de 30 minutos. Aconteceu, como eu o entendo, porque havia muitos deles.

Arquivos no seu computador, tensorflow-gpu instalado, software DonkeyCar instalado, é hora de treinar.
Estou chamando um script da DonkeyCar para treinar um neurônio, aponto para as pastas com o conjunto de dados - ele foi executado.
Enquanto o neurônio está em execução, o nvtop (monitor de carga da placa de vídeo) mostra 1406% ​​de utilização, o htop regular mostra 100% de carga da cpu para todos os 16 núcleos, está ativado).

Depois de uns 20 minutos, tenho um modelo treinado para dirigir um carro. Parece, pegue, use. Mas não :)

Lembre-se, escrevi acima sobre tensorrt, que otimiza a inferência de neurônios e os executa em núcleos cuda? Claro, eu quero passar por isso.

E isso significa o que eu preciso:

  • congelar o modelo (você precisa compactar tudo para o modelo em um arquivo)
  • converter resultado de friso para o formato tensorrt

Estou tentando congelar o modelo, eu chamo o script de DonkeyCar, falha. Enquanto isso, é noite, logo os produtos de limpeza estão desmontando minha pista, preciso fazer isso rapidamente.

Nasceu a hipótese de que isso ocorreu porque tomei o fluxo tensor errado que o DonkeyCar tinha. Ok, estou puxando o tensorflow 2.0, ligo 1,15, tento novamente - sucesso, felicidades!

Agora a conversão e novamente a repartição - a equipe não foi encontrada. Ok, vou pesquisar qual é o problema. Aconteceu que a NVIDIA marcou esse recurso como obsoleto e interrompeu o suporte. Agora, eles dizem, você precisa converter à mão. Felizmente, encontrei um repositório git, onde havia uma solicitação semelhante, e o usuário encontrou o local onde o script python realmente se encontra, que converte os modelos.

Eu chamo o script daquele lugar, e a verdade responde. Mas, ele diz, nenhum terceiro pitão para você, venha em segundo.

Ok, eu estou chamando o segundo python. Ele me diz - eu não tenho fluxo tensor. Bem, peço a ele para colocar tensorflow-gpu 1.15, e ele me diz que não existe essa versão, há apenas 1,14. Ok, concordo, vamos dar uma chance e colocar as diferentes versões em diferentes ambientes python. Coloque tensorflow no segundo python, chamado de conversão - saúde, funcionou!

Ok, eu tenho modelos para tensorrt e, para tensorflow-gpu comum, largo na máquina.

Eu inicio a máquina com o modelo tensens, um trackback de erro enorme, o tempo pressiona - ok, vou tentar o modelo usual.

Eu inicio o erro usual novamente, mas desta vez é bem claro: o tamanho da sua foto é 224X224, enquanto 86X86 é esperado. Lembre-se, em algum lugar muito mais alto eu escrevi que as regras de configuração mudaram a resolução da imagem da câmera?

Portanto, na máquina de escrever que corrigi, mas não no computador host.

Volto ao computador host, corrijo as configurações lá, treine novamente, refaça o friso, reconverta e jogue de volta.



Eu inicio a máquina com um modelo para tensorrt e ...

Idade 10 - Tudo funciona, finalmente!


Viva! Meu carro foi! Si mesmo, sem mim. Muito legal. Estou incrivelmente feliz)


Por quase um ano eu fiz tudo isso, e agora)

Qual é o próximo?


Existem vários planos para um maior desenvolvimento: vou do simples ao complexo.

  • Adicione um sensor IMU ao modelo para aumentar possivelmente a precisão. Por exemplo, ao dirigir em subidas, é necessário mais esforço no motor.
  • Transforme a lógica em viagens não na estrada, mas apenas contorne obstáculos
  • Adicione o lidar e faça leituras dele

Desafio de batalha


Se você, ou com uma companhia de amigos, sente que deseja correr, escreva para mim, vamos organizar competições =)

Comunidade


Também montei uma sala de bate-papo interessante e estou preparando um canal. Não tenho certeza de que, de acordo com as regras da Habr, é possível, por isso enviarei à PM, mediante solicitação.

A imagem do cartão SD da minha máquina de escrever


Mediante solicitação, também enviarei uma imagem do meu carro, se você quiser fazê-lo de forma semelhante e não quiser se banhar com a configuração.

All Articles