Índice:

Construir seu próprio carro autônomo - (Este instrutivo é trabalho em andamento): 7 etapas
Construir seu próprio carro autônomo - (Este instrutivo é trabalho em andamento): 7 etapas

Vídeo: Construir seu próprio carro autônomo - (Este instrutivo é trabalho em andamento): 7 etapas

Vídeo: Construir seu próprio carro autônomo - (Este instrutivo é trabalho em andamento): 7 etapas
Vídeo: galinh4 2024, Julho
Anonim
Image
Image

Olá, Se você der uma olhada no meu outro Robô Instructable on Drive com Gamepad USB Remoto, este projeto é semelhante, mas em uma escala menor. Você também pode seguir ou obter alguma ajuda ou inspiração nas listas de reprodução Robótica, Reconhecimento de Voz Home-Grown ou Carro autônomo no Youtube.

Comecei com o robô grande (Wallace 4), mas desde que comecei um grupo Meetup local, precisava de algo em uma escala menor, e o grupo estava muito interessado em visão computacional.

Então, me deparei com este curso da Udemy: Construa seu próprio carro autônomo que me deu a ideia para este projeto.

Se você estiver interessado no curso da Udemy, pode verificar novamente lá; ele vai à venda com um grande desconto de vez em quando. Nota: há a Parte 1 e a Parte 2 - você precisa fazer alguma investigação sobre como obter os dois cursos como pacote (com desconto).

O objetivo deste instrutível é duplo. Primeiro, para dar algumas dicas e alternativas para certas partes do curso (como as peças e o hardware). E em segundo lugar, para expandir o curso.

O objetivo principal do curso Udemy:

é ser capaz de fazer com que um pequeno carro robô com rodas se dirija sozinho em uma estrada de duas pistas reduzida.

Ele tem que reconhecer as listras da pista e quando chega ao fim da estrada.

Ele tem que reconhecer um sinal de pare (e pare).

Além disso, um sinal de trânsito VERMELHO e VERDE.

Ele também deve reconhecer e manobrar em torno de um obstáculo (outro carro).

O que este Instructable adiciona ao curso:

Dirija o pequeno carro com um gamepad USB remoto, da mesma forma que neste outro Instructable.

Dê algumas alternativas para o que o curso oferece.

Você pode nem mesmo ter que comprar o curso:

Este Instructable pode ser tudo de que você precisa para começar.

Suprimentos

As partes essenciais (sugeridas):

Um chassi de robô

Quatro motores

Arduino

Raspberry Pi (3, 3B +, 4)

Câmera (webcam USB ou módulo Picamera)

Energia da bateria

Chaves liga / desliga

fios de ligação

isolantes (plástico e talvez metal também)

Reveja todo o Instructable e também os vídeos antes de tentar comprar peças.

Depois de ter feito este projeto, percebi que as partes exatas não são tão críticas.

Etapa 1: Mais detalhes sobre as peças …

Image
Image
Mais detalhes sobre as peças …
Mais detalhes sobre as peças …
Mais detalhes sobre as peças …
Mais detalhes sobre as peças …

O vídeo associado apresenta alguns detalhes sobre as peças e alguns problemas que encontrei.

  • Procure diferentes chassis / motores
  • Os motores já devem ter fios soldados a eles
  • Você pode querer ter uma broca e brocas, OU um chassi com mais furos
  • Lembre-se de que o peso é um problema. Tudo deve ser o mais leve possível.
  • O driver do motor L298 H-Bridge funciona muito bem. NOTA: obtenha um com os blocos de terminais de parafuso (ver foto)
  • Você provavelmente vai querer separadores de plástico e metal, o tamanho M3 é provavelmente a melhor escolha.

Suportes de plástico são bons para montar as placas no chassi (driver do motor, Arduino, Raspberry, power pcb, botão liga / desliga, etc).

Isoladores de metal são bons para montar o chassi (resistência) e também especialmente quando você está desenvolvendo (programação, teste). Para o desenvolvimento, os contrapesos de metal podem servir como palafitas. Assim como se você estivesse trabalhando em um carro real, você deseja elevar o carro de forma que as rodas fiquem no ar e possam se mover livremente. Isto é muito importante! Você cometerá erros e não quer que o carro simplesmente decole e bata.

Broca + brocas

Eu realmente quero enfatizar o uso de uma furadeira, se você puder, e o uso de espaçadores em vez de fita adesiva dupla-face. É muito provável que você acabe removendo e reposicionando suas placas, etc., várias vezes durante este projeto, e usar a fita torna-se muito complicado.

Usar uma furadeira torna muito fácil reposicionar (especialmente se o chassi for de plástico) e parece mais profissional.

Etapa 2: alimentar o carro durante o desenvolvimento

Movendo o carro durante o desenvolvimento
Movendo o carro durante o desenvolvimento
Movendo o carro durante o desenvolvimento
Movendo o carro durante o desenvolvimento

Na minha opinião, a maneira mais rápida e fácil de começar este projeto é:

  • para o desenvolvimento do esboço do software Arduino, basta conectar o Arduino ao seu computador via USB
  • para o software Raspberry Pi, você deve ter uma alimentação USB de 5 V que pode fornecer pelo menos 3 amperes. E deve ter um botão liga / desliga. A menos que você tenha um bom hub USB com alimentação conectado ao computador, provavelmente não conseguirá ligar o Raspberry diretamente do computador.
  • Para quando você estiver pronto para testar os motores / rodas, o mais fácil é (veja a foto) uma boa fonte de alimentação. No entanto, esses não são baratos.

Meu ponto com esta seção é dizer que você não quer usar a energia da bateria durante o desenvolvimento, porque isso tornará seu progresso muito mais lento.

Além disso, ao fazer algo semelhante às sugestões acima, você não precisa se preocupar (ainda) sobre como exatamente irá mover o carro. Você pode adiar essa decisão para mais tarde no projeto.

Etapa 3: Ligar o carro durante o uso real

Ligar o carro durante o uso real
Ligar o carro durante o uso real
Ligar o carro durante o uso real
Ligar o carro durante o uso real

Se você decidir seguir o curso (ou o que eu fiz) para alimentação de 5 V para a lógica, esteja ciente de que nem todos os bancos de alimentação USB de 5 V são bons para este projeto.

O ponto principal aqui é que você precisa de 5 V, mas precisa de pelo menos 3 Amps! Pense desta forma - você quer um banco de dados que irá alimentar um laptop (talvez).

Se você mora nos EUA, acho que uma das melhores maneiras de fazer isso é comprando na Best Buy. Porque? Por causa de sua política de devolução do dinheiro de 14 dias para devoluções.

Na verdade, tive que tentar três bancos de energia diferentes antes de encontrar um que funcionasse. Os outros fazem o Raspberry Pi reclamar de subtensão.

Comecei com o powerbank mais barato e continuei tentando o próximo modelo (que custava mais), até encontrar um que funcionasse.

Como alimentar o Arduino

No curso Udemy, o autor optou por alimentar o Arduino diretamente do powerbank (por meio de um pcb personalizado que ele fez) e usou pinos de alimentação no conector GPIO do Arduino.

Eu, no entanto, optei por ligar o Arduino diretamente do Raspberry Pi, por meio do cabo USB.

Você terá que decidir o que é melhor.

Como alimentar os motores / acionador do motor

No curso Udemy, o autor optou por alimentar os motores / driver diretamente do powerbank de 5V. Existem duas considerações se você usar essa abordagem.

  1. Quando os motores começam a girar, eles consomem mais corrente. Isso pode (irá) fazer com que a tensão de alimentação caia (afunde) abaixo de 5 V e faz com que o Raspberry seja reiniciado.
  2. Usar apenas 5 V para alimentar os motores significa que você não está fornecendo tanta potência quanto poderia aos motores, e o carro se moverá mais devagar (mais lento). Testei os motores (com aquela fonte de alimentação) (veja a foto) a pelo menos 9V. Eles funcionam bem em 9V.

Observações sobre 9V (ou mais)

Se você deu uma olhada em todas as fotos e vídeos deste Instructable, notou que montei um PCB personalizado para criar minha própria fonte de alimentação de 9V. Aprendi algumas coisas ao longo do caminho.

No momento, estou usando várias (3) células de bateria de 9 V em paralelo para alimentar os motores. Usei baterias recarregáveis alcalinas e NiMH.

Experiência de aprendizado no. 1: Leva muito tempo (muitas horas) para carregar baterias NiMH 9V de maneira adequada.

Solução possível: Invista em um carregador de NiMH com várias baterias. Deve ser um carregador "inteligente".

Desvantagem: eles não são baratos.

Experiência de aprendizado # 2: as baterias de 9 V são, na verdade, compostas de várias pequenas células internas. Se uma dessas células morrer, toda a bateria ficará inútil. Eu NÃO tive esse problema, mas li sobre ele.

Experiência de aprendizagem no. 3: Nem todas as baterias de 9 V têm a mesma voltagem. Este é importante. Porque quanto mais alta a tensão, mais velocidade é possível. Algumas células de bateria (e carregadores) têm apenas 8,4V. Alguns até menos. Alguns são 9.6V.

Experiência de aprendizado # 4: baterias de 9 V, especialmente as de NiMH, são leves. Uma coisa boa. No entanto, a maioria deles fornece apenas mA de corrente de saída. É por isso que tive que colocá-los em paralelo. Você precisa de uma capacidade de corrente total de quase 2 Amps, mesmo por breves períodos de tempo.

Experiência de aprendizado nº 5: Existem baterias de 9,6 V, usadas para coisas como carros controlados por rádio. Ainda não usei um, mas acredito que eles fornecem mais corrente do que as baterias de 9V paralelas como eu fazia. Além disso, você pode carregar a unidade única. As embalagens vêm em tamanhos diferentes. E há uma consideração de peso. E então, você usa o pacote para alimentar o carro inteiro ou apenas os motores? Se for para o carro inteiro, você precisará de um regulador abaixador de 5V para o Raspberry Pi.

O L298 H-Bridge tem a capacidade de produzir 5 V para esse propósito, mas estou preocupado com a quantidade de corrente que ele pode produzir para o Raspberry Pi e se será muito esforço para a placa L298.

Se você decidir ter duas fontes de energia separadas, então você pode ter um problema de peso (muito pesado).

Etapa 4: Programação de software para condução de gamepad

Eu acho que já cobri muito desta seção no Robot Driven Via Remote USB Gamepad Instructable, então não vou repetir isso aqui.

As seções de programação / software nesse outro Instructable são apenas sugestões. Acho que se aprende mais por tentativa e erro.

Etapa 5: adicionar uma câmera

Adicionar uma câmera
Adicionar uma câmera
Adicionar uma câmera
Adicionar uma câmera
Adicionar uma câmera
Adicionar uma câmera

No curso da Udemy, acredito que o autor usa tarugos de madeira redondos e uma pistola de cola para construir uma maneira de elevar a câmera.

Você vai querer elevar a câmera para que olhe para baixo na estrada de duas pistas, para que possa reconhecer mais facilmente as pistas.

Onde eu moro nos EUA, os tarugos de madeira eram muito baratos. Você pode comprá-los na Lowe's ou na Home Depot. Eu escolhi cavilhas quadradas em vez de cavilhas redondas.

Também escolhi fazer uma base mais resistente para a torre da câmera, e fiz toda a torre removível do carro, para que eu possa brincar e experimentar qual é a melhor posição para ela no carro.

Além disso, fiz a torre com a ideia de que começarei com uma webcam USB, mas possivelmente mais tarde passarei a usar o módulo Picamera.

Você pode querer investir em uma câmera do tipo olho de peixe.

Comprei uma pistola de cola quente muito barata, mas queria reforçar melhor a base da torre, então fiz alguns furos e acrescentei parafusos para segurar tudo melhor.

Em seguida, aparafusei a base no chassi do carro.

Se, mais tarde, eu quiser mover as coisas, eu apenas desaferrolo a base do chassi, faço novos furos no novo local do chassi e aparafuso novamente a torre no chassi.

Eu trouxe o código "siga-me" Python e Node.js do grande robô (Wallace Robot 4) como uma forma de testar tudo. Por favor, veja as fotos desta seção para a lista de youtubes que dão mais detalhes sobre o "siga-me".

Como mencionei, foi mais fácil primeiro montar uma webcam USB. Posteriormente, posso montar o módulo Picamera.

Etapa 6: reconhecimento facial - determinar a posição

Image
Image

Essa parte não é o foco do curso da Udemy, mas foi um exercício divertido.

Se você pesquisar na web por "reconhecimento de face python opencv", encontrará muitos bons exemplos de como fazer isso, e todos eles seguem praticamente os mesmos passos.

  1. carregue o arquivo de rosto "haar"
  2. inicializar a câmera
  3. comece um loop onde você pega um quadro
  4. converter a imagem colorida em escala de cinza
  5. alimente-o para o opencv para que ele encontre rosto (s)
  6. iniciar um loop interno (para cada face encontrada) (no meu caso, adiciono código para abortar se houver mais de 1 face)

Para este propósito aqui, uma vez que tenhamos detectado um rosto, conhecemos o X, Y, W e H do quadrado imaginário que delineia o rosto.

Se você quiser que o robô se mova para frente ou para trás, você só precisa considerar W. Se W for muito grande (muito perto), faça com que o robô se mova para trás. Se W for muito pequeno (muito longe), faça o robô avançar.

O movimento para a esquerda / direita é um pouco mais complicado, mas não louco. Dê uma olhada na imagem desta seção que detalha como determinar a posição do rosto esquerdo versus direito.

NOTA:

Se você executar qualquer um dos exemplos do OpenCV da web, todos eles mostram a visão real do que o opencv está "vendo", com o rosto delineado em um quadrado. Se você observar, esse quadrado não é estável (constante), mesmo se você não estiver se movendo.

Esses valores variáveis fariam com que o robô estivesse constantemente em movimento, para frente ou para trás, para a esquerda ou para a direita.

Portanto, você precisará ter algum tipo de delta para frente / para trás e para esquerda / direita.

Vamos pegar a esquerda contra a direita:

Depois de calcular à esquerda e à direita, obtenha a diferença (delta):

delta = abs (esquerda - direita)

Você precisa pegar o absoluto porque não sabe qual será o número maior.

Em seguida, você adiciona algum código condicional para tentar apenas se mover se o delta for maior do que o mínimo.

Você faria a mesma coisa para frente e para trás.

Etapa 7: Posição do rosto - Robô em movimento

Depois de saber que precisa que o robô se mova para a esquerda ou direita, para frente ou para trás, como fazer isso?

Como este Instructable é um trabalho em processo, no momento, acabei de copiar o código do meu grande robô para usar neste projeto. Por favor, verifique minha lista de reprodução de Robótica no youtube, onde detalha tudo isso.

Em resumo, tenho o código em camadas.

O script de reconhecimento facial Python faz solicitações http ao servidor Node.js.

O servidor Node.js escuta as solicitações de http para direções de movimentação e as converte em protocolo serial personalizado

Protocolo serial personalizado entre o servidor Node.js e o Arduino

Esboço do Arduino que executa os comandos reais para mover o robô

O curso Udemy não faz isso como acima. Mas como eu queria fazer um bom progresso e me concentrar no reconhecimento de imagem real, reutilizei meu código anterior por enquanto.

Recomendado: