Tabla de contenido:

Robot de reconocimiento de señales de tráfico Raspberry Pi 4: 6 pasos
Robot de reconocimiento de señales de tráfico Raspberry Pi 4: 6 pasos

Video: Robot de reconocimiento de señales de tráfico Raspberry Pi 4: 6 pasos

Video: Robot de reconocimiento de señales de tráfico Raspberry Pi 4: 6 pasos
Video: Robot Autónomo con Raspberry Pi y Arduino - #NEXTPCB 2024, Noviembre
Anonim
Robot de reconocimiento de señales de tráfico Raspberry Pi 4
Robot de reconocimiento de señales de tráfico Raspberry Pi 4

Este instructable se basa en mi proyecto universitario. El objetivo era crear un sistema donde una red neuronal analiza una imagen y luego, basándose en el reconocimiento, le dice a un robot arduino que se mueva a través de Ros.

Por ejemplo, si se reconoce una señal de giro a la derecha, el robot girará a la derecha, si se reconoce una señal de giro a la izquierda, el robot girará a la izquierda, si no se reconoce ninguno, el robot continuará hacia adelante. El conjunto de datos que se utilizará es el reconocimiento oficial de señales de tráfico del INI (2019) (Institut Fur Neuroinformatik), este conjunto de datos tiene 43 clases, sin embargo, solo se necesitan dos; Las carpetas 00033 y 00034 del conjunto de datos son señales de giro a la izquierda y a la derecha.

Paso 1: requisitos

Requisitos
Requisitos
Requisitos
Requisitos
Requisitos
Requisitos

Los requisitos para este proyecto son los siguientes:

Un robot arduino. (básicamente un arduino uno, un controlador de motor y motores) (no es necesario si no está utilizando un robot)

Una frambuesa pi 4.

Una cámara pi.

Software requerido:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (no es necesario si no está utilizando un robot)

Ros (no es necesario si no está utilizando un robot)

Cualquiera que sea su ide de python favorito (en el raspberry pi, uso Thonny).

Para configurar OpenCV y Tensorflow, siga las instrucciones de Adrian. Enlace:

Recomiendo mirar tantos de sus tutoriales como sea posible, son realmente interesantes y son útiles tanto para principiantes como para intermedios.

Paso 2: entrenamiento de datos

El script del tren está diseñado para acceder al conjunto de datos que compila alrededor de 50, 000 imágenes de 43 clases. La secuencia de comandos está escrita en Python, utilizando una variedad de bibliotecas: os: esto es para vincular la secuencia de comandos de Python al directorio correcto donde se encuentra el conjunto de datos. Matplotlib: esto es para mostrar los datos del modelo de entrenamiento. Tensorflow y keras: estas son las bibliotecas que se utilizan para crear el modelo de red neuronal artificial, se utilizan para diseñar el modelo. Numpy: esta biblioteca es para convertir imágenes en una matriz que luego se puede pasar por el modelo para recuperar una predicción.

El script adjunto es el código de Python para hacer un modelo a partir del conjunto de datos. Consiste en 2D convolucional con una entrada (5, 5) y una activación de relu y luego agrupación, una vez hecho esto, la entrada pasa por otra convolución con una entrada (3, 3) con la misma activación y agrupación. Esto sucede una última vez antes de aplanarse y luego se aplica la densidad a la cantidad de clases que hay, en este caso 43.

El siguiente paso fue compilar el modelo. Esta es la parte que establece el optimizador, un sgd era lo más adecuado ya que era similar al optimizador utilizado en la asignación 1. Sgd significa descenso de gradiente estocástico. También dentro del compilador es necesario establecer la pérdida, elegir una pérdida sparse_categorical_crossentropy es el mejor ajuste ya que las categorías son como números enteros y el modelo generará una predicción para cada clase como un valor flotante entre 0 y 1. 1 con una precisión del 100%.

Una vez que el compilador está completo, es necesario aplicar un generador para que el modelo comience a procesar las entradas de la imagen. El generador consta de varias partes: training_set: este es el enlace al conjunto de datos utilizado para el entrenamiento, steps_per_epoch: este es el número de pasos por época que se requieren, épocas: estas son las veces que el programa iterará a través de un conjunto completo de datos, validation_data: este es el enlace al conjunto de datos utilizado para la validación, validation_steps: el número de pasos utilizados para la validación, la validación ocurre al final de cada época.

Por lo general, se debe realizar un borrado completo de todo el conjunto de datos por época. Por lo tanto, por ejemplo, un conjunto de datos de 1024 imágenes requerirá: Tamaño de lote = 32, Pasos por época = 32, Épocas = 1. Cada paso incluye el tamaño de lote completo, por lo que con un tamaño de lote de 32 los pasos serán 32. En el otro Por otra parte, es mejor tener un tamaño de lote mayor que el número de clases, esto se debe a que si el tamaño de lote es más pequeño, entonces cada paso no puede incluir una imagen de cada clase.

Una vez que el modelo ha terminado de entrenar, usando matplotlib el programa hará un gráfico de los resultados, esto muestra el historial del entrenamiento de principio a fin. El gráfico consta de precisión, precisión de validación, pérdida y pérdida de validación, esto se divide por época para mostrar cómo progresó el entrenamiento. La etapa final es guardar el modelo como un archivo.h5 al que se puede acceder más adelante para el proceso de predicción. Guardar el modelo significa que cada vez que se ejecuta el programa de predicción, no es necesario volver a ejecutar el programa de entrenamiento. El programa de entrenamiento puede durar hasta 10 minutos por época en una frambuesa pi.

Se adjunta el guión de entrenamiento:

Paso 3: implementación de las predicciones de la cámara Pi

El siguiente programa es el guión de predicción y publicación.

La primera etapa es cargar el modelo usando model.load (). La segunda etapa es iterar a través de los fotogramas de la cámara pi usando opencv y luego cambiar el tamaño del fotograma al mismo tamaño que los tamaños de entrada utilizados en la etapa de entrenamiento, 32 x 32 píxeles. Una vez hecho esto, el nuevo marco redimensionado se pasa por el modelo usando model.predict () que genera una matriz, cada elemento de la matriz es un flotante de 0 a 1, el índice del elemento es el mismo que la clase que representa, por lo tanto el primer elemento es la clase uno y el número es la predicción de certeza de que la imagen es de esa clase. P.ej.

NOTA: Si no está utilizando el lado del robot. Simplemente elimine las líneas:

"importar rospy"

def hablante (dirección):

mensaje = Cadena ()

pub = rospy. Publisher ('robot', String, queue_size = 10)

rospy.init_node ('hablador', anónimo = Verdadero)

mensaje = dirección

rospy.loginfo (mensaje)

pub.publish (mensaje)"

"hablador (dirección)"

Se adjunta el script de la cámara Pi.

Paso 4: Robot Arduino

El último paso es el script del programa del robot.

Está escrito en C ++ y es un archivo.ino para arduino uno. El programa requiere la biblioteca ros que se puede encontrar en el administrador de bibliotecas dentro del ide. Una vez que esto se importa, hay archivos de ejemplo, elegí expandir el archivo de parpadeo del led ya que esto haría un objetivo similar al que necesitaba. El programa continúa en bucle hasta que se desconecta la energía, primero escucha al robot del tema, cuando detecta un comando de ese tema, tendrá una declaración if para ver lo que dice el comando. Si el comando se deja, el script ejecuta el método de giro a la izquierda, si el comando está a la derecha, ejecutará el método de giro a la derecha y, de lo contrario, ejecutará el método de avance. Estos tres métodos son muy similares entre sí, le dicen a los pines digitales que sean BAJOS (tierra) o 100 (PWM) para que el robot no sea demasiado rápido al decirle al controlador del motor que solo deje un poco de voltaje fuera. El orden de estas salidas es lo que hace que el robot gire a izquierda y derecha o avance, esto se debe a la orientación de la tensión que va a los motores.

Se adjunta el script.ino para arduino.

Paso 5: prueba

Pruebas
Pruebas
Pruebas
Pruebas
Pruebas
Pruebas

Las imágenes adjuntas para que el proyecto de principio a fin. La primera imagen muestra el entrenamiento en proceso. Una vez que se completa, se muestra una impresión del modelo realizado. La tercera imagen muestra una predicción del guión de entrenamiento. esta es la última etapa del guión de entrenamiento. Si busca en la carpeta en la que se encuentra el script de entrenamiento, se ha creado un gráfico y un modelo. El gráfico debería verse como la imagen 4 aquí, esto muestra el historial del entrenamiento de principio a fin.

La imagen final es mientras se ejecuta el script de la cámara pi, es una transmisión en vivo de la cámara pi. se hace una predicción en cada cuadro y la predicción se imprime en el terminal. El cuadro muestra lo que está viendo la cámara.

Se adjunta mi informe universitario para este proyecto. Lea para obtener más detalles del proyecto.

Paso 6: todos los archivos adicionales

Todos los archivos adicionales
Todos los archivos adicionales

Algunos de estos fueron archivos de prueba que hice a lo largo del camino.

Recomendado: