Tabla de contenido:

¡Construye tu propio robot Turtlebot !: 7 pasos
¡Construye tu propio robot Turtlebot !: 7 pasos

Video: ¡Construye tu propio robot Turtlebot !: 7 pasos

Video: ¡Construye tu propio robot Turtlebot !: 7 pasos
Video: Solar Robot 14 in 1 assembly of the Body ( slow ) 2024, Mes de julio
Anonim
¡Construye tu propio robot Turtlebot!
¡Construye tu propio robot Turtlebot!
¡Construye tu propio robot Turtlebot!
¡Construye tu propio robot Turtlebot!
¡Construye tu propio robot Turtlebot!
¡Construye tu propio robot Turtlebot!

EDITAR:

Más información relacionada con el software y el control está disponible en este enlace:

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

El enlace directo al código es:

github.com/MattMgn/foxbot_core

¿Por qué este proyecto?

Turtlebot 3 es la plataforma perfecta para profundizar en la electrónica, la robótica e incluso la IA. Te propongo que construyas tu propio turtlebot paso a paso con componentes asequibles sin sacrificar las características y el rendimiento. Con una cosa en mente: mantener lo mejor del robot inicial, su modularidad, simplicidad y la gran cantidad de paquetes para navegación autónoma e IA de la comunidad de código abierto.

Este proyecto es una oportunidad para que los principiantes adquieran nociones de electrónica, mecánica y ciencias de la computación, y para los más experimentados de obtener una plataforma poderosa para probar y desarrollar algoritmos de inteligencia artificial.

¿Qué descubrirás en este proyecto?

Está a punto de descubrir qué piezas mecánicas y electrónicas esenciales deben mantenerse del bot original para garantizar una compatibilidad total.

Se detallará todo el proceso de construcción: desde la impresión de piezas en 3D, el ensamblaje y los diversos componentes, la soldadura y la integración de la electrónica hasta, finalmente, la compilación del código en Arduino. Este instructivo concluirá con un ejemplo de 'hola mundo' para familiarizarlo con ROS. Si algo parece poco claro, ¡no dude en hacer una pregunta!

Suministros

Electrónica:

1 x computadora de placa única para ejecutar ROS, podría ser una Raspberry Pi o un Jetson Nano, por ejemplo

1 x Arduino DUE, también puede usar UNO o MEGA

1 x Proto-placa que se adapta al pin-out de Arduino DUE disponible aquí

2 motores de 12 V CC con codificadores (opción de 100 RPM)

1 x controlador de motor L298N

Regulador de 2 x 5V

1 x batería (batería LiPo 3S / 4S, por ejemplo)

2 x interruptores de encendido / apagado

2 x LED

2 resistencias de 470 kOhmios

Conectores JST de 3 x 4 pines

1 x cable USB (al menos uno entre el SBC y el Arduino)

Sensores:

1 x sensor de corriente (opcional)

1 x IMU de 9 grados de libertad (opcional)

1 x LIDAR (opcional)

Chasis:

16 placas modulares Turtlebot (que también se pueden imprimir en 3D)

2 x ruedas de 65 mm de diámetro (opción de 6 mm de ancho)

4 x espaciadores de nailon de 30 mm (opcional)

20 x inserciones M3 (opcional)

Otros:

Alambres

Tornillos e inserciones M2.5 y M3

Impresora 3D o alguien que pueda imprimir las piezas por usted.

Un taladro de mano con un juego de brocas como esta

Paso 1: descripción

Descripción
Descripción
Descripción
Descripción

Este robot es un accionamiento diferencial simple que utiliza 2 ruedas montadas directamente en su motor y una rueda giratoria que se coloca en la parte trasera para evitar que el robot se caiga. El robot se divide en dos capas:

la capa inferior: con el grupo de propulsión (batería, controlador de motor y motores), y la electrónica de 'bajo nivel': microcontrolador Arduino, regulador de voltaje, interruptores …

la capa superior: con la electrónica de 'alto nivel', a saber, la computadora de placa única y el LIDAR

Esas capas están unidas con piezas impresas y tornillos para garantizar la robustez de la estructura.

Esquema electronico

El esquema puede parecer un poco desordenado. Es un dibujo esquemático y no representa todos los cables, conectores y la proto-placa, pero se puede leer de la siguiente manera:

Una batería de polímero de iones de litio 3S con capacidad de 3000 mAh alimenta el primer circuito, alimenta tanto la placa controladora del motor (L298N) como un primer regulador de 5 V para codificadores de motor y Arduino. Este circuito se habilita mediante un interruptor con un LED que indica su estado ON / OFF.

La misma batería alimenta un segundo circuito, el voltaje de entrada se convierte a 5 V para alimentar la computadora de placa única. Aquí también, el circuito se habilita a través de un interruptor y un LED.

Luego, se pueden agregar sensores adicionales como un LIDAR o una cámara directamente en la Raspberry Pi a través del puerto USB o CSI.

Diseño mecanico

El bastidor del robot está compuesto por 16 partes idénticas que formaron 2 capas cuadradas (28 cm de ancho). Los numerosos orificios permiten montar piezas adicionales donde lo necesite y ofrecen un diseño modular completo. Para este proyecto, decidí conseguir las placas TurtleBot3 originales, pero también puedes imprimirlas en 3D ya que su diseño es de código abierto.

Paso 2: Ensamblaje del bloque de motor

Ensamblaje del bloque de motor
Ensamblaje del bloque de motor
Ensamblaje del bloque de motor
Ensamblaje del bloque de motor
Ensamblaje del bloque de motor
Ensamblaje del bloque de motor

Preparación del motor

El primer paso es agregar cinta de espuma de 1 mm de espesor alrededor de cada motor para evitar vibraciones y ruido cuando el motor gira.

Partes impresas

El soporte del motor tiene como resultado dos partes que sujetan el motor como un tornillo de banco. 4 tornillos logrados para apretar el motor en el soporte.

Cada soporte está compuesto por varios orificios que albergan inserciones M3 para ser montadas en la estructura. Hay más orificios de los que realmente se necesitan, los orificios adicionales podrían eventualmente usarse para montar piezas adicionales.

Configuración de la impresora 3D: todas las piezas se imprimen con los siguientes parámetros

  • Boquilla de 0,4 mm de diámetro
  • 15% de relleno de material
  • Capa de 0,2 mm de altura

Rueda

Las ruedas elegidas están cubiertas con caucho para maximizar la adherencia y garantizar una condición de rodadura sin deslizamientos. Un tornillo de sujeción mantiene la rueda montada en el eje del motor. El diámetro de la rueda debe ser lo suficientemente grande como para cruzar un escalón menor y una irregularidad del suelo (esas ruedas tienen un diámetro de 65 mm).

Fijación

Cuando haya terminado con un bloque de motor, repita las operaciones anteriores y luego simplemente fíjelas en la capa con tornillos M3.

Paso 3: Interruptores y preparación de cables

Preparación de interruptores y cables
Preparación de interruptores y cables
Preparación de interruptores y cables
Preparación de interruptores y cables
Preparación de interruptores y cables
Preparación de interruptores y cables

Preparación del cable de motor

Generalmente, el motor-codificador viene con un cable que incluye en un lado un conector de 6 pines que conecta la parte posterior de la PCB del codificador y cables desnudos en el otro lado.

Tiene la posibilidad de soldarlos directamente en su proto-placa o incluso en su Arduino, pero le recomiendo que utilice conectores hembra y conectores JST-XH. Por lo tanto, puede enchufarlos / desenchufarlos en su proto-placa y facilitar su montaje.

Consejos: puede agregar una trenza de manga expandible alrededor de sus cables y trozos de tubo retráctil cerca de los conectores, al hacerlo obtendrá un cable 'limpio'.

Interruptor y LED

Para habilitar los dos circuitos de alimentación, prepare 2 cables de interruptores y LED: primero suelde una resistencia de 470 kOhmios en uno de los pines del LED, luego suelde el LED en uno de los pines del interruptor. Aquí también, puede usar un trozo de tubo retráctil para ocultar la resistencia en el interior. ¡Tenga cuidado de soldar el LED en la dirección correcta! Repita esta operación para obtener dos cables de interruptor / led.

Montaje

Ensamble los cables fabricados anteriormente en la pieza impresa en 3D correspondiente. Use una tuerca para mantener el interruptor, los LED no requieren pegamento, solo fuerce lo suficiente para que encaje en el orificio.

Paso 4: Cableado de placas electrónicas

Cableado de placas electrónicas
Cableado de placas electrónicas
Cableado de placas electrónicas
Cableado de placas electrónicas
Cableado de placas electrónicas
Cableado de placas electrónicas

Disposición de los tableros

Se utiliza una protoplaca que se ajusta al diseño de la placa Arduino para reducir la cantidad de cables. En la parte superior del proto-tablero, el L298N está apilado con un encabezado hembra Dupont (los Dupont son encabezados 'como Arduino').

Preparación L298N

Originalmente, la placa L298N no viene con el encabezado Dupont macho correspondiente, debe agregar una fila de 9 pines debajo de la placa. Debe realizar 9 orificios con una broca de 1 mm de diámetro en paralelo a los orificios existentes, como puede ver en la imagen. Luego, conecte los pines correspondientes de las 2 filas con materiales de soldadura y cables cortos.

Pin-out de L298N

El L298N está compuesto por 2 canales que permiten el control de velocidad y dirección:

dirección a través de 2 salidas digitales, llamadas IN1, IN2 para el primer canal e IN3 e IN4 para el segundo

velocidad a través de 1 salidas digitales, llamadas ENA para el primer canal y ENB para el segundo

Elegí el siguiente pin-out con Arduino:

motor izquierdo: IN1 en el pin 3, IN2 en el pin 4, ENA en el pin 2

motor derecho: IN3 en el pin 5, IN4 en el pin 6, ENB en el pin 7

Regulador de 5V

Incluso si el l298N normalmente puede proporcionar 5V, todavía agrego un pequeño regulador. Alimenta el Arduino a través del puerto VIN y los 2 codificadores de los motores. Puede omitir este paso utilizando directamente el regulador incorporado L298N 5V.

Conectores JST y distribución de clavijas del codificador

Utilice adaptadores de conector JST-XH hembra de 4 pines, luego cada conector se vincula a:

  • 5V del regulador
  • un suelo
  • dos puertos de entrada digital (por ejemplo: 34 y 38 para el codificador derecho y 26 y 30 para el izquierdo)

I2C adicional

Como habrás notado, hay un conector JST adicional de 4 pines en la proto-placa. Se utiliza para conectar un dispositivo I2C como una IMU, puede hacer lo mismo e incluso agregar su propio puerto.

Paso 5: Grupo de motores y Arduino en la capa inferior

Motor Group y Arduino en la capa inferior
Motor Group y Arduino en la capa inferior
Motor Group y Arduino en la capa inferior
Motor Group y Arduino en la capa inferior
Motor Group y Arduino en la capa inferior
Motor Group y Arduino en la capa inferior

Fijación de bloques de motor

Una vez que la capa inferior esté ensamblada con las 8 placas de Turtlebot, simplemente use 4 tornillos M3 directamente en los insertos para mantener los bloques del motor. Luego, puede conectar los cables de alimentación del motor a las salidas del L298N y los cables fabricados previamente a los conectores JST de la protoplaca.

Distribución de poder

La distribución de energía se realiza simplemente con un bloque de terminales de barrera. En un lado de la barrera, se atornilla un cable con un enchufe hembra XT60 para conectarlo a la batería LiPo. En el otro lado, se atornillan nuestros dos cables LED / interruptor previamente soldados. Así, cada circuito (Motor y Arduino) podría habilitarse con su propio interruptor y el LED verde correspondiente.

Mantenimiento de cable

¡Rápidamente tendrás que lidiar con muchos cables! Para reducir el aspecto desordenado, puede utilizar la 'tabla' previamente impresa en 3D. Sobre la mesa, mantenga sus tableros electrónicos con cinta adhesiva de doble cara, y debajo de la mesa deje que los cables fluyan libremente.

Mantenimiento de la batería

Para evitar la expulsión de la batería al conducir su robot, simplemente puede usar una banda elástica para el cabello.

Rueda de rodillo

No es realmente una rueda giratoria, sino una simple media esfera fijada con 4 tornillos en la capa inferior. Es suficiente para garantizar la estabilidad del robot.

Paso 6: Computadora de placa única y sensores en la capa superior

Computadora de placa única y sensores en la capa superior
Computadora de placa única y sensores en la capa superior
Computadora de placa única y sensores en la capa superior
Computadora de placa única y sensores en la capa superior
Computadora de placa única y sensores en la capa superior
Computadora de placa única y sensores en la capa superior

¿Qué computadora de placa única elegir?

No necesito presentarles la famosa Raspberry Pi, su número de casos de uso supera ampliamente el campo de la robótica. Pero hay un rival mucho más poderoso para la Raspberry Pi que quizás ignore. De hecho, el Jetson Nano de Nvidia incorpora una potente tarjeta gráfica de 128 núcleos además de su procesador. Esta tarjeta gráfica en particular se ha desarrollado para acelerar las costosas tareas computacionales, como el procesamiento de imágenes o la inferencia de redes neuronales.

Para este proyecto elegí el Jetson Nano y puedes encontrar la parte 3D correspondiente entre los archivos adjuntos, pero si quieres ir con la Raspberry Pi, aquí hay muchas carcasas imprimibles.

Regulador de 5V

Cualquiera que sea la placa que decidió llevar a su robot, necesita un regulador de 5V. La última Raspberry Pi 4 requiere 1.25A como máximo, pero Jetson Nano requiere hasta 3A en estrés, así que opté por el Pololu 5V 6A para tener una reserva de energía para componentes futuros (sensores, luces, steppers …), pero cualquier 5V 2A barato debería funcionar. el trabajo. El Jetson usa un barril de CC de 5.5 mm y el Pi un micro USB, agarre el cable correspondiente y suéldelo a la salida del regulador.

Diseño LIDAR

El LIDAR utilizado aquí es el LDS-01, hay varios otros LIDAR 2D que podrían usarse como RPLidar A1 / A2 / A3, YDLidar X4 / G4 o incluso Hokuyo LIDAR. El único requisito es que se conecte a través de USB y se coloque centrado sobre la estructura. De hecho, si el LIDAR no está bien centrado, el mapa creado por el algoritmo SLAM puede cambiar la posición estimada de las paredes y los obstáculos de su posición real. Además, si algún obstáculo del robot cruza el rayo láser, se reducirá el alcance y el campo de visión.

Montaje LIDAR

El LIDAR está montado en una pieza impresa en 3D que sigue su forma, la pieza en sí se sujeta sobre una placa rectangular (en realidad, en madera contrachapada en la imagen, pero también podría imprimirse en 3D). Luego, una pieza adaptadora permite fijar el conjunto en la placa superior del robot tortuga con espaciadores de nailon.

Cámara como sensor adicional o reemplazo LIDAR

Si no quiere gastar demasiado dinero en un LIDAR (que cuesta alrededor de 100 $), opte por una cámara: también existen algoritmos SLAM que se ejecutan solo con una cámara RGB monocular. Ambos SBC aceptan cámaras USB o CSI.

Además, la cámara le permitirá ejecutar secuencias de comandos de detección de objetos y visión por computadora.

Montaje

Antes de cerrar el robot, pase los cables por los orificios más grandes de la placa superior:

  • el cable correspondiente del regulador de 5V a su SBC
  • el cable USB del puerto de programación del Arduino DUE (el más cercano al barril de CC) a un puerto USB de su SBC

Luego, sostenga la placa superior en su posición con una docena de tornillos. Su robot ya está listo para ser programado, ¡BIEN HECHO!

Paso 7: ¡Haz que se mueva

Compila el Arduino

Abra su Arduino IDE favorito e importe la carpeta del proyecto llamada own_turtlebot_core, luego seleccione su placa y el puerto correspondiente, puede consultar este excelente tutorial.

Ajustar la configuración del núcleo

El proyecto se compone de dos archivos y uno debe adaptarse a su robot. Así que abramos own_turtlebot_config.h, y descubramos qué líneas requieren nuestra atención:

#define ARDUINO_DUE // ** COMENTA ESTA LÍNEA SI NO ESTÁS UTILIZANDO UN DUE **

Debe usarse solo con Arduino DUE, si no comenta la línea.

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

#define RATE_CONTROLLER_KD 5000000000000.0 // ** AJUSTE ESTE VALOR ** #define RATE_CONTROLLER_KI 0.00005 // ** AJUSTE ESTE VALOR **

Esos 3 parámetros corresponden a las ganancias del controlador de tasa utilizadas por el PID para mantener la velocidad deseada. Dependiendo del voltaje de la batería, la masa del robot, el diámetro de la rueda y el engranaje mecánico de su motor, deberá adaptar sus valores. PID es un controlador clásico y no se detallará aquí, pero este enlace debería proporcionarle suficientes entradas para ajustar las suyas.

/ * Definir pines * /

// motor A (derecha) const byte motorRightEncoderPinA = 38; // ** MODIFICA CON TU PIN NB ** const byte motorRightEncoderPinB = 34; // ** MODIFICA CON TU PIN NB ** const byte enMotorRight = 2; // ** MODIFICA CON TU PIN NB ** const byte in1MotorRight = 4; // ** MODIFICA CON TU PIN NB ** const byte in2MotorRight = 3; // ** MODIFICA CON TU PIN NB ** // motor B (izquierda) const byte motorLeftEncoderPinA = 26; // ** MODIFICA CON TU PIN NB ** const byte motorLeftEncoderPinB = 30; // ** MODIFICA CON TU PIN NB ** const byte enMotorLeft = 7; // ** MODIFICA CON TU PIN NB ** const byte in1MotorLeft = 6; // ** MODIFICA CON TU PIN NB ** const byte in2MotorLeft = 5; // ** MODIFICA CON TU PIN NB **

Este bloque define el pinout entre el L298N y el Arduino, simplemente modifique el número de pin para que coincida con el suyo. Cuando haya terminado con el archivo de configuración, compile y cargue el código.

Instalar y configurar ROS

Una vez que haya llegado a este paso, las instrucciones son exactamente las mismas que las detalladas en el excelente manual de TurtleBot3, debe seguir escrupulosamente

TurtleBot 3 bien hecho ahora es tuyo y puedes ejecutar todos los paquetes y tutoriales existentes con ROS.

Ok, pero ¿qué es ROS?

ROS significa Robots Operating System, puede parecer bastante complejo al principio pero no lo es, solo imagina una forma de comunicación entre hardware (sensores y actuadores) y software (algoritmos de navegación, control, visión por computadora…). Por ejemplo, puede cambiar fácilmente su LIDAR actual por otro modelo sin interrumpir su configuración, porque cada LIDAR publica el mismo mensaje de LaserScan. ROS es ampliamente utilizado en robótica, Ejecute su primer ejemplo

El equivalente 'hola mundo' de ROS consiste en teleoperar su robot a través de la computadora remota. Lo que quieres hacer es enviar comandos de velocidad para hacer girar los motores, los comandos siguen este conducto:

  • un nodo turtlebot_teleop, que se ejecuta en la computadora remota, publica un tema "/ cmd_vel" que incluye un mensaje Twist
  • este mensaje se reenvía a través de la red de mensajes ROS al SBC
  • un nodo serial permite que el "/ cmd_vel" sea recibido en el Arduino
  • el Arduino lee el mensaje y establece la velocidad angular en cada motor para que coincida con la velocidad lineal y angular deseada del robot

¡Esta operación es simple y se puede lograr ejecutando las líneas de comando enumeradas anteriormente! Si desea información más detallada, simplemente mire el video.

[SBC]

roscore

[SBC]

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

[Computadora remota]

exportar TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Para llegar más lejos

Necesitas saber una última cosa antes de probar todos los ejemplos oficiales, en el manual cada vez que te enfrentas a este comando:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

en su lugar, debe ejecutar este comando en su SBC:

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

Y si tiene un LIDAR, ejecute el comando asociado en su SBC, en mi caso ejecuto un LDS01 con la siguiente línea:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Y eso es todo, definitivamente ha construido su propio robot tortuga:) Está listo para descubrir las fantásticas capacidades de ROS y para codificar algoritmos de visión y aprendizaje automático.

Recomendado: