Índice:

Carro RasbperryPi com câmera FPV. Controle por navegador da web: 31 etapas (com imagens)
Carro RasbperryPi com câmera FPV. Controle por navegador da web: 31 etapas (com imagens)

Vídeo: Carro RasbperryPi com câmera FPV. Controle por navegador da web: 31 etapas (com imagens)

Vídeo: Carro RasbperryPi com câmera FPV. Controle por navegador da web: 31 etapas (com imagens)
Vídeo: Ligando a Câmera do Projeto Carro Espião | Curso Arduino 2024, Novembro
Anonim
Image
Image

Vamos construir um carro 4x4 - a direção será semelhante a um tanque - para virar um lado das rodas vai girar com velocidade diferente do outro. No carro será colocada a câmera em um suporte especial onde podemos mudar a posição da câmera. O robô será controlado pelo navegador da web (chrome ou firefox no desktop, ou firefox no celular), no navegador, obteremos o vídeo da câmera (com latência de apenas 200ms), e do navegador poderemos controlar os movimentos do carro e posição da câmera. Para tornar a comunicação mais fácil, usei o sistema app.remoteme.org, também funciona o controle imediato desse tipo de carro, então você não precisa escrever seu próprio código, mas é claro, pode modificar scripts adicionar novas possibilidades etc.

Antes de conectar a energia ao seu PCB, verifique novamente todas as conexões

Etapa 1: algumas informações sobre App.remoteme.org

O sistema tem três partes

  • aplicativo da web - quando você hospeda suas páginas da web de controle e vincula todas as comunicações
  • programa rasbperryPi - programa que envia vídeo, gerencia seus scripts python
  • bibliotecas onde você encontra definições de classes e funções

Remoteme.org é o sistema rápido Você conecta todos os seus dispositivos, você pode hospedar lá Suas páginas da web, ver seus dispositivos conectados. O sistema Remoteme.org foi feito para ajudá-lo a começar a fazer seus projetos, sem se preocupar com comunicações de protocolo, a ideia principal é enviar mensagens binárias entre vários dispositivos como páginas da web, RasbeprryPI, arduino e scripts.

Por outro lado, Remoteme.org dá a Você controle total de seus arquivos, Você pode facilmente modificá-lo escrevendo sua própria funcionalidade

Neste tutorial, mostrarei como fazer alguns projetos incríveis, quase sem escrever nenhum código.

No final deste tutorial, coloquei links úteis que ajudarão você a entender o sistema remoteme.org.

Etapa 2: O que é necessário:

O que é preciso
O que é preciso
O que é preciso
O que é preciso
  • Framboesa PI Zero W
  • Câmera dedicada
  • PWM / Servo Driver Adafruit de 16 canais e 12 bits - interface I2C - PCA9685 ou seu clone
  • Dois servo mecanismos compatíveis com o suporte da câmera
  • Porta-câmera
  • Baterias - No tutorial duas possibilidades de conexão
  • Ponte H TB6612FNG, para controlar a roda de controle
  • Arquivos águia PCB É fácil torná-lo método de transferência térmica DC-DC
  • Módulo Conversor Redutor DC
  • Mala de robô

Etapa 3: conexões

Conexões
Conexões

O servomecanismo de controle Raspberry pi através do módulo PWM e a velocidade do motor pela ponte H que está conectada aos pinos RasbperryPi, a entrada PWM para a ponte H é gerada pelo mesmo módulo que usei para servos (cujas partes menciono acima não são necessários conversores lógicos)

Etapa 4: PCB

PCB
PCB
PCB
PCB

Você pode baixar os arquivos de águia do PCB aqui. Os caminhos são grandes, então é fácil fazê-lo pelo método de transferência térmica

Etapa 5: saídas de PCB

Saídas de PCB
Saídas de PCB
Saídas de PCB
Saídas de PCB
  1. A entrada PWM para motores de acionamento deve ser conectada aos pinos 15 e 16 do módulo PWM (verifique o retângulo verde na imagem do módulo PWM)
  2. Entrada de energia para motores de acionamento (verifique com qual tensão máxima seus motores podem trabalhar)
  3. Power for RasbperryPi e módulo PWM - tem que ser exatamente
  4. Saídas do motor de acionamento (há duas saídas porque iremos emparelhar os motores de acionamento)
  5. Potência dos servomecanismos - também você deve verificar qual voltagem é boa para eles
  6. Jumper sua energia atual da 5ª entrada irá alimentar os motores, então não há necessidade de conectar nada à entrada 2
  7. O jumper, se presente, RasbperryPi será a energia da 3ª entrada - antes de colocar o jumper aqui, verifique se as conexões estão OK - Você não quer queimar seu RPi
  8. Vamos soldar aqui os cabos, já que não precisamos de conversores lógicos

Etapa 6: Como vai funcionar

No RasbperryPi existe um script python que usa duas bibliotecas

  • importar RPi. GPIO como GPIO - para pinos 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (notação BCM) que estão conectados à ponte H
  • import Adafruit_PCA9685 para o módulo PWM

Os pinos Rpi são conectados como segue 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (BCM) e modo de controle da ponte H (para frente, para trás, parada, pausa curta). A ponte H também precisa de dois sinais PWM para que possamos controlar a velocidade ou a rotação do motor. Porque no projeto já temos o controlador PWM (usado para servo) vamos usá-lo também para gerar PWM para a ponte H.

O módulo PWM usa o protocolo de comunicação I2C. Eu usei o trabalho fora da caixa Adafruit_PCA9685. biblioteca

Etapa 7: Montagem do Carro - Rodas

Montagem de Carros - Rodas
Montagem de Carros - Rodas
Montagem de Carros - Rodas
Montagem de Carros - Rodas

Começaremos conectando os motores de acionamento à caixa do carro. Os motores do lado esquerdo / lateral conectam-se juntos e ambos emparelham, conectam-se a algum cabo de alimentação que mais tarde será conectado ao PCB. Nota importante ao conectar as rodas dos motores em cada lado tem que girar na mesma direção.

Etapa 8: Opção 1/2 de alimentação (baterias AA de recarga)

Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)
Opção 1/2 de alimentação (baterias de recarga AA)

Vou escrever duas possibilidades de poder do carro, a primeira é de baterias de recarga 10xAA. Na última imagem desenhei por jumpers vermelhos que devem ser colocados.

Etapa 9: Opção 2/2 de alimentação (baterias Li-Po de 7,2 V)

Opção 2/2 de alimentação (baterias Li-Po de 7,2 V)
Opção 2/2 de alimentação (baterias Li-Po de 7,2 V)
Opção 2/2 de alimentação (baterias Li-Po de 7,2 V)
Opção 2/2 de alimentação (baterias Li-Po de 7,2 V)

E a segunda opção é a bateria 7,2 LI-PO. Neste caso temos 3 tensões - 5v para Rpi e módulo, 6V para servos e diretamente de baterias 7,2 volts para motores de acionamento. Tive que usar dois módulos step down

A opção 2 com LI-PO é melhor:

  • As baterias têm maior capacidade - o carro vai dirigir por mais tempo
  • Tensão maior para motores de tração - o carro vai dirigir mais rápido
  • Menos probabilidade de que depois que os motores de acionamento comecem a localizar, possamos ter uma grande queda de tensão e reinicialização do RPI.

Etapa 10: Solda

De solda
De solda
De solda
De solda
De solda
De solda
De solda
De solda

Coloquei no PCB alguns espaçadores para o módulo PWM. Não há nada para escrever, basta verificar as imagens de como soldar tudo junto

Etapa 11: Câmera

Câmera
Câmera

conectamos a câmera, aqui está escrito como centralizar os servo mecanismos antes de montar no suporte da câmera, mas o caminho mais curto é verificar manualmente a posição de rotação máxima e definir os servos na posição central. Colocamos esses servo-mecanismos centralizados no suporte da câmera na posição central (a câmera está apontando para frente, como na foto)

Etapa 12: juntando as peças dos carros

Juntando peças de carros
Juntando peças de carros
Juntando peças de carros
Juntando peças de carros
Juntando peças de carros
Juntando peças de carros

Para PCB eu fiz uma pequena mesa de plexiglass

Etapa 13: configuração de App.remoteme.org

Configuração de App.remoteme.org
Configuração de App.remoteme.org

Usei o sistema app.remoteme.org gratuito que ajuda você a fazer conexões e já tem scripts de que precisamos

Neste instrutível, vou apenas mostrar passo a passo o que deve ser feito para tornar a condução de automóveis (aqui você encontrará mais detalhes)

  • Inscreva-se em https://app.remoteme.org depois de se inscrever Você será automaticamente conectado
  • abra a guia Token à esquerda, clique em “novo token” forneça algum nome e clique em OK, Acabamos de criar um novo token (imagem na tela)
  • neste exemplo, o valor do token é: ~ 1_ & p @ + BNnZ @ A + x8 (o seu será diferente;))

Etapa 14: configuração do RasbperryPi

Configuração RasbperryPi
Configuração RasbperryPi

no console do putty (aqui, como configurar nosso RPi, ligue a comunicação I2c da câmera)

git clone git: //github.com/remoteme/remoteme.git

cd remoto

python3.5 install.py

  • O Instalator irá nos fazer algumas perguntas para todas as nossas respostas [Sim] e confirmar com [enter]
  • quando a instalação solicitará o token, colamos (shift + insert) o token copiado do aplicativo e Enter
  • o nome por exemplo Rpi
  • deviceId 1 Enter
  • após a instalação - execute o programa

./runme.sh

Etapa 15: Verificando as conexões

Verificando conexões
Verificando conexões

Vamos voltar para

Na guia de dispositivos, veremos nosso RPi conectado (o ícone de link verde significa que RPi está conectado agora)

Etapa 16: Adicionando Python Script

Adicionando Python Script
Adicionando Python Script
Adicionando Python Script
Adicionando Python Script

Agora vamos adicionar o script python, ele já está nos modelos, então não temos que programar nada.

Na guia de dispositivos, abra o menu RasbperryPi e escolha "Adicionar script externo".

Quando uma nova janela aparecer, forneça informações como na imagem acima

Não se esqueça de escolher o modelo "car4wd". Após essas etapas, remoteme.org adicionará script python ao nosso RasbperryPi e o reiniciará

Etapa 17: Verificar se o script Python foi adicionado com sucesso

Verificando se o script Python foi adicionado com sucesso
Verificando se o script Python foi adicionado com sucesso

Na guia de dispositivos, um novo dispositivo de script python deve ser adicionado, e seu deviceId é 2. A página da Web de identificação deste dispositivo enviará mensagens para o carro de controle

Etapa 18: Adicionando página da Web ao Control Car

Adicionando página da Web ao Control Car
Adicionando página da Web ao Control Car

na guia de dispositivos, clique em "Novo" e depois em "Página da Web". Acabamos de adicionar outro dispositivo - página da web que usaremos para controlar nosso carro. E porque usamos o template "car4wdDesktop" na página da web já estão arquivos quase prontos para serem usados

Etapa 19: Configurar o dispositivo WebPage para controlar o carro 1/2

Configure o dispositivo WebPage para controlar o carro 1/2
Configure o dispositivo WebPage para controlar o carro 1/2

Expanda a página da web na guia do dispositivo e clique em index.html e em Abrir

Etapa 20: Configurar o dispositivo WebPage para controlar o carro 2/2

Configure o dispositivo WebPage para controlar o carro 2/2
Configure o dispositivo WebPage para controlar o carro 2/2

A janela aparece, então precisamos fornecer deviceId de nosso script python em nosso caso deviceId é 2. Vamos mudar o lugar mostrado na imagem

Etapa 21: Abra o Centro de Controle do Carro

Abra o Centro de Controle do Carro
Abra o Centro de Controle do Carro
Abra o Centro de Controle do Carro
Abra o Centro de Controle do Carro

Agora é a hora de abrir nossa página e ver como está funcionando. Na guia do dispositivo, clique em index.html e em "Abrir em uma nova guia" Para obter a visualização do vídeo Você deve usar o navegador Chrome ou Firefox. Outros navegadores não suportam totalmente o webRTC

Etapa 22: Configuração da câmera 1/2

Configuração da câmera 1/2
Configuração da câmera 1/2

Quando movemos o mouse na área de vídeo, a câmera deve mudar de posição e deve funcionar exatamente como nos jogos FPS. Provavelmente não se moverá corretamente

Etapa 23: configuração da câmera 2/2

Configuração da câmera 2/2
Configuração da câmera 2/2

Abra o script.js (a guia de dispositivos expande a página da web, clique em script.js e abra) e encontre o lugar que mostrei na tela

no meu caso, a posição central é 560 e 430 e a amplitude de movimentos é para ambos os eixos 200

Você tem que experimentar esses números para obter a posição da câmera no centro e movimentos suaves, se você usou este tutorial apenas copie os valores dados colados

Etapa 24: Condução 1/2

Condução 1/2
Condução 1/2

Se você pressionou a seta para cima no teclado, os medidores devem mudar de posição e o carro deve dirigir. Se você pressionar a seta “para cima” e o carro estiver girando, você terá que adicionar / remover menos em lugares na tela.

Após esta operação, após acertar o carro com seta para cima, o carro com seta para cima deve dirigir para frente e o carro com seta para baixo deve dirigir para trás.

Etapa 25: Condução 2/2

Condução 2/2
Condução 2/2

Agora virando - aperte a seta para a esquerda se o carro estiver virando para a direita. Você tem que virar os cabos (verifique a imagem acima)

Se você soldar estes cabos, você pode alterá-lo em script.js apenas altere a ordem de envio da velocidade dos motores, antes:

pos = putByte (ret, pos, carController.getMotorMode (carController.getRightSideSpeed ())); pos = putByte (ret, pos, Math.abs (carController.getRightSideSpeed () * 255));

pos = putByte (ret, pos, carController.getMotorMode (-carController.getLeftSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getLeftSideSpeed () * 255));

depois de:

pos = putByte (ret, pos, carController.getMotorMode (-carController.getLeftSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getLeftSideSpeed () * 255));

pos = putByte (ret, pos, carController.getMotorMode (carController.getRightSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getRightSideSpeed () * 255));

e agora você tem que brincar com os pontos negativos como um passo antes para fazê-lo funcionar corretamente;). Como você provavelmente notou depois de acertar a seta para cima, o carro não está dirigindo a toda velocidade para fazer o carro se mover mais rápido, apenas solte rapidamente a seta para cima quando estiver na posição máxima e pressione e segure novamente

Etapa 26: Como está funcionando

A página da web está enviando mensagens de mensagem de 9 bytes para o script Python no formato:

  • 1 byte um byte valor inteiro 1
  • 2 bytes inteiros X posição da câmera
  • 2 bytes inteiros posição da câmera Y
  • Modo motor esquerdo inteiro de 1 byte (3 = para trás, 1 = para frente, 2 = parar)
  • Velocidade do motor esquerdo inteiro de 1 byte
  • Modo motor direito inteiro de 1 byte (3 = para trás, 1 = para frente, 2 = parar)
  • Velocidade do motor direito inteiro de 1 byte

o envio da mensagem é feito no arquivo script.js na função "sendNow ()"

em RasbperryPi python.py está recebendo esta mensagem na função "onUserMessage"

Você pode dar uma olhada e brincar um pouco para saber o que está acontecendo.

descrição das funções de classe aqui

Etapa 27: tablet, direção móvel

Tablet, Mobile Steering
Tablet, Mobile Steering

Adicionamos uma nova página da web exatamente como fizemos antes, mas agora escolhemos o modelo "car4wdMobile"

Em seguida, configuramos tudo em script.js como fizemos para a página da web de controle da área de trabalho. O formato da mensagem é exatamente o mesmo, então não precisamos alterar o script python.py.

Etapa 28: Abra a página no celular

Abrir página no celular
Abrir página no celular
Abrir página no celular
Abrir página no celular

Em vez de fazer login na sua conta do celular, basta digitalizar o URL do QR anymous.

detalhes do QR aqui

Se o seu controle móvel funciona quando RPi e o celular estão no mesmo wi-fi, mas não funciona se você usa internet móvel, então você tem que adicionar o servidor de turno, como fazer isso eu escrevi aqui

Etapa 29: Adicionar Turn Server

Adicionando Turn Server
Adicionando Turn Server
Adicionando Turn Server
Adicionando Turn Server
Adicionando Turn Server
Adicionando Turn Server

Às vezes (quando você está atrás de NAT ou algumas configurações de firewall), você não pode conectar seu robô de outra rede, então Seu robô está conectado. Não é um grande problema e então você tem que adicionar o servidor turn.

Eu testei o servidor da empresa XIRSYS (é gratuito para o desenvolvedor) e mostrarei como configurar o servidor de turno usando o sistema XIRSYS

registro:

global.xirsys.net/dashboard/signup

em seguida, clique em "mais" para adicionar o aplicativo

à direita, em "credenciais de curva estática", você tem todos os dados de que precisa. Copie-o para o arquivo webrtc_streamer.conf para fazer isso vá para

expandir os dispositivos RaspberryPi

clique no arquivo webrtc_streamer.conf

clique para abrir

e adicionar informações

turn_server = turn_username =

turn_credential =

após terminar a edição Você deve ter algo parecido com a tela.

em seguida, clique em Salvar e reiniciar seu Rpi, clicando no menu no dispositivo RasbperryPi e escolha reiniciar

Depois que o programa RPi for reiniciado, você poderá ver a visualização do vídeo em seu telefone celular, mesmo se estiver usando a Internet móvel.

Etapa 30: direção móvel

Direção Móvel
Direção Móvel

no círculo 1 colocamos o polegar esquerdo, no 2 direito - não precisa estar exatamente nesses pontos - a página da web definirá a posição zero logo após você tocar a tela e, ao mover seus polegares (direção esquerda, posição direita da câmera), você pode controlar seu carro

Etapa 31: Resumo

Espero que você tenha gostado deste tutorial, como eu escrevi antes neste tutorial, há mais detalhes sobre como ele funciona nos bastidores.

alguns links:

remoteme.org - página inicial do remoteme.org lá Você encontra documentações e tutoriais

FB fanpage - mais novas informações da fanpage do Facebook sobre remoteme.org

Youtube - alguns vídeos do projeto, tutoriais

Saúde, Maciek

Recomendado: