Tabla de contenido:

Robot caótico de autoaprendizaje: 3 pasos
Robot caótico de autoaprendizaje: 3 pasos

Video: Robot caótico de autoaprendizaje: 3 pasos

Video: Robot caótico de autoaprendizaje: 3 pasos
Video: Curso de Robotica [Video Tutorial 3] - Plataformas para aprender robótica 2024, Mes de julio
Anonim
Robot caótico de autoaprendizaje
Robot caótico de autoaprendizaje

¿Está interesado en el aprendizaje automático, la IA o los robots? No es necesario trabajar en una universidad elegante. Esta es una descripción de mi robot caótico. Es un robot muy simple para demostrar cómo usar código de autoaprendizaje y cómo implementarlo en una plataforma arduino, en este caso un Arduino debido. ¡Es una plataforma muy barata!

El código hace evolucionar al robot para que aprenda a gatear. Obtiene retroalimentación del mouse que se arrastra detrás. El código es "genético". Esto significa que se prueban varios individuos y los mejores se mantienen y tendrán bebés. Esto significa que el código evoluciona de forma evolutiva.

Paso 1: Hardware AKA el robot

Hardware AKA el robot
Hardware AKA el robot
Hardware AKA el robot
Hardware AKA el robot
Hardware AKA el robot
Hardware AKA el robot

Necesitas:

- 1 Arduino Due

- 8 microservos

- 1 ratón PS / 2

- 1 cambiador de nivel

- alguna variante de un protector de sensor o similar, me cansé del protector de sensor y soldé el mío.

-cables

-Fuente de alimentación externa de 5V para los servos

- algunas piezas de chatarra, algo de pegamento y algo de hilo de acero. ¡Y cinta!

Así que pon el Due en el suelo. Pon los servos en un anillo a su alrededor. Póngalos juntos con chatarra, pegamento e hilo. ¡Esta es la parte del caos! Dado que su diseño es caótico, es impredecible determinar cómo moverse para que se arrastre. ¡Es por eso que el código de autoaprendizaje es el camino a seguir!

Consejos: utilice algunas piezas de metal bastante pesadas, facilita el movimiento del robot.

Conecta los servos al debido, en mi caso están conectados a D39, 41, 43, 45, 47, 49, 51, 53.

Conecte los servos a la fuente de alimentación externa de 5V. Para esto, construya algún tipo de escudo, o use un escudo de sensor o similar. NO alimente los servos desde el pin dues 5V, no es suficiente, Due se quemará. Usé una pequeña placa prototipo para distribuir los 5 V a todos los servos. Esta placa también contiene la palanca de cambios de nivel para el reloj del mouse PS / 2 y las líneas de datos. La placa también alimenta al ratón con 5V. ¡Recuerde conectar la tierra de la alimentación externa a Arduino debido a la tierra! Los esquemas muestran cómo conectarlo todo.

Conecte el PS / 2 a la alimentación (5 V) y a tierra. Conecte el reloj y la línea de datos del PS / 2 al Due a través de un cambiador de nivel. (el vencimiento va a 3.3V, PS / 2 va a 5V). Conecte el reloj en D12 y los datos en D13.

Para obtener detalles sobre el protocolo PS / 2, este es un muy buen instructable:

www.instructables.com/id/Optical-Mouse-Od…

La biblioteca PS / 2 de jazzycamel que he usado:

Paso 2: el código

El código
El código

Primero déjame decirte: NO soy programador. Algunas partes son muy extensas, un programador experto podría, por supuesto, acortarlas, etc.

El código es de autoaprendizaje y este es el núcleo del proyecto. ¡Esta es la parte divertida! Significa que el robot evoluciona y mejora cada vez más, en este caso mejora en el rastreo. Lo sorprendente de esto es que el robot evolucionará a lo que sea que le alimentes. En este caso, arrastra un mouse PS / 2 y cuanto más se arrastra el mouse, más puntos obtiene.

Esto también significa que puede usar este código para entrenar a su robot para que haga otra cosa, ¡siempre y cuando se mida y retroalimente al robot!

Como puede ver en las imágenes, el mouse se arrastra sobre un cordón delgado. Al principio fue arrastrado por el cable del mouse. Sin embargo, el cable es un poco rígido, por lo que el robot aprendió a agitar el mouse en lugar de arrastrarlo. El temblor produjo puntos altos …

El código usa 50 individuos. El núcleo de esto es una matriz de 50x50 bytes.

Un individuo es una matriz de bytes. Cuando se utiliza el individuo para ejecutar el robot, este individuo se envía a una función en el código llamada "tolken".

Al comienzo de una ejecución hay 8 variables m1, m2, m3, m4, m5, m6, m7 y m8 (una para cada servo). En este robot todos tienen valores iniciales constantes. En "tolken" los mś se transforman en un bucle de caso / swich dependiendo de los valores del individuo. por ejemplo, un valor de "1" ejecuta lo siguiente: m1 = m1 + m2.

Si un individuo es: 1, 2, 3, 0, 0, 0, 0….. entonces el mś se transformará de la siguiente manera:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken es una lista de 256 operaciones matemáticas diferentes, por lo que cada valor posible de la matriz de individuos representa un cambio matemático de los valores m.

El proceso de tolken se repite 4 veces, con lectura entre cada vuelta, generando cuatro códigos de motor diferentes para cada "m". Los códigos de motor son los valores que luego se envían a los servos.

En cada paso de la evolución, 4 individuos compiten en el rastreo. Los dos mejores individuos serán padres de dos bebés, los bebés reemplazarán a los dos peores individuos. Cuando se crean bebés, un empalme de "código genético" de uno de los padres se intercambia por una porción del otro padre, esto crea dos nuevos individuos.

Si ningún individuo se desempeña en absoluto, se producirá una mutación de los individuos para generar otros nuevos.

Puede encontrar el código en GitHub:

Paso 3: ¿Cómo entrenarlo?

Ésta es la parte complicada. Para entrenar correctamente, necesitas "reiniciarlo" después de cada carrera. Esto significa que debes colocarlo en la misma posición cada vez.

He puesto algunos puntos de control dentro del código para asegurar que el robot esté en su posición inicial.

Así que alinea el robot y déjalo funcionar.

Prueba a 4 individuos y luego elige a los 2 mejores para ser padres. Después de reemplazar lo peor con los bebés, imprime algunos datos sobre el desempeño de los individuos. También imprime la matriz de 50x50. Es aconsejable copiar esto en una hoja de Excel o similar. (o escriba algún código de necesidad en el procesamiento) Si el debido se restablece (esto sucede por varias razones), entonces no perderá su trabajo de entrenamiento. Puede copiar / pegar la matriz en el código y seguir entrenando donde lo dejó.

Mi robot aprendió a gatear después de un par de horas. Descarga el video para verlo rastrear. ¡No fue en la dirección que pensé que iría!

¡Prueba también diferentes pisos! Mi robot funcionó mejor en una alfombra de nailon.

Posibles mejoras:

1. Sería mejor tener un nano separado para leer el mouse PS / 2 y enviar la distancia procesada movida en serie al nano. La lectura de mi mouse PS / 2 es un poco inestable. Esta es la razón por la que el mouse lee / borra partes del código.

2. Algún tipo de equipo de prueba que arrastrara al robot de regreso a su posición inicial aceleraría el entrenamiento.

3. Creo que es aconsejable entrenarlo un poco más lento que yo. Un entrenamiento más lento asegura que se entrena "en la dirección correcta". El rendimiento medio de varias pruebas de funcionamiento podría ser una posible vía.

Recomendado: