Tabla de contenido:

Un robot 4WD impulsado a través de un mando USB remoto: 6 pasos
Un robot 4WD impulsado a través de un mando USB remoto: 6 pasos

Video: Un robot 4WD impulsado a través de un mando USB remoto: 6 pasos

Video: Un robot 4WD impulsado a través de un mando USB remoto: 6 pasos
Video: ROBOT Móvil Bluetooth - Programado y controlado por Celular Tutorial 2024, Junio
Anonim
Image
Image

Para mi próximo proyecto de robótica, me vi obligado a diseñar / diseñar mi propia plataforma de robot debido a circunstancias imprevistas.

El objetivo es que sea autónomo, pero primero necesitaba probar su capacidad básica de conducción, así que pensé que sería un proyecto paralelo divertido comportarme y ser controlado como si fuera un vehículo RC (radiocontrolado)., pero en su lugar utilice un Gamepad USB.

Los resultados han sido tan buenos o mejores de lo que esperaba.

La ventaja de seguir la ruta del USB Gamepad, con mucha programación, es que puedo personalizarlo y agregar a lo que ya he hecho. No tengo ninguna experiencia real en la construcción de un vehículo RC, pero me imagino que uno está bastante atascado con lo que sea que venga el transmisor RC (joysticks / botones, etc.) y el receptor RC.

Por ejemplo, he agregado algún reconocimiento de que el robot ha chocado contra una pared, simplemente haciendo que el software detecte altas corrientes y valores bajos de velocidad del codificador.

Opcionalmente, uno puede agregar algunas cámaras web USB al robot, dependiendo de cuántas y su ubicación, uno puede conducir el robot alrededor de la sala de estar y en otra habitación, mientras está sentado en otro lugar frente a la computadora que tiene el Gamepad USB conectado. eso.

Este Instructable no será un verdadero, detallado, completo, paso a paso, pero trataré de dar tantos detalles como pueda.

Suministros

Piezas sugeridas: la mayor parte de esto lo obtuve de Servo City (Actobotics).

2 - Canales en U de 13.5 , para los lados del bastidor de la base. Los motores están montados sobre esto. Yo elegí algo más corto y mis motores están montados en las mismas esquinas, lo que dificulta su montaje.

2 - Canales en U de 12 para la parte delantera y trasera del marco de la base.

2 canales en U de 15 para los parachoques, delanteros y traseros

2 - 7 (¿o eran 7.5 ?) Canales en U para las columnas delanteras. Esto no es demasiado crítico, las longitudes pueden variar. Depende de la altura de las columnas traseras y la altura que elija para colocar las columnas en ángulo. Canal en U que conecta entre ellos.

2 - (¿longitud?) Canales en U para el miembro en ángulo, de adelante hacia atrás, que conectan las columnas verticales. Este es fundamental, porque Servo City / Actobotics vende paneles o soportes en ángulo de 45 grados para este propósito, pero tendrá que hacer algunos cálculos matemáticos / trigonométricos para asegurarse de obtener las longitudes correctas.

2 - (¿longitud?) Canales en U para servir como parachoques laterales de mayor nivel, nuevamente, estos dependen de lo que hagas con la base

2 - (¿longitud?) Canales en U para servir como parachoques delanteros y traseros de mayor nivel, lo mismo ocurre con el anterior.

1 - (¿longitud?) Canal en U para servir como miembro superior, se extiende a través de las columnas traseras. Este puede no ser demasiado crítico, ya que puede montarlo en la parte superior o delante o detrás de las columnas verticales.

12 (aprox) canales en L o soportes. Estos sirven para múltiples propósitos, pero esencialmente brindan integridad / resistencia estructural a las esquinas del marco de la base Y a las columnas verticales.

4 (+?) Canales planos de 3 a 5 orificios. Estos también proporcionan resistencia estructural al robot.

ServoCity vende dos tipos principales de paneles planos de área grande, útiles para usar como plataforma deslizante inferior o superior donde irían la batería o los controladores, o incluso para una superficie superior para sensores.

Hay un panel de 4 (4.5?) "X 12", y creo que el otro es un panel de 9 (9.5?) "X 12".

Aquí es donde las cosas se ponen interesantes, confusas y caras (las piezas pequeñas se suman). Todos los canales, etc., se pueden unir entre sí a través de estas piezas de conexión, de las cuales hay VARIAS. Aquí es donde lamento no tener una lista de piezas completa, detallada y específica.

Y la cuestión es que … realmente no sabes cuáles podrías necesitar, o cuántas … porque hay muchas formas de encajar estas piezas.

Puedo enumerar lo que he usado:

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

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

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

Los dos siguientes son muy útiles, y solo me abastecería de estos:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Luego están todos los tornillos (pernos). Comencé con un paquete de CADA tamaño y he revisado la mayoría de ellos. Usé tornillos más largos donde el tamaño no importaba, y reservé los más cortos para donde eran REQUERIDOS porque ninguna otra longitud funcionaría.

Por último, debe obtener 1 bolsa de estos:

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

No usé tantos, pero (creo) son fundamentales para asegurarse de que sus motores no vibren sueltos del marco con el tiempo. Solo dos funcionarían por motor, debido al canal en U

Necesitará al menos 4 de estos, es posible que obtenga uno adicional más o menos en caso de que cause daño a uno (créame, es posible que esté poniendo / quitando los motores varias veces):

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

Normalmente, los ejes de los motores son de 6 mm y los ejes de 1/4 (0,25 pulg.).

Obtendría algunos tornillos negros, supuestamente más fuertes, y los usaría para las abrazaderas anteriores, y NO usaría los tornillos que vienen con las abrazaderas:

(Creo que estos son los):

Cojinetes de 4 - 1/4 "(0,25") de diámetro

1 - bolsa de espaciadores negros de 1/4"

4 - Sujeción de bujes en D

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

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

Ruedas de 4 a 6 para trabajos pesados

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

Tenga en cuenta que me encantan estas ruedas, pero tienen un borde de goma dura. Parece que les va bien en suelos duros y alfombras, y probablemente en senderos de hormigón duro. No funcionará bien en césped, arena, etc.

¡TAMBIÉN, tenderán a manchar su alfombra!

4 - motores:

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

Fui con las 223 RPM, buena velocidad máxima en interiores, también pude mover mi robot (pesado con 2 baterías SLA de 12 V) con bastante facilidad en cámara lenta.

2 - codificadores de motor para los motores. (Roboclaw de Servo City solo maneja 2 codificadores)

1 - Controlador de motor Roboclaw 2X45A, asegúrese de obtener el que tiene los bloques de terminales verdes, no los pines…. bueno … cada uno tiene sus ventajas. En retrospectiva … podría haber conseguido los alfileres.

Creo que eso es todo de Servo City.

SparkFun vende Arduino Uno (eso es lo que usé), y también Redboard Artemis como su administrador de unidades.

Querrá una Raspberry Pi 3 (¿o 4?) Como su "cerebro" de alto nivel e interfaz con usted.

Necesitará cableado, interruptores, fusibles y un diodo de "retorno" muy robusto.

Usé una batería SLA de ciclo profundo Duracell 12V 14AH, pero puedes usar lo que sea.

¡ADVERTENCIA! El diseño de este robot (ALTO y ANCHO, pero CORTO), asume una especie de centro de gravedad pesado, como el que proporcionaría una batería SLA. Es posible que no funcione bien con esos otros tipos de paquetes de baterías de tecnología más nueva. LiPo, Lion, etc. Podría volcarse fácilmente.

De Pololu obtuve algunos adaptadores de enchufe de barril, para poder alimentar de forma independiente el Arduino y / o el Redboard, a pesar de que estarían conectados a la Raspberry a través de USB, porque no quería tener que depender de la potencia de la Raspberry.. (Especialmente montaje de cámaras, sensores, etc.)

Necesitará un regulador de voltaje reductor de 12 a 5 V, mínimo 5 A (?) Para la frambuesa. Los otros pueden manejar cualquier cosa entre 7 y 15 V directamente a la batería SLA.

Eso es todo por partes.

Lo que NO haría: engranajes biselados de 90 grados.

Nuevamente, hay muchos videos en mi lista de reproducción de YouTube de Robotics que detallan la mayor parte de lo anterior.

Paso 1: construcción

Francamente, todos mis pasos de construcción ya están en forma de youtubes. Puedes verlos en mi lista de reproducción de Robótica, comenzando en "Wallace Robot 4". Los anteriores (Wallace II, Wallace III) también tienen buen material

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

Paso 2: prueba el Roboclaw, los motores y los codificadores

Los creadores de Roboclaw (BasicMicro) tienen una aplicación de Windows que puedes usar para asegurarte de haber conectado correctamente los motores y codificadores al Roboclaw. Conectará motores del mismo lado en paralelo al Roboclaw. Puede optar por utilizar los cables del codificador, solo en los motores traseros o en los motores delanteros, o tal vez incluso mejor, DIAGONALMENTE.

El motivo de mi sugerencia tiene que ver con la verificación (más tarde) de un robot atascado. Tener un estado en diagonal de si las ruedas delanteras / traseras giran / no giran puede ser mejor que solo las delanteras o solo las traseras.

NOTA: lo que NO he hecho es usar el Arduino para conectar también (a través de pines GPIO) a los codificadores; si hiciste eso, podrías hacer que el Roboclaw maneje 2 codificadores, y luego que el Arduino maneje los otros dos, y simplemente consulta el Roboclaw por sus dos valores de codificador (y velocidades).

NOTA: Usé la aplicación BasicMicro para preconfigurar el Roboclaw para Ramping Up / Ramping Down. Esto es bueno para proteger el hardware y la electrónica. Hay un video sobre eso en mi lista de reproducción de Robótica.

Casi lo olvido: también compré algunos cables de conector de bala que van entre los cables del motor y el Roboclaw. NOTA: si hace esto, notará que la longitud total del cable es REALMENTE LARGA. Pero no quería tener que cortarme ninguno si no era necesario. Lo hice (para los pasos posteriores) encontré problemas de comunicación con el USB entre la Raspberry y el Arduino, probablemente debido al ruido EMI … pero lo he solucionado con el software.

Si se convierte en un problema, puede cortar los cables; también puede comprar blindaje metálico (de Amazon, 1 de diámetro).

Lo último: esto todavía tengo que hacer: tener el Roboclaw autoconfigurado o autoajuste (usando codificadores) para que los motores del lado izquierdo y derecho se muevan a la misma velocidad y el robot vaya recto.

La mía se curva muy ligeramente sobre unos 12 pies, pero no lo suficiente como para sentir la necesidad de hacer algo al respecto.

Paso 3: Agregar y programar el Arduino

Necesitará el enchufe cilíndrico y algunos cables, también un cable USB. Asegúrese de obtener el correcto para el conector Arduino.

Deberá descargar el IDE de Arduino.

Aquí en Github está el último boceto que maneja la conducción del robot:

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

Conectará el Arduino a su computadora que ejecuta el IDE, y según cómo esté escrito el boceto, usará los pines 10 y 11 en el Arduino para las comunicaciones en serie (Software Serial) con el Roboclaw.

Desarrollé un protocolo de comunicaciones simple entre Raspberry Pi y Arduino.

Está basado en caracteres ASCII, lo que facilita la depuración y la prueba simplemente usando la ventana del "monitor serial" del IDE de Arduino.

Los comandos comienzan en el número "0" (cero) y simplemente aumentan según sea necesario

Los comandos que comienzan en el "20" son comandos directos de Roboclaw, y los que están debajo de ese número son comandos estrictamente relacionados con Arduino.

Debido al ruido de EMI, mejoré la cadena de comandos para incluir una suma de comprobación.

Entonces, cualquier cadena incluirá:

# número de tokens en cadena, incluido este

la suma de control

Por ejemplo, digamos que desea que Arduino responda con su menú de comandos:

4 0 12 16

"4" son cuatro fichas en cadena.

"0" es el comando de MENÚ.

"12" es el número aleatorio que elegí.

"16" es la suma de 4 + 0 + 12.

Ese mismo comando de MENÚ podría ser diferente:

4 0 20 24

Debido a que elegí un número aleatorio diferente, la suma de comprobación también es diferente.

Por ejemplo, digamos que desea avanzar al 100% de velocidad:

5 29 0 134 100

"5" cinco fichas

"29" el comando ADELANTE

"0" el número aleatorio

"134" la suma de comprobación

"100" el parámetro 1 (la velocidad en este caso)

Si el Arduino no puede verificar esa cadena entrante, simplemente la deja caer / ignora, sin respuesta.

Si el Arduino no recibe un comando de movimiento siguiente con X milisegundos, envía un motor STOP al Roboclaw.

El Arduino se inicia y comienza a enviar un estado automático al puerto USB … a menos que se le indique que deje de hacerlo.

En este punto, debería estar listo para intentar controlar el Roboclaw y ver los motores girar, simplemente usando el "Monitor serial" en el IDE.

Paso 4: Agregar y programar la Raspberry Pi (node.js)

Nuevamente, si echas un vistazo a mi lista de reproducción de Robótica, incluso desde el principio, repasé cada paso para poner en funcionamiento la Raspberry.

Lo único que podría haber pasado por alto es que necesitará un regulador de 5V y, de alguna manera, construir, cortar / modificar un cable USB o alimentar la Raspberry de otra manera.

Aquí en Github hay todo lo que necesita en la Raspberry para comunicarse con Arduino a través de USB.

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

Incluso hay guiones de prueba.

Puede echar un vistazo al código del servidor node.js y verá cómo Raspberry convierte las concisas instrucciones numéricas en cadenas de URL de tipo REST. Puede utilizar "curl" para enviar comandos de prueba.

Ejemplo:

su dirección IP de RP3: 8084 / arduino / api / forward / 50

hará que los motores giren momentáneamente las ruedas hacia adelante.

Si pones eso en un bucle de script de shell, verás que las ruedas siguen girando.

El código node.js (server.js) incluye una función de reconexión en caso de que las comunicaciones en serie se pierdan en Arduino. Puede probar esto simplemente desconectando el Arduino de la Raspberry y volviéndolo a conectar.

Asegúrese de igualar la velocidad en baudios en serie entre los dos.

Debido a que Arduino arroja paquetes de datos incorrectos, y debido a que en el nivel de node.js y en el nivel de javascript del navegador, todo está codificado para enviar muchos comandos de "unidad", he podido ejecutar hasta 2 000 000 baudios (2 Mbps).

Si obtiene los scripts de prueba para que se ejecuten y ve que las ruedas giran, entonces está listo para el siguiente paso.

Paso 5: Paso final: programación / uso del cliente de página web

Incluidos en el enlace de Github a la parte de Raspberry de todo esto, están los archivos del cliente.

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

Manejan el Gamepad USB a través de la API de Gamepad (basada en navegador) y debería ver los diversos botones y controles deslizantes también disponibles en la página web.

El código javascript consulta (encuesta) los valores de los ejes X e Y para uno de los joysticks … (dependiendo de qué joysticks / gamepad tengas, es posible que debas modificar el código). Sondea muy rápidamente y dispara todos esos valores al servidor node.js que escucha en 8084.

Los valores brutos de los ejes X e Y de los joysticks están entre 0 y 1.

Pero la función de biblioteca del controlador de motor Roboclaw que se usa en Arduino para impulsar los motores, espera un valor entre -100 a 0 (hacia atrás) o (0 a 100) hacia adelante.

Soo…. ese es el propósito de incluir p5.min.js. Da la casualidad de que tiene esta función map () muy agradable y conveniente en la que le da el valor sin procesar, su rango sin procesar (actual) y el nuevo rango deseado. Y convierte el valor sin procesar en el valor en el nuevo rango mapeado.

Otro punto: a una velocidad de 100, el robot puede ser muy complicado. Constantemente me encontraba con algo. Pero incluso a medida que mejora en eso, sigue siendo delicado al girar hacia la izquierda o hacia la derecha.

Algo que podría agregar sería similar al control deslizante de Velocidad máxima actual en la página web. Ese control deslizante determina cuál es el valor más alto o máximo al que mapearás los joysticks X e Ys.

Ejemplo:

Digamos que está mapeando 0 -> 1 a 0 -> 100. Cuando empuja el joystick hasta el final, está en 100. Tocante. Puede que sea demasiado rápido.

Pero, si desliza ese control deslizante de Velocidad máxima hacia atrás un poco, ahora está mapeando 0 -> 1 a 0 -> 80 o 70.

Eso significa que tiene más margen para mover su joystick sin un cambio tan grande en la velocidad que se envía al node.js (y al Arduino).

Y la adición que podría hacer es separar las X (girar hacia la izquierda o hacia la derecha) de las Y (hacia adelante o hacia atrás) en sus propias velocidades máximas disponibles.

Por lo tanto, puede dejar las Y en 0 a 100, 0 a -100 para un movimiento lineal rápido, pero reducir la velocidad máxima de X para un movimiento de rotación más controlado. Lo mejor de ambos mundos.

Paso 6: Opcional: Conduzca el robot con eventos táctiles y / o de arrastre del mouse

Si llegaste tan lejos, sabrás que las capas de software que comienzan en el navegador y profundizan en el Javascript y luego en el servidor Node.js de Raspberry, finalmente en el arduino, están convirtiendo las coordenadas X e Y del joystick de Gamepad en las coordenadas " comandos de avance "(o" retroceso ", etc.) (y su valor de velocidad).

Además, sabes que mientras que las X e Y de los joysticks son negativas de 1, pasando por cero, a más 1, deben convertirse entre cero y 100. Bueno, el máximo depende de la configuración de velocidad máxima en la página web.

Entonces … lo único que se puede hacer para usar el mouse o los eventos táctiles (como en un teléfono inteligente) es capturar esos eventos, tomar las X y las Y.

PERO ---- esas X e Y NO están entre 1 y 1 negativo. Comienzan en 0 y aumentan positivamente, porque son esencialmente los píxeles o las coordenadas de pantalla relativas de algún elemento HTML (como un panel de arranque) o un lienzo.

Así que, de nuevo, la función "map ()" de la biblioteca Js de P5 es muy útil para volver a mapear lo que necesitamos.

Refactoricé el código para tener dos páginas web diferentes, una para escritorio usando el Gamepad, otra para dispositivos móviles, usando los eventos táctiles.

Además, una vez que se vuelven a asignar las X e Y, se introducen en la misma cadena de código, etc., al igual que las X e Y del Gamepad.

Recomendado: