Índice:

Construa seu próprio robô Turtlebot !: 7 etapas
Construa seu próprio robô Turtlebot !: 7 etapas

Vídeo: Construa seu próprio robô Turtlebot !: 7 etapas

Vídeo: Construa seu próprio robô Turtlebot !: 7 etapas
Vídeo: Autonomous Navigation of Turtlebot Using ROS | ROS Tutorials for Beginners | Lesson 9 2024, Junho
Anonim
Construa seu próprio robô Turtlebot!
Construa seu próprio robô Turtlebot!
Construa seu próprio robô Turtlebot!
Construa seu próprio robô Turtlebot!
Construa seu próprio robô Turtlebot!
Construa seu próprio robô Turtlebot!

EDITAR:

Mais informações relacionadas a software e controle estão disponíveis neste link:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

O link direto para o código é:

github.com/MattMgn/foxbot_core

Por que este projeto?

Turtlebot 3 é a plataforma perfeita para se aprofundar em eletrônica, robótica e até mesmo IA! Proponho que você construa seu próprio turtlebot passo a passo com componentes acessíveis sem sacrificar recursos e desempenho. Com uma coisa em mente: guardar o melhor do robô inicial, sua modularidade, simplicidade e a grande quantidade de pacotes para navegação autônoma e IA da comunidade open-source.

Este projeto é uma oportunidade para iniciantes adquirirem noções de eletrônica, mecânica e ciências da computação, e para os mais experientes obterem uma plataforma poderosa para testar e desenvolver algoritmos de inteligência artificial.

O que você descobrirá neste projeto?

Você está prestes a descobrir quais peças mecânicas e eletrônicas essenciais devem ser mantidas do bot original para garantir compatibilidade total.

Todo o processo de construção será detalhado: indo desde a impressão 3D das peças, montagem e os diversos componentes, soldagem e integração da eletrônica até a compilação do código no Arduino. Este instrutível concluirá com um exemplo de 'hello world' para familiarizá-lo com o ROS. Se algo parecer pouco claro, fique à vontade para fazer perguntas!

Suprimentos

Eletrônicos:

1 x computador de placa única para executar ROS, pode ser um Raspberry Pi ou um Jetson Nano, por exemplo

1 x Arduino DUE, você também pode usar um UNO ou um MEGA

1 x Proto-board que se encaixa Arduino DUE pin-out disponível aqui

2 x motores 12 V DC com codificadores (opção de 100 RPM)

1 x driver de motor L298N

Regulador 2 x 5V

1 x bateria (bateria 3S / 4S LiPo, por exemplo)

2 x interruptores ON / OFF

2 x LED

2 resistores de 470kOhm

Conectores JST de 3 x 4 pinos

1 cabo USB (pelo menos um entre o SBC e o Arduino)

Sensores:

1 x sensor de corrente (opcional)

1 x 9 graus de liberdade IMU (opcional)

1 x LIDAR (opcional)

Chassis:

16 placas modulares Turtlebot (que também podem ser impressas em 3D)

2 x rodas de 65 mm de diâmetro (opção de 6 mm de largura)

4 espaçadores de nylon de 30 mm (opcional)

20 x inserções M3 (opcional)

Outros:

Fios

Parafusos e inserções M2.5 e M3

Impressora 3D ou alguém que possa imprimir as peças para você

Uma furadeira manual com um conjunto de brocas como esta

Etapa 1: Descrição

Descrição
Descrição
Descrição
Descrição

Este robô é um acionamento diferencial simples que utiliza 2 rodas montadas diretamente em seu motor e um rodízio que é colocado na parte traseira para evitar que o robô caia. O robô é dividido em duas camadas:

a camada inferior: com o grupo de propulsão (bateria, controlador de motor e motores), e a eletrônica de 'baixo nível': microcontrolador Arduino, regulador de tensão, interruptores …

a camada superior: com o "alto nível" eletrônico, ou seja, o computador de placa única e o LIDAR

Essas camadas são interligadas com peças impressas e parafusos para garantir a robustez da estrutura.

Esquemático eletrônico

O esquema pode parecer um pouco confuso. É um desenho esquemático e não representa todos os fios, conectores e a protoplaca, mas pode ser lido da seguinte forma:

Uma bateria 3S Litihum Ion Polymer com capacidade de 3000mAh alimenta o primeiro circuito, alimenta a placa controladora do motor (L298N) e um primeiro regulador de 5 V para codificadores de motor e Arduino. Este circuito é habilitado por meio de uma chave com um LED que indica seu estado ON / OFF.

A mesma bateria alimenta um segundo circuito, a tensão de entrada é convertida em 5 V para alimentar o computador de placa única. Aqui também, o circuito é habilitado por meio de um interruptor e um LED.

Sensores adicionais, como um LIDAR ou uma câmera, podem ser adicionados diretamente ao Raspberry Pi por meio de uma porta USB ou CSI.

Design mecânico

A estrutura do robô é composta por 16 peças idênticas que formaram 2 camadas quadradas (largura de 28 cm). Os vários orifícios permitem a montagem de peças adicionais onde você precisar e oferecem um design modular completo. Para este projeto, decidi obter as placas TurtleBot3 originais, mas você também pode imprimi-las em 3D, pois seu design é de código aberto.

Etapa 2: Montagem do Bloco do Motor

Conjunto do bloco do motor
Conjunto do bloco do motor
Conjunto do bloco do motor
Conjunto do bloco do motor
Conjunto do bloco do motor
Conjunto do bloco do motor

Preparação motora

O primeiro passo é adicionar fita de espuma de 1 mm de espessura ao redor de cada motor para evitar vibrações e ruídos quando o motor estiver girando.

Peças impressas

O suporte do motor resulta em duas partes que prendem o motor como um torno. 4 parafusos conseguidos para apertar o motor no suporte.

Cada suporte é composto de vários orifícios que hospedam os insertos M3 a serem montados na estrutura. Existem mais furos do que o necessário, os furos extras podem eventualmente ser usados para montar uma peça extra.

Configurações da impressora 3D: todas as peças são impressas com os seguintes parâmetros

  • Bico de 0,4 mm de diâmetro
  • 15% de enchimento de material
  • Camada de 0,2 mm de altura

Roda

As rodas escolhidas são cobertas com borracha para maximizar a adesão e garantir uma condição de rolamento livre de deslizamento. Um parafuso de aperto mantém a roda montada no eixo do motor. O diâmetro da roda deve ser grande o suficiente para cruzar o degrau menor e a irregularidade do solo (essas rodas têm 65 mm de diâmetro).

Fixação

Quando tiver terminado com um bloco de motor, repita as operações anteriores e simplesmente fixe-os na camada com parafusos M3.

Etapa 3: Switches e preparação de cabos

Preparação de interruptores e cabos
Preparação de interruptores e cabos
Preparação de interruptores e cabos
Preparação de interruptores e cabos
Preparação de interruptores e cabos
Preparação de interruptores e cabos

Preparação do cabo do motor

Geralmente, o codificador do motor vem com um cabo que inclui em um lado um conector de 6 pinos que conecta a parte traseira do PCB do codificador e fios desencapados do outro lado.

Você tem a possibilidade de soldá-los diretamente em sua protoplaca ou até mesmo em seu Arduino, mas eu recomendo que você use conectores de pino fêmea e conectores JST-XH. Assim, você pode conectá-los / desconectá-los em sua protoplaca e facilitar sua montagem.

Dicas: você pode adicionar uma trança de manga expansível ao redor dos fios e pedaços de tubo retrátil perto dos conectores, fazendo isso, você obterá um cabo "limpo".

Interruptor e LED

Para habilitar os dois circuitos de alimentação, prepare 2 cabos de LED e interruptores: primeiro solde um resistor de 470kOhm em um dos pinos do LED e, em seguida, solde o LED em um dos pinos do interruptor. Aqui também, você pode usar um pedaço de tubo retrátil para ocultar o resistor dentro. Tenha cuidado para soldar o LED na direção certa! Repita esta operação para obter dois cabos de switch / led.

conjunto

Monte os cabos feitos anteriormente na parte impressa em 3D correspondente. Use uma porca para manter a chave, os LEDs não precisam de cola, basta força o suficiente para encaixá-la no orifício.

Etapa 4: Fiação das placas eletrônicas

Fiação de placas eletrônicas
Fiação de placas eletrônicas
Fiação de placas eletrônicas
Fiação de placas eletrônicas
Fiação de placas eletrônicas
Fiação de placas eletrônicas

Layout das placas

Uma protoplaca ajustando-se ao layout da placa Arduino é usada para reduzir o número de fios. No topo da protoplaca, o L298N é empilhado com cabeçalhos Dupont fêmea (Dupont são cabeçalhos 'semelhantes ao Arduino').

Preparação L298N

Originalmente, a placa L298N não vem com o cabeçalho Dupont macho correspondente, você precisa adicionar uma linha de 9 pinos abaixo da placa. Você precisa realizar 9 furos com uma broca de 1mm de diâmetro em paralelo aos furos existentes, como você pode ver na foto. Em seguida, conecte os pinos correspondentes das 2 linhas com materiais de solda e fios curtos.

Pinagem L298N

O L298N é composto por 2 canais que permitem o controle de velocidade e direção:

direção através de 2 saídas digitais, chamadas IN1, IN2 para o primeiro canal e IN3 e IN4 para o segundo

velocidade através de 1 saídas digitais, chamadas ENA para o primeiro canal e ENB para o segundo

Eu escolhi o seguinte pin-out com o Arduino:

motor esquerdo: IN1 no pino 3, IN2 no pino 4, ENA no pino 2

motor direito: IN3 no pino 5, IN4 no pino 6, ENB no pino 7

Regulador 5V

Mesmo que o l298N normalmente seja capaz de fornecer 5 V, ainda adiciono um pequeno regulador. Ele alimenta o Arduino por meio da porta VIN e dos 2 codificadores nos motores. Você pode pular esta etapa usando diretamente o regulador L298N 5V embutido.

Conectores JST e pinagem do codificador

Use adaptadores de conector JST-XH fêmea de 4 pinos, cada conector é então ligado a:

  • 5V do regulador
  • um terreno
  • duas portas de entrada digital (por exemplo: 34 e 38 para o codificador direito e 26 e 30 para o esquerdo)

Extra I2C

Como você deve ter notado, há um conector JST extra de 4 pinos na protoplaca. É usado para conectar um dispositivo I2C como uma IMU, você pode fazer o mesmo e até adicionar sua própria porta.

Etapa 5: Grupo de motores e Arduino na camada inferior

Grupo de motores e Arduino na camada inferior
Grupo de motores e Arduino na camada inferior
Grupo de motores e Arduino na camada inferior
Grupo de motores e Arduino na camada inferior
Grupo de motores e Arduino na camada inferior
Grupo de motores e Arduino na camada inferior

Fixação de blocos de motor

Uma vez que a camada inferior é montada com as 8 placas do Turtlebot, simplesmente use 4 parafusos M3 diretamente nas inserções para manter os blocos do motor. Em seguida, você pode conectar os fios de alimentação do motor às saídas L298N e os cabos feitos anteriormente aos conectores JST da protoplaca.

Distribuição de poder

A distribuição de energia é simplesmente realizada com um bloco de terminais de barreira. Em um lado da barreira, um cabo com um plugue fêmea XT60 é parafusado para conectar à bateria LiPo. Por outro lado, nossos dois cabos de LED / switch previamente soldados são aparafusados. Assim, cada circuito (Motor e Arduino) pode ser habilitado com sua própria chave e o LED verde correspondente.

Gerenciamento de cabos

Rapidamente você terá que lidar com muitos cabos! Para reduzir o aspecto confuso, você pode usar a 'mesa' previamente impressa em 3D. Sobre a mesa, mantenha suas placas eletrônicas com fita dupla-face, e sob a mesa deixe os fios fluírem livremente.

Manutenção da bateria

Para evitar a ejeção da bateria ao dirigir seu robô, você pode simplesmente usar um elástico de cabelo.

Rodízio

Não é realmente um rodízio, mas uma meia esfera simples fixada com 4 parafusos na camada inferior. É o suficiente para garantir a estabilidade do robô.

Etapa 6: Computador de placa única e sensores na camada superior

Computador de placa única e sensores na camada superior
Computador de placa única e sensores na camada superior
Computador de placa única e sensores na camada superior
Computador de placa única e sensores na camada superior
Computador de placa única e sensores na camada superior
Computador de placa única e sensores na camada superior

Qual computador de placa única escolher?

Não preciso apresentar a vocês o famoso Raspberry Pi, seu número de casos de uso excede em muito o campo da robótica. Mas existe um desafiante muito mais poderoso para o Raspberry Pi que você pode ignorar. Na verdade, o Jetson Nano da Nvidia incorpora uma poderosa placa gráfica de 128 núcleos além de seu processador. Esta placa gráfica em particular foi desenvolvida para acelerar tarefas computacionais caras, como processamento de imagem ou inferência de rede neural.

Para este projeto eu escolhi o Jetson Nano e você pode encontrar a parte 3D correspondente entre os arquivos anexados, mas se você quiser ir com o Raspberry Pi, existem muitos casos para impressão aqui.

Regulador 5V

Qualquer placa que você decidiu trazer em seu robô, você precisa de um regulador de 5V. O Raspberry Pi 4 mais recente requer 1,25A no máximo, mas o Jetson Nano requer até 3A sob estresse, então optei pelo Pololu 5V 6A para ter uma reserva de energia para componentes futuros (sensores, luzes, steppers …), mas qualquer 5V 2A barato deve servir o emprego. O Jetson usa um barril DC de 5,5 mm e o Pi um micro USB, pegue o cabo correspondente e solde-o na saída do regulador.

Layout LIDAR

O LIDAR usado aqui é o LDS-01, existem vários outros LIDAR 2D que podem ser usados como RPLidar A1 / A2 / A3, YDLidar X4 / G4 ou mesmo Hokuyo LIDARs. O único requisito é que ele precisa ser conectado via USB e colocado no centro acima da estrutura. De fato, se o LIDAR não estiver bem centrado, o mapa criado pelo algoritmo SLAM pode deslocar a posição estimada das paredes e obstáculos de sua posição real. Além disso, se qualquer obstáculo do robô cruzar o feixe de laser, isso reduzirá o alcance e o campo de visão.

Montagem LIDAR

O LIDAR é montado em uma parte impressa em 3D que segue seu formato, a própria parte é presa em uma placa retangular (na verdade, em compensado na imagem, mas também pode ser impressa em 3D). Em seguida, uma parte do adaptador permite que o conjunto seja fixado na placa superior do turtlebot com espaçadores de náilon.

Câmera como sensor adicional ou substituição LIDAR

Se você não quer gastar muito dinheiro em um LIDAR (que custa em torno de 100 $), opte por uma câmera: também existem algoritmos SLAM que funcionam apenas com uma câmera RGB monocular. Ambos SBC aceitam câmera USB ou CSI.

Além disso, a câmera permitirá que você execute scripts de visão computacional e detecção de objetos!

conjunto

Antes de fechar o robô, passe os cabos pelos orifícios maiores na placa superior:

  • o cabo correspondente do regulador 5V para o seu SBC
  • o cabo USB da porta de programação do Arduino DUE (o mais próximo do barril DC) para uma porta USB do seu SBC

Em seguida, segure a placa superior na posição com uma dúzia de parafusos. Seu robô está pronto para ser programado, BEM FEITO!

Etapa 7: Faça o movimento

Compile o Arduino

Abra seu Arduino IDE favorito e importe a pasta do projeto chamada own_turtlebot_core, selecione sua placa e a porta correspondente, você pode consultar este excelente tutorial.

Ajuste as configurações do Core

O projeto é composto por dois arquivos, sendo que um precisa ser adaptado ao seu robô. Então, vamos abrir own_turtlebot_config.h e descobrir quais linhas requerem nossa atenção:

#define ARDUINO_DUE // ** COMENTAR ESTA LINHA SE VOCÊ NÃO ESTÁ USANDO UM DEVIDO **

Deve ser usado apenas com o Arduino DUE, caso não comente a linha.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE ESTE VALOR **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** AJUSTE ESTE VALOR ** #define RATE_CONTROLLER_KI 0,00005 // ** AJUSTE ESTE VALOR **

Esses 3 parâmetros correspondem aos ganhos do controlador de taxa usados pelo PID para manter a velocidade desejada. Dependendo da tensão da bateria, da massa do robô, do diâmetro da roda e da engrenagem mecânica do seu motor, você precisará adaptar seus valores. PID é um controlador clássico e você não será detalhado aqui, mas este link deve fornecer entradas suficientes para ajustar o seu próprio.

/ * Definir pinos * /

// motor A (direita) const byte motorRightEncoderPinA = 38; // ** MODIFICAR COM SEU PIN NB ** const byte motorRightEncoderPinB = 34; // ** MODIFICAR COM SEU PIN NB ** const byte enMotorRight = 2; // ** MODIFICAR COM SEU PIN NB ** const byte in1MotorRight = 4; // ** MODIFICAR COM SEU PIN NB ** const byte in2MotorRight = 3; // ** MODIFICAR COM SEU PIN NB ** // motor B (esquerda) const byte motorLeftEncoderPinA = 26; // ** MODIFICAR COM SEU PIN NB ** const byte motorLeftEncoderPinB = 30; // ** MODIFICAR COM SEU PIN NB ** const byte enMotorLeft = 7; // ** MODIFICAR COM SEU PIN NB ** const byte in1MotorLeft = 6; // ** MODIFICAR COM SEU PIN NB ** const byte in2MotorLeft = 5; // ** MODIFICAR COM SEU PIN NB **

Este bloco define a pinagem entre o L298N e o Arduino, simplesmente modifique o número do pino para corresponder ao seu. Quando terminar de usar o arquivo de configuração, compile e envie o código!

Instale e configure ROS

Depois de chegar a esta etapa, as instruções são exatamente as mesmas que as detalhadas no excelente manual do TurtleBot3, você precisa seguir escrupulosamente

muito bem TurtleBot 3 agora é seu e você pode executar todos os pacotes e tutoriais existentes com ROS.

Ok, mas o que é ROS?

ROS significa Robots Operating System, pode parecer bastante complexo no início, mas não é, imagine uma forma de comunicação entre hardware (sensores e atuadores) e software (algoritmos de navegação, controle, visão computacional …). Por exemplo, você pode facilmente trocar seu LIDAR atual por um outro modelo sem interromper sua configuração, porque cada LIDAR publica a mesma mensagem LaserScan. ROS é amplamente utilizado em robótica, Execute seu primeiro exemplo

O equivalente 'hello world' para ROS consiste em teleoperar seu robô através do computador remoto. O que você quer fazer é enviar comandos de velocidade para fazer os motores girarem, os comandos seguem este tubo:

  • um nó turtlebot_teleop, em execução no computador remoto, publica um tópico "/ cmd_vel" incluindo uma mensagem Twist
  • esta mensagem é encaminhada através da rede de mensagens ROS para o SBC
  • um nó serial permite que o "/ cmd_vel" seja recebido no Arduino
  • o Arduino lê a mensagem e define a taxa angular em cada motor para corresponder à velocidade linear e angular desejada do robô

Esta operação é simples e pode ser alcançada executando as linhas de comando listadas acima! Se quiser informações mais detalhadas é só assistir ao vídeo.

[SBC]

roscore

[SBC]

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

[Computador remoto]

exportar TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Ir adiante

Você precisa saber uma última coisa antes de tentar todos os exemplos oficiais, no manual, cada vez que você enfrentar este comando:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

você precisa executar este comando em seu SBC em vez disso:

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

E se você tiver um LIDAR execute o comando associado no seu SBC, no meu caso eu executo um LDS01 com a linha abaixo:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

E isso é tudo, você definitivamente construiu seu próprio turtlebot:) Você está pronto para descobrir os recursos fantásticos do ROS e para codificar algoritmos de visão e aprendizado de máquina.

Recomendado: