Índice:

Um robô 4WD acionado via gamepad USB remoto: 6 etapas
Um robô 4WD acionado via gamepad USB remoto: 6 etapas

Vídeo: Um robô 4WD acionado via gamepad USB remoto: 6 etapas

Vídeo: Um robô 4WD acionado via gamepad USB remoto: 6 etapas
Vídeo: Build a Raspberry Pi RC Tank driven by an 8BitDo Controller - GoBILDA Outlaw Chassis Kit Assembly 2024, Junho
Anonim
Image
Image

Para meu próximo projeto de robótica, fui forçado a arquitetar / projetar minha própria plataforma de robô devido a circunstâncias imprevistas.

O objetivo é que ele seja autônomo, mas primeiro, eu precisava testar suas habilidades básicas de direção, então pensei que seria um projeto paralelo divertido se comportar e ser controlado como se fosse um veículo RC (controlado por rádio), mas em vez disso, use um Gamepad USB.

Os resultados foram tão bons ou melhores do que eu esperava.

A vantagem de seguir a rota do Gamepad USB, com muita programação, é que posso personalizá-lo e adicionar ao que já fiz. Não tenho nenhuma experiência real na construção de um veículo RC, mas imagino que um esteja praticamente preso a qualquer que seja o transmissor RC (joysticks / botões, etc.) e o receptor RC com ele.

Por exemplo, acrescentei algum reconhecimento de que o robô atingiu uma parede, apenas por ter o software detectando altas correntes e baixos valores de velocidade do codificador.

Opcionalmente, pode-se adicionar algumas webcams USB ao robô, dependendo de quantas e de sua localização, pode-se conduzir o robô pela área de estar e para outro cômodo, sentado em outro lugar na frente do computador que tem o Gamepad USB conectado isto.

Este Instructable não será um tutorial verdadeiro, detalhado, completo e passo a passo, mas tentarei fornecer o máximo de detalhes possível.

Suprimentos

Peças sugeridas: A maior parte disso eu obtive da Servo City (Actobotics).

2 - Canais em U de 13,5 , para as laterais da estrutura de base. Os motores são montados nisto. Optei por algo mais curto e meus motores são montados nos cantos, o que dificultou a montagem.

Canais em U de 2 - 12 para a parte frontal e traseira da estrutura de base.

2 - canais U de 15 para os pára-choques, dianteiro e traseiro

2 - 7 (ou era 7,5 ?) Canais em U para as colunas frontais. Isso não é muito crítico, os comprimentos podem variar. Depende da altura das colunas traseiras e em que altura você escolhe colocar o ângulo Canal U que conecta entre eles.

2 - (comprimento?) Canais em U para o membro angular, da frente para trás, conectando as colunas verticais. Este é crítico, porque a Servo City / Actobotics vende painéis ou colchetes em ângulos de 45 graus para essa finalidade, mas você terá que fazer algumas contas / trigonométricas para ter certeza de obter os comprimentos corretos.

2 - (comprimento?) Canais U para servir como pára-choques laterais de nível superior, mais uma vez, estes dependem do que você faz com a base

2 - (comprimento?) Canais em U para servir como pára-choques dianteiro e traseiro de nível superior, idem para o problema acima.

1 - (comprimento?) Canal em U para servir como membro superior, se estende pelas colunas traseiras. Este pode não ser muito crítico, já que você pode montar no topo ou na frente / atrás das colunas verticais.

12 (aprox) canais L ou suportes. Estes servem a múltiplos propósitos, mas essencialmente fornecem integridade / resistência estrutural para os cantos da estrutura de base E as colunas verticais.

4 (+?) Canais planos de 3 a 5 orifícios. Eles também fornecem resistência estrutural ao robô.

A ServoCity vende dois tipos principais de painéis planos de grandes áreas, úteis para usar como skid-pan inferior, ou superior onde sua bateria e / ou controladores iriam, ou mesmo para superfície superior para sensores.

Há um painel de 4 (4,5?) "X 12" e acho que o outro é um painel de 9 (9,5?) "X 12.

É aqui que as coisas ficam interessantes, e podem ser confusas e caras (pequenas partes se somam). Todos os canais, etc., podem ser conectados uns aos outros por meio dessas peças de conexão, das quais existem VÁRIAS. É aqui que lamento não ter uma lista de peças abrangente, detalhada e específica.

E a questão é … você realmente não sabe quais podem ser necessários, ou quantos … porque há muitas maneiras de encaixar essas peças.

Posso listar o que usei:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Os dois seguintes são muito úteis, e gostaria apenas de estocar estes:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Em seguida, estão todos os parafusos (parafusos). Comecei com um pacote de CADA tamanho e passei pela maioria deles. Usei parafusos mais longos onde o tamanho não importava e reservei os mais curtos para onde eles eram NECESSÁRIOS porque nenhum outro comprimento funcionaria.

Por último, você deve obter 1 saco destes:

www.servocity.com/6-32-nylock-nuts-pack

Não usei muitos, mas eles (eu acho) são essenciais para garantir que seus motores não vibrem soltos da estrutura ao longo do tempo. Apenas dois funcionariam por motor, devido ao canal U

Você precisará de pelo menos 4 deles, você pode obter um extra ou mais no caso de causar danos a um (acredite em mim, você pode estar colocando / retirando os motores algumas vezes):

www.servocity.com/heavy-duty-clamping-shaf…

Normalmente, os eixos dos motores têm 6 mm e os eixos têm 1/4 (0,25 pol.).

Eu pegaria alguns parafusos pretos, supostamente mais fortes, e os usaria para as braçadeiras acima, e NÃO usaria os parafusos que vêm com as braçadeiras:

(Acho que são esses):

Rolamentos de 4 - 1/4 "(0,25") de diâmetro

1 - saco de espaçadores pretos de 1/4"

4 - Fixação de D-Hubs

www.servocity.com/0-770-clamping-d-hubs

4 - Eixos D (# 6340621.375 "(1-3 / 8")

4 - rodas reforçadas de 6"

www.servocity.com/6-heavy-duty-wheel

Observe que eu adoro essas rodas, mas elas têm uma borda de borracha dura. Eles parecem se dar bem em pisos duros e carpetes, e provavelmente em pisos de concreto duro. Não vai bem na grama, areia, etc.

TAMBÉM, eles tendem a manchar seu tapete !!!

4 - motores:

www.servocity.com/motors-actuators/gear-mo…

Fui com 223 RPM, boa velocidade máxima em ambientes fechados, também pude mover meu robô (pesado com 2 baterias SLA 12V) com bastante facilidade em câmera lenta.

2 - encoders de motor para os motores. (Roboclaw da Servo City só lida com 2 codificadores)

1 - Controlador de motor Roboclaw 2X45A, certifique-se de obter aquele com os blocos de terminais verdes, não os pinos…. bem … cada um tem suas vantagens. Retrospectiva.. Eu posso ter conseguido os pinos.

Acho que é isso da cidade de Servo.

SparkFun vende Arduino Uno (foi o que eu usei), e também Redboard Artemis como seu gerenciador de drives.

Você vai querer um Raspberry Pi 3 (ou 4?) Como seu "cérebro" de alto nível e interface para você.

Você precisará de fiação, interruptores, fusíveis e um diodo "flyback" muito robusto.

Usei uma bateria SLA de ciclo profundo Duracell 12V 14AH, mas você pode usar qualquer outra.

AVISO! O design deste robô (ALTO e LARGO, mas CURTO), assume uma espécie de centro de gravidade pesado, como uma bateria SLA forneceria. Pode não funcionar bem com esses outros tipos de baterias de tecnologia mais recente. LiPo, Leão, etc. Pode facilmente tombar.

Da Pololu consegui alguns adaptadores de plugue barril, para que pudesse alimentar o Arduino e / ou o Redboard de forma independente, mesmo que fossem conectados ao Raspberry via USB, porque não queria depender da energia do Raspberry. (Especialmente montagem de câmeras, sensores, etc.)

Você precisará de um regulador de voltagem abaixador de 12 a 5 V, mínimo de 5 A (?) Para o Raspberry. Os outros podem lidar com qualquer coisa entre 7 a 15 V diretamente para a bateria SLA.

Isso é tudo em partes.

O que eu NÃO faria - engrenagem chanfrada de 90 graus.

Novamente, há muitos vídeos em minha lista de reprodução do youtube de Robótica detalhando a maioria dos itens acima.

Etapa 1: construção

Sinceramente, todas as minhas etapas de construção já estão na forma de youtubes. Você pode ver isso na minha lista de reprodução de Robótica, começando em "Wallace Robot 4". Os anteriores (Wallace II, Wallace III) também possuem um bom material

www.youtube.com/playlist?list=PLNKa8O7lX-w…

Etapa 2: teste o Roboclaw, os motores e os codificadores

Os fabricantes do Roboclaw (BasicMicro) têm um aplicativo do Windows que você pode usar para se certificar de que conectou os motores e codificadores corretamente ao Roboclaw. Você conectará motores do mesmo lado em paralelo ao Roboclaw. Você pode escolher usar os fios do encoder, apenas nos motores traseiros, ou nos motores dianteiros, ou talvez ainda melhor - DIAGONALMENTE.

O motivo da minha sugestão tem a ver com (mais tarde) verificar se há um robô preso. Ter um status diagonal de se as rodas dianteiras / traseiras estão / não estão girando pode ser melhor do que apenas a dianteira ou apenas a traseira.

NOTA: o que eu NÃO fiz é usar o Arduino para conectar também (via pinos GPIO) aos codificadores - se você fizesse isso, você poderia fazer o Roboclaw lidar com 2 codificadores e, em seguida, fazer com que o Arduino lidasse com os outros dois, e apenas consulte o Roboclaw para seus dois valores de codificador (e velocidades).

NOTA: Eu usei o aplicativo BasicMicro para pré-configurar o Roboclaw para Rampa para cima / Rampa para baixo. Isso é bom para proteger o hardware e os componentes eletrônicos. Há um vídeo sobre isso na minha lista de reprodução de Robótica.

Quase me esqueci: também comprei alguns cabos conectores de bala que vão entre os cabos do motor e o Roboclaw. NOTA: se você fizer isso, notará que o comprimento total do cabo é MUITO LONGO. Mas eu não queria ter que cortar nenhum se eu não precisasse. Eu (nas etapas posteriores) encontrei problemas de comunicação com o USB entre o Raspberry e o Arduino, provavelmente devido ao ruído EMI.. mas tenho contornado isso com software.

Se isso se tornar um problema, você pode cortar os fios - você também pode comprar blindagem de metal (da Amazon, 1 de diâmetro).

Última coisa: isso eu ainda tenho que fazer --- configurar ou ajustar automaticamente o Roboclaw (usando codificadores) para que os motores do lado esquerdo e direito se movam na mesma velocidade e o robô siga em frente.

O meu se curva ligeiramente em cerca de 3,6 metros, mas não o suficiente para que eu sentisse a necessidade de fazer algo a respeito.

Etapa 3: Adicionando e programando o Arduino

Você precisará do plugue cilíndrico e de alguns fios, além de um cabo USB. Certifique-se de obter o correto para o conector do Arduino.

Você precisará baixar o IDE do Arduino.

Aqui no Github está o esboço mais recente que lida com a condução do robô:

github.com/elicorrales/wallace.robot.ardui…

Você conectará o Arduino ao seu computador executando o IDE e, com base em como o esboço foi escrito, você usaria os pinos 10 e 11 no Arduino para comunicações seriais (software serial) com o Roboclaw.

Desenvolvi um protocolo de comunicação simples entre o Raspberry Pi e o Arduino.

É baseado em caracteres ASCII, o que torna mais fácil depurar e testar apenas usando a janela "monitor serial" do IDE do Arduino.

Os comandos começam no número "0" (zero) e vão aumentando conforme necessário

Os comandos que começam nos "20" s são comandos Roboclaw diretos e os que estão abaixo desse número são comandos estritamente relacionados ao Arduino.

Devido ao ruído EMI, melhorei a string de comando para incluir uma soma de verificação.

Portanto, qualquer string incluirá:

# número de tokens na string incluindo este

a soma de verificação

Exemplo, digamos que você queira que o Arduino responda com seu menu de comandos:

4 0 12 16

"4" é quatro tokens em sequência.

"0" é o comando do MENU.

"12" é o número aleatório que escolhi.

"16" é a soma de 4 + 0 + 12.

Esse mesmo comando do MENU pode ser diferente:

4 0 20 24

Como escolhi um número aleatório diferente, a soma de verificação também é diferente.

Exemplo, digamos que você queira avançar a 100% da velocidade:

5 29 0 134 100

"5" cinco tokens

"29" o comando FORWARD

"0" o número aleatório

"134" a soma de verificação

"100" o parâmetro 1 (a velocidade neste caso)

Se o Arduino não puder verificar a string de entrada, ele simplesmente a descarta / ignora, sem resposta.

Se o Arduino não receber um comando de movimento seguinte com X milissegundos, ele envia um motor STOP para o Roboclaw.

O Arduino é inicializado e começa a enviar um status automático para a porta USB … a menos que seja instruído a parar de fazer isso.

Neste ponto, você deve estar pronto para tentar controlar o Roboclaw e observar os motores girando, apenas usando o "Monitor Serial" no IDE.

Etapa 4: adicionar e programar o Raspberry Pi (node.js)

Novamente, se você der uma olhada na minha lista de reprodução de Robótica, desde o início, repassei todas as etapas para colocar o Raspberry em funcionamento.

A única coisa que devo ter esquecido é que você precisará de um regulador de 5 V e, de alguma forma, construir, cortar / modificar um cabo USB para ele ou alimentar o Raspberry de outra maneira.

Aqui no Github está tudo o que você precisa no Raspberry para se comunicar com o Arduino via USB.

github.com/elicorrales/wallace.robot.raspb…

Existem até scripts de teste.

Você pode dar uma olhada no código do servidor node.js e ver como o Raspberry converte as instruções numéricas concisas em strings de url do tipo REST. Você pode usar "curl" para enviar comandos de teste.

Exemplo:

seu endereço IP RP3: 8084 / arduino / api / forward / 50

fará com que os motores girem momentaneamente as rodas para frente.

Se você colocar isso em um loop de script de shell, verá que as rodas continuam girando.

O código node.js (server.js) inclui um recurso de reconexão caso as comunicações seriais sejam perdidas para o Arduino. Você pode testar isso apenas desconectando o Arduino do Raspberry e reconectando-o.

Certifique-se de combinar a taxa de transmissão serial entre os dois.

Por causa do Arduino descartando pacotes de dados ruins e porque no nível do node.js e no nível do javascript do navegador, tudo é codificado para enviar muitos comandos de "unidade", fui capaz de executar até 2.000.000 baud (2 Mbps).

Se os scripts de teste forem executados e as rodas girarem, você estará pronto para a próxima etapa.

Etapa 5: Etapa final - Programação / uso do cliente da página da Web

Incluídos no link do Github para a parte do Raspberry de tudo isso, estão os arquivos do cliente.

index.html. index.js. p5.min.js.

Eles controlam o Gamepad USB por meio da API do Gamepad (baseada no navegador) e você deve ver os vários botões e controles deslizantes também disponíveis na página da web.

O código javascript consulta (enquetes) os valores dos eixos X e Y de um dos joysticks. (Dependendo de quais joysticks / gamepad você possui, pode ser necessário ajustar o código). Ele pesquisa muito rapidamente e dispara todos esses valores para o servidor node.js que está escutando em 8084.

Os valores brutos dos eixos X e Y dos joysticks estão entre 0 e 1.

Mas a função da biblioteca do controlador de motor Roboclaw sendo usada no Arduino para acionar os motores, espera um valor entre -100 a 0 (para trás) ou (0 a 100) para a frente.

Então … esse é o propósito de incluir o p5.min.js. Acontece que tem esta função map () muito agradável e conveniente, onde você dá o valor bruto, seu intervalo bruto (atual) e o novo intervalo desejado. E converte o valor bruto no valor no novo intervalo mapeado.

Outro ponto: na velocidade de 100, o robô pode ser muito complicado. Eu estava constantemente correndo para algo. Mas mesmo quando você fica melhor nisso, ainda é sensível ao girar para a esquerda ou para a direita.

Algo para você adicionar seria semelhante ao controle deslizante Velocidade máxima atual na página da web. Esse controle deslizante determina qual é o valor mais alto ou máximo para o qual você mapeará os joysticks Xs e Ys.

Exemplo:

Digamos que você esteja mapeando 0 -> 1 a 0 -> 100. Quando você empurra o joystick até o ponto final, você está em 100. Sensível. Pode ser muito rápido.

Mas, se você deslizar o controle deslizante Velocidade máxima um pouco para trás, agora você está mapeando 0 -> 1 a 0 -> 80 ou 70.

Isso significa que você tem mais margem de manobra para mover seu joystick sem uma grande mudança na velocidade de envio para o node.js (e para o Arduino).

E a adição que você pode fazer é separar os Xs (girar para a esquerda ou direita) dos Ys (para frente ou para trás) em suas próprias velocidades máximas disponíveis.

Assim, você poderia deixar Ys em 0 a 100, 0 a -100 para movimento linear rápido, mas diminuir a velocidade máxima de Xs para movimento rotacional mais controlado. O melhor dos dois mundos.

Etapa 6: opcional: impulsionar o robô com eventos de arrastar e / ou tocar do mouse

Se você chegou até aqui, sabe que as camadas de software começando no navegador e aprofundando no Javascript e no servidor Raspberry node.js, finalmente no arduino, estão convertendo as coordenadas X e Y do joystick do Gamepad no " comandos forward "(ou" backward ", etc) (e seu valor de velocidade).

Além disso, você sabe que, embora os Xs e Ys dos joysticks sejam de 1 negativo a zero até mais 1, eles devem ser convertidos entre zero e 100. Bem, o máximo depende da configuração de velocidade máxima na página da web.

Então … a única coisa a fazer para usar o mouse, ou eventos de toque (como em um smartphone), é capturar esses eventos, pegue os Xs e Ys.

MAS ---- aqueles Xs e Ys NÃO estão entre 1 negativo e 1. Eles começam 0 e aumentam positivamente, porque são essencialmente os pixels ou coordenadas de tela relativas de algum elemento HTML (como um painel de bootstrap) ou uma tela.

Então, novamente, a função "map ()" da biblioteca Js do P5 é muito útil para mapear novamente o que precisamos.

Refatorei o código para ter duas páginas da web diferentes, uma para desktop usando o Gamepad, outra para celular, usando os eventos de toque.

Além disso, uma vez que os Xs e Ys são mapeados novamente, eles são alimentados na mesma cadeia de código, etc, assim como os Xs e Ys do Gamepad.

Recomendado: