Índice:
- Etapa 1: montagem do veículo
- Etapa 2: montagem de motores
- Etapa 3: Criando Desenho de Bloco Vivado
- Etapa 4: comunicação com o LiDAR
- Etapa 5: Preencher a grade com obstáculos
- Etapa 6: comunicação com motores
- Etapa 7: Planejamento do Caminho
Vídeo: Veículo autônomo: 7 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Este projeto é um robô de navegação autônoma que tenta alcançar sua posição final evitando obstáculos em seu caminho. O robô será equipado com um sensor LiDAR que será usado para detectar objetos ao seu redor. Conforme os objetos são detectados e o robô se move, um mapa em tempo real é atualizado. O mapa será usado para salvar a localização dos obstáculos que foram identificados. Dessa forma, o robô não tentará novamente um caminho com falha para a posição de gol. Em vez disso, tentará caminhos que não têm obstáculos ou caminhos que ainda não foram verificados quanto a obstáculos.
O robô se moverá por duas rodas acionadas por motor DC e duas rodas de rodízio. Os motores serão fixados na parte inferior de uma plataforma circular. Os motores serão controlados por dois drivers de motor. Os drivers do motor receberão comandos PWM do processador Zynq. Todos os codificadores em cada motor podem ser usados para rastrear a posição e a orientação dos veículos. Todo o sistema será alimentado por uma bateria LiPo.
Etapa 1: montagem do veículo
O robô é movido por dois motores acoplados às rodas laterais e, adicionalmente, é suportado por duas rodas giratórias, uma na frente e outra atrás. A plataforma e os suportes do motor foram feitos de chapa de alumínio. Um cubo do motor foi comprado para prender as rodas ao motor. No entanto, um acoplador intermediário personalizado precisava ser feito porque o padrão de orifícios do cubo era diferente do padrão de orifícios da roda.
O motor selecionado foi um motor Port Escap 12V DC com codificadores integrados. Este motor pode ser adquirido no ebay por um preço bastante razoável (ver Lista de Materiais). Pesquise as palavras-chave “12V Escap 16 Coreless Gear DC Motor with Encoders” no ebay para encontrar o motor. Normalmente, há uma boa quantidade de vendedores para escolher. As especificações e pinagens dos motores são mostradas nos diagramas abaixo.
A montagem do robô começou com um modelo CAD do chassi. O modelo abaixo mostra a vista superior do perfil de forma 2D projetado para o chassi.
Sugere-se que o chassi seja projetado como um perfil 2D para que possa ser facilmente fabricado. Cortamos uma folha de alumínio de 12”X12” no formato do chassi usando um cortador de jato de água. A plataforma do chassi também pode ser cortada com uma serra de fita.
Etapa 2: montagem de motores
A próxima etapa é fazer os suportes do motor. É sugerido que os suportes do motor sejam feitos de chapa de alumínio de 90 graus. Usando esta peça, o motor pode ser fixado em cantilever em uma face da folha de metal usando os dois
Os furos M2 do motor e a outra face podem ser aparafusados na plataforma. Os orifícios devem ser perfurados no suporte do motor para que os parafusos possam ser usados para fixar o motor no suporte do motor e o suporte do motor na plataforma. O suporte do motor pode ser visto na figura acima.
Em seguida, o cubo do motor Pololu (consulte a lista de materiais) é colocado no eixo do motor e apertado com o parafuso de ajuste e a chave Allen fornecidos. O padrão de orifícios do cubo do motor Pololu não corresponde ao padrão de orifícios da roda VEX, portanto, um acoplador intermediário personalizado deve ser feito. Sugere-se que a sucata de chapa de alumínio usada para fazer a plataforma do chassi seja usada para fazer o acoplador. O padrão de orifícios e as dimensões deste par são mostrados na figura abaixo. O diâmetro externo e a forma (não precisa ser um círculo) do acoplador de alumínio personalizado não importam, desde que todos os furos se encaixem na peça.
Etapa 3: Criando Desenho de Bloco Vivado
- Comece criando um novo projeto Vivado e selecione o Zybo Zynq 7000 Z010 como o dispositivo de destino.
- Em seguida, clique em criar novo design de bloco e adicione o IP Zynq. Clique duas vezes no IP do Zynq e importe as configurações XPS fornecidas para o Zynq. Em seguida, habilite UART0 com MIO 10..11 na guia MIO configurations, e também certifique-se de que Timer 0 e Watchdog timer estejam habilitados.
- Adicione dois AXI GPIOS ao design do bloco. Para GPIO 0, ative o canal duplo e defina ambos para todas as saídas. Defina a largura do GPIO para o canal 1 em 4 bits e para o canal 2 em 12 bits, esses canais serão usados para definir a direção do motor e enviar a quantidade de tiques que o codificador mede para o processador. Para GPIO 1, defina apenas um canal para todas as entradas com uma largura de canal de 4 bits. Isso será usado para receber dados dos codificadores. Torne todas as portas GPIO externas.
- Em seguida, adicione dois temporizadores AXI. Torne as portas pwm0 em ambos os temporizadores externas. Esses serão os pwms que controlam a velocidade de rotação dos motores.
- Por fim, execute a automação de bloco e automação de conexão. Verifique se o design do bloco que você possui corresponde ao fornecido.
Etapa 4: comunicação com o LiDAR
Este LiDAR usa um protocolo SCIP 2.0 para se comunicar por meio de UART, o arquivo anexado descreve todo o protocolo.
Para nos comunicarmos com o LiDAR, usaremos o UART0. O LiDAR retorna 682 pontos de dados, cada um representando a distância de um objeto naquele ângulo. O LiDAR faz a varredura no sentido anti-horário de -30 graus a 210 graus com um passo de 0,351 graus.
- Toda a comunicação com o LiDAR é feita com caracteres ASCI, consulte o protocolo SCIP para o formato usado. Começamos enviando o comando QT para ligar o LiDAR. Em seguida, enviamos o comando GS várias vezes solicitando 18 pontos de dados de cada vez para se encaixar no UARTS de 64 bytes FIFO. Os dados retornados do LiDAR são então analisados e armazenados no array global SCANdata.
- Cada ponto de dados armazenado é 2 bytes de dados codificados. Passar esses dados para o decodificador retornará uma distância em milímetros.
No arquivo main_av.c você encontrará as seguintes funções para se comunicar com o LiDAR
sendLIDARcmd (comando)
- Isso enviará a string de entrada para o LiDAR por meio do UART0
recvLIDARdata ()
- Receberá dados após o envio de um comando para o LiDAR e armazenará os dados no RECBuffer
requestDistanceData ()
- Esta função enviará uma série de comandos para recuperar todos os 682 pontos de dados. Depois que cada conjunto de 18 pontos de dados é recebido, parseLIDARinput () é chamado para analisar os dados e armazenar incrementalmente os pontos de dados em SCANdata.
Etapa 5: Preencher a grade com obstáculos
O GRID armazenado é uma matriz 2D com cada valor de índice representando um local. Os dados armazenados em cada índice são 0 ou 1, Nenhum obstáculo e obstáculo, respectivamente. A distância quadrada em milímetros que cada índice representa pode ser alterada com a definição GRID_SCALE no arquivo vehicle.h. O tamanho da matriz 2D também pode ser variado para permitir que o veículo varra uma área maior, modificando a definição GRID_SIZE.
Depois que um novo conjunto de dados de distância é varrido do LiDAR, updateGrid () é chamado. Isso irá iterar por meio de cada ponto de dados armazenado na matriz SCANdata para determinar quais índices na grade têm obstáculos. Usando a orientação atual do veículo, podemos determinar o ângulo que corresponde a cada ponto de dados. Para determinar onde está um obstáculo, basta multiplicar a distância correspondente por cos / sin do ângulo. Adicionar esses dois valores às posições xey atuais dos veículos retornará o índice na grade do obstáculo. Dividir a distância retornada por esta operação pelo GRID_SCALE nos permitirá variar o quão grande é a distância quadrada de cada índice.
As imagens acima mostram o ambiente atual dos veículos e a grade resultante.
Etapa 6: comunicação com motores
Para se comunicar com os motores, começamos inicializando os GPIOs para controlar a direção em que o motor gira. Em seguida, escrever diretamente para o endereço base dos PWMs no temporizador AXI nos permite definir coisas como o período e o ciclo de trabalho que controlam diretamente o velocidade em que o motor gira.
Etapa 7: Planejamento do Caminho
Para ser implementado em um futuro próximo.
Usando a grade e a funcionalidade do motor descritas anteriormente, é muito fácil implementar algoritmos como A *. Conforme o veículo se move, ele continuará a examinar a área circundante e determinar se o caminho em que está ainda é válido
Recomendado:
Veículo de efeito solo super rápido RC (Ekranoplan): 5 etapas (com fotos)
Veículo de efeito solo super rápido RC (Ekranoplan): Você sabe como, durante o pouso, os aviões pairam alguns metros acima do solo por um tempo antes de suas rodas atingirem a pista? Isso não é apenas para dar aos passageiros uma aterrissagem suave, mas também é o resultado natural do efeito de solo, no qual
Modelo de veículo RC inclinado: 21 etapas (com fotos)
Veículo Modelo RC Inclinável: Este modelo é um veículo inclinável 1/10 com duas rodas dianteiras e uma de tração traseira; foi derivado de um modelo elétrico RC Arrma Vortex 1/10 que utilizou o chassi de alumínio e retirou toda a traseira onde havia colocado o motor elétrico e seu tr
Veículo robótico autônomo para iniciantes com prevenção de colisão: 7 etapas
Veículo robótico autônomo para iniciantes com prevenção de colisão: Olá! Bem-vindo ao meu Instructable para iniciantes sobre como fazer seu próprio veículo robótico autônomo com prevenção de colisão e navegação GPS. Acima está um vídeo do YouTube demonstrando o robô. É um modelo para demonstrar como uma autonomia realou
TripComputer - GPS Trip Computer & Módulo meteorológico para seu veículo: 11 etapas (com fotos)
TripComputer - GPS Trip Computer & Módulo meteorológico para seu veículo: Um projeto cool raspberry pi que usa o módulo GPS breakout e 2 pequenos visores Digole para ter um computador de navegação em seu painel
KEVIN o veículo totalmente autônomo: 17 etapas (com fotos)
KEVIN, o veículo totalmente autônomo: Este é Kevin. É um carro controlado por rádio com capacidade de realizar uma condução totalmente autônoma. Meu primeiro objetivo era fazer um veículo autônomo controlado pelo Arduino. Então comprei um chassi chinês barato. Mas foi terrível porque não consegui anexar nenhum c