Laberinto Robot Solver, utilizando Inteligencia Artificial con Arduino (7 / 10 paso)

Paso 7: La simplificación (optimización) el camino

Volvamos a nuestro ejemplo. Mirando el primer grupo de intersecciones, nos dimos cuenta de la la primera rama izquierda es en realidad un "callejón sin salida" y por lo tanto, si el Robot en lugar de una "izquierda izquierda atrás" sólo pasa directamente a ese primer cruce, un montón de tiempo y energía se ahorraría! En otras palabras, una secuencia "LBL" en realidad sería el mismo que "S". Eso es exactamente cómo puede optimizarse la ruta completa. Si analizarla usted todas las posibilidades donde se utiliza un "U turn", el conjunto de 3 intersecciones donde este "giro de 180 grados" ("B") aparece ("xBx") pueden ser reducida a sólo uno.

Lo anterior es sólo un ejemplo, a continuación encontrará la lista completa de posibilidades (probarlo):

  • LBR = B
  • LIBRAS = R
  • RBL = B
  • SBL = R
  • SBS = B
  • LBL = S

Tomando la ruta de acceso completa o nuestro ejemplo, nosotros podemos reducirlo:

path = [LBLLLBSBLLBSLL] == > LBL = S

path = [SLlibrasBLLBSLL] == > libras = R

path = [SLRBLLBSLL] == > RBL = B

path = [SLBLBSLL] == > LBL = S

path = [SSBSLL] == > SBS = B

path = [SBLL] == > SBL = R

path = [RL]

¡ Increíble! Mirando el ejemplo es muy claro que si el robot tiene derecho en el primer cruce y luego a la izquierda, llegará el final del laberinto en la ruta más corta!

El primer camino de laberinto Solver código total se consolidará en la función mazeSolve(). Esta función es de hecho la función loop() usado antes, pero incorporando todos esos pasos de optimización almacena y camino.

Cuando terminó el primer sendero, la matriz [] de camino tendrá la ruta optimizada. Se introduce una nueva variable

unsigned int estado = 0; Resolución = 0; final del laberinto = 1

La función de la primera ruta a continuación:

void mazeSolve(void)
{

mientras (! estado)

{

readLFSsensors();

interruptor (modo)

{

caso NO_LINE:

motorStop();

goAndTurn (a la izquierda, 180);

recIntersection('B');

rotura;

caso CONT_LINE:

runExtraInch();

readLFSsensors();

Si (modo! = CONT_LINE) {goAndTurn (a la izquierda, 90); recIntersection('L');}

mazeEnd() otra cosa;

rotura;

caso RIGHT_TURN:

runExtraInch();

readLFSsensors();

Si (modo == NO_LINE) {goAndTurn (derecho, 90); recIntersection('R');}

otra cosa recIntersection('S');

rotura;

caso LEFT_TURN:

goAndTurn (a la izquierda, 90);

recIntersection('L');

rotura;

caso FOLLOWING_LINE:

followingLine();

rotura;

}

}

}

Aquí se introdujo una nueva función: recIntersection (dirección)

Esta función se utilizará para el almacén de la esquina y también para llamar a otra función simplifyPath(), que se reduce el grupo de 3 intersecciones que implican un giro en "u" como vimos antes.

void recIntersection(char direction)
{

camino [longitud] = dirección; Almacenar la intersección en la variable path.

Longitud ++;

simplifyPath(); Simplificar el camino aprendido.

}


El crédito de la simplifyPath () función es Patrick McCabe para la ruta de código de problemas (para más detalles, visite por favor https://patrickmccabemakes.com! La estrategia de simplificación de la ruta de acceso es que cada vez que encontramos una secuencia xBx, nosotros podemos simplificar cortando el callejón sin salida. Por ejemplo, LBL == > S como vimos en el ejemplo.

void simplifyPath()

{

Si (longitud < 3 || camino [longitud-2]! = 'B') volver; sólo simplificar el camino si la segunda a la última vuelta fue una 'B'

int totalAngle = 0;

int i;

para (i = 1; i < = 3; i ++)

{

Switch(path[pathLength-i])

{

caso 'R':

totalAngle += 90;

rotura;

caso 'L':

totalAngle += 270;

rotura;

caso 'B':

totalAngle += 180;

rotura;

}

}

totalAngle = totalAngle % 360; Obtener el ángulo como un número entre 0 y 360 grados.

Switch(totalAngle) / / reemplazar todos los giros con una sola.

{

caso 0:

camino [longitud - 3] = de ';

rotura;

caso 90:

camino [longitud - 3] = 'R';

rotura;

caso 180:

camino [longitud - 3] = 'B';

rotura;

caso de 270:

camino [longitud - 3] = 'L';

rotura;

}

Longitud-= 2; La ruta es ahora dos pasos más cortos.

}

Artículos Relacionados

Inteligencia Artificial basados en Arduino Robot que habla

Inteligencia Artificial basados en Arduino Robot que habla

Este proyecto va a hacer nuestro robot hablando con Arduino basada en inteligencia artificial.Que en nuestro proyecto anterior hicimos nuestro robot que se verificaron en comando de voz del teléfono.Se puede ver aquí.Este proyecto que desarrollemos n
Construya su propio ROBOT insecto utilizando ARDUINO y SERVO

Construya su propio ROBOT insecto utilizando ARDUINO y SERVO

Hola, estoy con una instructalble más. Voy a enseñarte cómo construir un robot insecto utilizando Arduino y servomotores. Suena cool, verdad?. ¿Qué parece el uso de este robot? Debido a su tamaño compacto que puede ser utilizados en defensa, pueden t
Construir tu Robot de Streaming de Video en Internet controlado con Arduino y frambuesa Pi

Construir tu Robot de Streaming de Video en Internet controlado con Arduino y frambuesa Pi

< el instructivo y el código están listos. ¡ Disfrute! Dejo un comentario Comentarios! >Yo soy (aka LiquidCrystalDisplay / Italia), un estudiante de 14 años de aprendizaje de Israel en el Max Shein secundaria para matemáticas y ciencia avanzada. Est
Línea básica siguiente Robot con Arduino

Línea básica siguiente Robot con Arduino

07/09/2015Han pasado unos años desde que publicamos inicialmente básica línea siguiente Robot con Arduino tutorial, y parece que mucha gente encuentra útil que debemos publicar una actualización que funciona actual de las bibliotecas de Arduino, incl
Gesture control car(robot) con Arduino y Android(bluetooth)

Gesture control car(robot) con Arduino y Android(bluetooth)

Hola amigos,Aquí es un proyecto interesante por todo lo que mentes creativas que hay. Vamos a construir un auto RC android teléfono controlado.Nada podría ser más fascinante que los coches de controlados remotos. Éste utiliza Bluetooth para la comuni
Hacer un robot simple de RF inalámbrico con Arduino!

Hacer un robot simple de RF inalámbrico con Arduino!

ACTUALIZACIÓN: HE AÑADIDO CONTROL DE JOYSTICK A ESTE ROBOT. POR FAVOR CONSULTE EL PASO 7 SI DESEA CONTROLAR EL ROBOT POR MEDIO DE JOYSTICK.Hola,Este es mi primer instructivo y en este tutorial voy a mostrarte, cómo construir un simple robot inalámbri
Inalámbrico de Omán Robot direccional controlada fútbol con nRF 24L 01 + y Arduino

Inalámbrico de Omán Robot direccional controlada fútbol con nRF 24L 01 + y Arduino

Hey todo el mundoBienvenidos a mi primer instructable. Un robot WiFi controlado Omaní direccional robot.a inalámbrico controlado puede ser utilizado en muchos ways.i hecho para jugar un fútbol porque hubo un evento de fútbol jugar robots en mi instit
Cómo construir obstáculos evitando Robot para principiantes con Arduino Tutorial

Cómo construir obstáculos evitando Robot para principiantes con Arduino Tutorial

Este Tutorial es para cualquier persona para empezar con arduino. Vamos construir un obstáculo evitando el robot que utiliza un sensor de ultrasonidos HC SR-04 para detectar objetos y 2 servos de continua (360 grados) conectados a una fuente de bater
2 ruedas Self Balancing Robot con Arduino y MPU6050

2 ruedas Self Balancing Robot con Arduino y MPU6050

2 ruedas Self Balancing Robot con Arduino y MPU6050.Usar Arduino como el controlador y sensor de MPU6050 para controlar el equilibrio. Sólo añadir un modulo Serial Bluetooth simple y utilizar una aplicación de controlador Serial de Bluetooth para el
Steampunk ESP8266 Internet con reloj utilizando el IDE de Arduino

Steampunk ESP8266 Internet con reloj utilizando el IDE de Arduino

¿Qué se obtiene cuando un anillo de NeoPixel, una placa Arduino Wifi barata y un láser de corte entrar a un salón de Punk de vapor?Una moda Steampunk Internet diseñado con reloj utilizando el ESP8266 y el IDE de Arduino por supuesto!Aquí es un proyec
Robot de gesto controlado con Arduino

Robot de gesto controlado con Arduino

Este gesto controlado utiliza robot Arduino, acelerómetro ADXL335 y par transmisor/receptor de RF.Dividiremos el robot entero en 3 partes el emisor, el receptor y el robot.Los diferentes gestos que se ha asignado a la dirección de los bot son-Mano pa
Mando a distancia Robot con Arduino

Mando a distancia Robot con Arduino

L293D es un doble motor driver puente H circuito integrado (IC). Controladores de motor actúan como amplificadores de corriente ya que llevan un control de poca intensidad de señal y proporcionan una señal de corriente más alta. Esta señal de corrien
Utilizando un controlador NES para emuladores con Arduino y procesamiento

Utilizando un controlador NES para emuladores con Arduino y procesamiento

He encontrado varias formas de conectar un controlador NES al ordenador para su uso como un emulador de gamepad pero ninguno parece ser simple y compatible con lo que tenía en mano.Ésta sólo funciona con Arduino Leonardo, Micro y debido: https://gist
BASIC TUTORIAL sobre inteligencia ARTIFICIAL MARKUP lenguaje (AIML) a través de Bloc de notas

BASIC TUTORIAL sobre inteligencia ARTIFICIAL MARKUP lenguaje (AIML) a través de Bloc de notas

Inteligencia Artificial Markup lenguaje (AIML) es un lenguaje de programación que es una especificación de lenguaje de marcado Extensible (XML) utilizada por chatbot, verbot, pandorabot, superbot y otro robot parlante.Fue desarrollado por el Dr. Rich