Tabla de contenido:

Construya su propio automóvil autónomo - (este instructivo es un trabajo en proceso): 7 pasos
Construya su propio automóvil autónomo - (este instructivo es un trabajo en proceso): 7 pasos

Video: Construya su propio automóvil autónomo - (este instructivo es un trabajo en proceso): 7 pasos

Video: Construya su propio automóvil autónomo - (este instructivo es un trabajo en proceso): 7 pasos
Video: Cómo hacer un instructivo | Características de un instructivo 2024, Noviembre
Anonim
Image
Image

Hola, Si echas un vistazo a mi otro Instructable on Drive Robot With Remote USB Gamepad, este proyecto es similar, pero a menor escala. También puede seguir u obtener ayuda o inspiración de las listas de reproducción Robótica, Reconocimiento de voz de cosecha propia o Automóvil autónomo en Youtube.

Comencé con el robot grande (Wallace 4), pero desde que comencé un grupo Meetup local, necesitaba algo a menor escala y el grupo estaba muy interesado en la visión por computadora.

Así que me encontré con este curso de Udemy: Build Your Own Self-Driving Car que me dio la idea de este proyecto.

Si estás interesado en el curso de Udemy, puedes seguir revisando allí; sale a la venta con un gran descuento de vez en cuando. Nota: existe la Parte 1 y la Parte 2; debe investigar un poco cómo obtener los dos cursos como paquete (con descuento).

El propósito de este instructivo es doble. Primero, dar algunos consejos y alternativas a ciertas partes del curso (como las partes y el hardware). Y segundo, ampliar el curso.

El objetivo principal del curso Udemy:

es poder hacer que un pequeño automóvil robot con ruedas se conduzca por sí mismo en una carretera de dos carriles reducida.

Tiene que reconocer las franjas del carril y cuándo ha llegado al final de la carretera.

Tiene que reconocer una señal de alto (y detenerse).

Además, un semáforo ROJO y VERDE.

También debe reconocer y maniobrar alrededor de un obstáculo (otro automóvil).

Lo que este Instructable agrega al curso:

Conduce el coche pequeño con un mando USB remoto, de la misma forma que en este otro Instructable.

Dé algunas alternativas a lo que ofrece el curso.

Puede que ni siquiera tengas que comprar el curso:

Este Instructable puede ser todo lo que necesita para comenzar.

Suministros

Las partes esenciales (sugeridas):

Un chasis de robot

Cuatro motores

Arduino

Frambuesa Pi (3, 3B +, 4)

Cámara (cámara web USB o módulo Picamera)

Potencia de la batería

Interruptores de encendido / apagado

cables de puente

separadores (plástico y tal vez metal también)

Revise todo el Instructable y también los videos antes de intentar comprar piezas.

Después de haber hecho este proyecto, me doy cuenta de que las partes exactas no son tan críticas.

Paso 1: Más detalles sobre las piezas …

Image
Image
Más detalles sobre las piezas …
Más detalles sobre las piezas …
Más detalles sobre las piezas …
Más detalles sobre las piezas …

El video asociado entra en detalles sobre las partes y algunos problemas que encontré.

  • Busque diferentes chasis / motores
  • Los motores ya deberían tener cables soldados.
  • Es posible que desee tener un taladro y brocas, O un chasis con más agujeros
  • Tenga en cuenta que el peso es un problema. Todo debe ser lo más ligero posible.
  • El controlador de motor L298 H-Bridge funciona muy bien. NOTA: obtenga uno con los bloques de terminales de tornillo (ver foto)
  • Probablemente desee separadores tanto de plástico como de metal, el tamaño M3 es probablemente la mejor opción.

Los separadores de plástico son buenos para montar las placas en el chasis (controlador de motor, Arduino, Raspberry, PCB de alimentación, interruptor de encendido / apagado, etc.).

Los separadores de metal son buenos para ensamblar el chasis (resistencia) y también especialmente cuando está desarrollando (programación, prueba). Para el desarrollo, los separadores de metal pueden servir como zancos. Al igual que si estuviera trabajando en un automóvil real, desea levantar el automóvil para que las ruedas estén en el aire y puedan moverse libremente. ¡Esto es muy importante! Cometerá errores y no querrá que el coche despegue y se estrelle.

Taladro + brocas

Realmente quiero enfatizar el uso de un taladro, si es posible, y el uso de separadores en lugar de cinta adhesiva de doble cara. Es muy probable que termine quitando y reposicionando sus tableros, etc., varias veces durante este proyecto, y el uso de la cinta se vuelve muy complicado.

El uso de un taladro hace que sea muy fácil de reposicionar (especialmente si el chasis es de plástico) y se ve más profesional.

Paso 2: Encendido del automóvil durante el desarrollo

Encendido del automóvil durante el desarrollo
Encendido del automóvil durante el desarrollo
Encendido del automóvil durante el desarrollo
Encendido del automóvil durante el desarrollo

En mi opinión, la forma más rápida y sencilla de comenzar con este proyecto es:

  • Para el desarrollo de bocetos de software Arduino, simplemente conecte el Arduino a su computadora a través de USB
  • para el software Raspberry Pi, debe tener una alimentación USB de 5 V que pueda suministrar al menos 3 amperios. Y debería tener un interruptor de encendido / apagado. A menos que tenga un buen concentrador USB conectado a su computadora, probablemente no podrá encender la Raspberry directamente desde su computadora.
  • Para cuando esté listo para probar los motores / ruedas, lo más fácil es (ver foto) una buena fuente de alimentación. Sin embargo, esos no son económicos.

Mi punto con esta sección es decir que no desea utilizar la energía de la batería durante el desarrollo, porque eso ralentizará enormemente su progreso.

Además, al hacer algo similar a las sugerencias anteriores, no tiene que preocuparse (todavía) acerca de cómo exactamente alimentará el automóvil. Puede retrasar esa decisión para más adelante en el proyecto.

Paso 3: Encendido del automóvil durante el uso real

Encendido del automóvil durante el uso real
Encendido del automóvil durante el uso real
Encendido del automóvil durante el uso real
Encendido del automóvil durante el uso real

Si decide seguir el curso (o lo que he hecho) para la alimentación de 5 V a la lógica, tenga en cuenta que no todos los bancos de alimentación USB de 5 V son buenos para este proyecto.

¡El punto principal aquí es que necesita 5 V pero necesita al menos 3 amperios! Piénselo de esta manera: desea un banco de energía que alimente una computadora portátil (tal vez).

Si vive en los EE. UU., Creo que una de las mejores formas de hacerlo es comprando en Best Buy. ¿Por qué? Debido a su política de devolución de dinero de 14 días.

De hecho, tuve que probar tres powerbanks diferentes antes de encontrar uno que funcionara. Los otros hacen que la Raspberry Pi se queje de bajo voltaje.

Había comenzado con el powerbank más económico y seguí probando el siguiente modelo (que costaba más), hasta que encontré uno que funcionaba.

Cómo alimentar el Arduino

En el curso de Udemy, el autor eligió alimentar el Arduino directamente desde el banco de energía (a través de un PCB personalizado que hizo) y usó pines de alimentación en el conector GPIO del Arduino.

Sin embargo, elegí alimentar el Arduino directamente desde la Raspberry Pi, a través del cable USB.

Tendrás que decidir cuál es mejor.

Cómo alimentar los motores / controlador de motor

En el curso de Udemy, el autor eligió alimentar los motores / controlador directamente desde la batería externa de 5V. Hay dos consideraciones si usa ese enfoque.

  1. Cuando los motores comienzan a girar, consumen la mayor cantidad de corriente. Esto puede (provocará) que el voltaje de alimentación se hunda (baje) por debajo de 5 V y haga que la Raspberry se reinicie.
  2. Usar solo 5V para alimentar los motores significa que no está proporcionando tanta potencia como podría a los motores, y el automóvil se moverá más lento (más lento). He probado los motores (con esa fuente de alimentación) (ver foto) a al menos 9V. Funcionan bien a 9V.

Observaciones sobre 9V (o más)

Si echó un vistazo a todas las fotos y videos de este Instructable, notó que ensamblé una PCB personalizada para crear mi propia fuente de alimentación de 9V. He aprendido algunas cosas a lo largo del camino.

Ahora mismo estoy usando varias (3) celdas de batería de 9V en paralelo para alimentar los motores. He utilizado pilas recargables alcalinas y NiMH.

Experiencia de aprendizaje n. ° 1: se necesita mucho tiempo (muchas horas) para cargar correctamente las baterías NiMH de 9V.

Posible solución: invierta en un cargador de NiMH de varias baterías. Debería ser un cargador "inteligente".

Desventaja: no son económicos.

Experiencia de aprendizaje n. ° 2: las baterías de 9 V en realidad están compuestas por varias celdas interiores pequeñas. Si una de esas celdas muere, toda la batería es inútil. NO he tenido este problema, pero lo leí.

Experiencia de aprendizaje n. ° 3: No todas las baterías de 9 V tienen el mismo voltaje. Este es importante. Porque cuanto más alto es el voltaje, más velocidad es posible. Algunas celdas de batería (y cargadores) son solo de 8.4V. Algunos incluso menos. Algunos son de 9,6 V.

Experiencia de aprendizaje n. ° 4: las baterías de 9 V, especialmente las de NiMH, son livianas. Una cosa buena. Sin embargo, la mayoría de ellos solo proporcionan mA de corriente de salida. Por eso tuve que colocarlos en paralelo. Necesita una capacidad de corriente total de casi 2 amperios, incluso durante breves períodos de tiempo.

Experiencia de aprendizaje n. ° 5: existen paquetes de baterías de 9,6 V, que se utilizan para cosas como automóviles controlados por radio. Todavía no he usado una, pero creo que proporcionan más corriente que las baterías paralelas de 9V como lo hice yo. Además, puede cargar la unidad individual. Los paquetes vienen en diferentes tamaños. Y hay una consideración de peso. Y luego, ¿usas el paquete para alimentar todo el auto, o solo los motores? Si es para todo el automóvil, necesitará un regulador reductor de 5 V para la Raspberry Pi.

El L298 H-Bridge tiene la capacidad de generar 5V para este propósito, pero me preocupa cuánta corriente puede producir para la Raspberry Pi y si será demasiado esfuerzo para la placa L298.

Si decide tener dos fuentes de energía separadas, es posible que tenga un problema de peso (demasiado pesado).

Paso 4: Programación de software para la conducción de gamepad

Creo que ya cubrí gran parte de esta sección en el Instructable Gamepad Controlado por Robot a través de USB Remoto, así que no lo repetiré aquí.

Las secciones de programación / software en ese otro Instructable son solo sugerencias. Creo que uno aprende más por ensayo y error.

Paso 5: agregar una cámara

Agregar una cámara
Agregar una cámara
Agregar una cámara
Agregar una cámara
Agregar una cámara
Agregar una cámara

En el curso de Udemy, creo que el autor usa tacos de madera redondos y una pistola de pegamento para construir una forma de elevar la cámara.

Deberá elevar la cámara para que mire hacia la carretera de dos carriles, para que pueda reconocer los carriles más fácilmente.

Donde vivo en los EE. UU., Las clavijas de madera eran muy económicas. Puede comprarlos en Lowe's o Home Depot. Elegí tacos cuadrados en lugar de tacos redondos.

También elegí hacer una base más resistente para la torre de la cámara, e hice que toda la torre fuera removible del automóvil, para poder jugar y experimentar cuál es la mejor posición para ella en el automóvil.

Además, hice la torre con la idea en mente de que comenzaré con una cámara web USB, pero posiblemente luego pasaré a usar el módulo Picamera.

Es posible que desee invertir en una cámara tipo ojo de pez.

Compré una pistola de pegamento caliente muy económica, pero quería reforzar mejor la base de la torre, así que pretaladré algunos agujeros para tornillos y agregué tornillos para sujetar todo mejor.

Luego atornillé la base al chasis del auto.

Si más tarde quiero mover las cosas, simplemente desatornillo la base del chasis, hago nuevos agujeros en la nueva ubicación del chasis y vuelvo a atornillar la torre en el chasis.

Traje el código Python y Node.js "sígueme" del gran robot (Wallace Robot 4) como una forma de probar todo. Por favor, vea las fotos en esta sección para ver la lista de youtubes que brindan muchos más detalles sobre "sígueme".

Como mencioné, fue más fácil montar primero una cámara web USB. Más tarde puedo montar el módulo Picamera.

Paso 6: Reconocimiento facial: determinar la posición

Image
Image

Esta parte no es el tema central del curso de Udemy, pero fue un ejercicio divertido.

Si realiza una búsqueda en la web de "reconocimiento facial python opencv", encontrará muchos buenos ejemplos sobre cómo hacerlo, y todos siguen prácticamente los mismos pasos.

  1. cargar el archivo de cara "haar"
  2. inicializar la cámara
  3. comienza un bucle donde agarras un marco
  4. convertir la imagen en color a escala de grises
  5. alimentarlo al opencv para que encuentre cara (s)
  6. iniciar un bucle interno (para cada cara encontrada) (en mi caso, agrego código para abortar si hay más de 1 cara)

Para ello aquí, una vez que hemos detectado un rostro, conocemos las X, Y, W y H del cuadrado imaginario que delimita el rostro.

Si desea que el robot se mueva hacia adelante o hacia atrás, solo debe considerar W. Si W es demasiado grande (demasiado cerca), haga que el robot se mueva hacia atrás. Si W es demasiado pequeño (demasiado lejos), haga que el robot se mueva hacia adelante.

El movimiento de izquierda a derecha es un poco más complicado pero no loco. Eche un vistazo a la imagen de esta sección que detalla cómo determinar la posición de la cara izquierda frente a la derecha.

NOTA:

Si ejecuta alguno de los ejemplos web de OpenCV, todos mostrarán la vista real de lo que opencv está "viendo", con la cara delineada en un cuadrado. Si observa, ese cuadrado no es estable (constante), incluso si no se está moviendo.

Esos valores cambiantes harían que el robot estuviera en constante movimiento, hacia adelante o hacia atrás, hacia la izquierda o hacia la derecha.

Por lo tanto, necesitará tener algún tipo de delta tanto para adelante / atrás como para izquierda / derecha.

Tomemos a la izquierda frente a la derecha:

Una vez que haya calculado la izquierda y la derecha, obtenga la diferencia (delta):

delta = abs (izquierda - derecha)

Necesita tomar el absoluto porque no sabe cuál será el número mayor.

Luego, agrega un código condicional para intentar moverse solo si el delta es mayor que un mínimo.

Haría lo mismo para adelante o atrás.

Paso 7: Posición de la cara - Robot en movimiento

Una vez que sepa que necesita que el robot se mueva hacia la izquierda o hacia la derecha, hacia adelante o hacia atrás, ¿cómo lo hace?

Dado que este Instructable es un trabajo en proceso, en este momento, solo copié el código de mi robot grande para usarlo en este proyecto. Echa un vistazo a mi lista de reproducción de Robótica en YouTube, donde se detalla todo esto.

En resumen, tengo el código en capas.

La secuencia de comandos de reconocimiento facial de Python realiza solicitudes http al servidor Node.js

El servidor Node.js escucha las solicitudes http de direcciones de movimiento y las convierte en un protocolo serial personalizado

Protocolo serial personalizado entre el servidor Node.js y Arduino

Boceto de Arduino que hace los comandos reales para mover el robot

El curso de Udemy no lo hace como el anterior. Pero como quería hacer un buen progreso y centrarme en el reconocimiento de imágenes real, reutilicé mi código anterior por ahora.

Recomendado: