11
Universidad Mayor de San Andrés Faculta de Ingeniería Ingeniería Electrónica Interacción Hardware Software ETN1022 Proyecto Final Robot y Laberinto Nombres: Callisaya Pacheco Pedro Alejandro Docente: Ing. Clifford Paravicini Gestión: I/2011

Proyect Final Robot y Laberinto

Embed Size (px)

Citation preview

Universidad Mayor de San Andrs Faculta de Ingeniera Ingeniera Electrnica Interaccin Hardware Software ETN1022

Proyecto Final Robot y Laberinto

Nombres:

Callisaya Pacheco Pedro Alejandro

Docente: Ing. Clifford Paravicini Gestin: I/2011

Robot y Laberinto Introduccin El proyecto centra su aplicacin en el desarrollo de un pequeo robot tipo vehculo que sea capaz de encontrar la salida a un laberinto, aplicando los conocimientos que se tienen sobre los mtodos de resolucin aplicables a dicho problema, mediante el uso de sensores que permitan al vehculo desplazarse a travs de laberintos que el robot desconoce, pues solo tendr las informaciones de entrada o posicin inicial y la salida o posicin final a la cual debe llegar. Objetivo General Implementar las herramientas utilizadas en la materia, adems de otros campos auxiliares, para llevar a cabo un robot tipo vehculo que sea capaz de resolver un laberinto. Objetivos Especficos Detallar los pasos necesarios para el desarrollo de este proyecto tanto para su resolucin como para una limita implementacin. Implementar algoritmos de Inteligencia Artificial, para que la bsqueda de la solucin sea de manera inteligente. Generacin de la Solucin Para llevar a cabo el proceso de solucin del sistema se debe llevar a cabo la definicin de diferentes trminos y algoritmos que se emplearan en la bsqueda para la resolucin de este problema. Para comenzar, debido a que el tipo de problemas se llega a su solucin mediante el alcance de una meta, este tipo de agente que se desarrollara debe ser capaz de utilizar los algoritmos implementados para llegar de la mejor manera a su meta. Por otra parte podemos definir el ambiente, en nuestro caso el laberinto, como un ambiente esttico y discreto, de manera que no sufre variaciones durante la resolucin del mismo por parte del agente. Para nuestro problema tenemos: Un estado inicial, que es nuestra entrada del laberinto, es un dato importante y el primero que el agente podra reconocer al momento de iniciar la bsqueda de la solucin, de manera que pueda tomar decisiones para llegar a su meta. El agente debe poseer una serie de operaciones que pueda aplicar, como por ejemplo avanzar hacia un camino, observar y tomar una decisin sobre cual camino seguir cuando se presenten varias opciones y adems regresar por si se encuentra con un camino sin salida.

Dentro de estas operaciones o acciones que el agente puede aplicar, se encuentran los estados en los que el agente se encontrara para tomar decisiones, como el anlisis de una interseccin de caminos, o ser as un camino sin salida, deben ser definidos para seguir con su camino y su bsqueda de solucin. Finalmente el agente debe tener como dato la meta la cual a implementados algoritmos para llegar, definido como nodo objetivo, para el caso del agente la meta prueba que no existen lmites de movilidad, ya que ha logrado salir del laberinto. Para la bsqueda de la solucin una de los mtodos vistos en la materia, puede la aplicacin de bsqueda primero en profundidad, debido a que tenemos un nodo inicial, y solamente una solucin o nodo objetivo, este mtodo puede llevarnos a la solucin del laberinto. Algoritmo desarrollado El desarrollo del algoritmo se desarrollo en funcin a varias subrutinas que generan los datos necesarios para conseguir la solucin del laberinto. Para comenzar con el algoritmo se definen los siguientes pasos y desarrollo de razonamiento: Obtenemos los datos de los sensores infrarrojos tiles para detectar un reflejo, si existe una pared Primero se discrimina si existen ms de un camino: o Si es el caso, se guarda en una posicin de la memoria del microcontrolador, en caso de no existir camino y se retorna, para continuar con el siguiente camino. o No se cumple, pasa a realizar directamente los movimientos correspondientes a las seales obtenidas. Se procede a realizar un movimiento: Giro Izquierda Avance, Avance, Giro Derecha Avance. o Por defecto el robot se desplaza primeramente en direccin hacia la izquierda, si no se encuentra un camino a la izquierda, se desplaza hacia adelante y de esa forma, si no hacia la derecha. o Luego de realizar un movimiento de desplazamiento, actualiza el lugar en donde se encuentra que est definido de forma matricial. Si se encuentra despus de probar cada sensor, no se encuentra un camino, entonces toma una decisin de retornar, da un giro de 180 y inicia una subrutina de bsqueda, su nueva meta no es la salida definida en un principio, en cambio es encontrar el ultimo nodo que encontr con ms de un camino. Procede a realizar movimientos y comparar cada punto en el que se encuentra con el ultimo nodo con ms de un camino, en cambio de con la salida, al encontrar el nodo padre, retorna el dato de la salida como su nueva meta.

Los datos del camino estn almacenados en la memoria en forma de dos bytes, una byte est ocupado por el nmero de fila, y el segundo byte nos representa el nmero de columna. La memoria del microcontrolador est distribuida en dos partes, que se utilizan como pilas, en la primera parte, es utilizada como una pila que nos guardara la columna y fila que ha recorrido el robot despus de cada desplazamiento. En caso de buscar el nodo padre ms cercano, se va borrando el camino que ha guardado, debido que encontr un camino sin salida. La segunda parte de la memoria es una pila que nos ayuda a recordar la fila, columna, y el nmeros de caminos de el ultimo nodo padre, de estar forma en el caso de encontrar un nodo padre con ms de un camino, y dentro de este otro nodo padre, es necesario realizar un recuerdo si este camino fue el camino sin salida.

Finalmente cuando el robot llego a su meta, tiene una subrutina que despliega el resultado, o el camino solucin, mediante el display de 7seg que tiene acoplado el microcontrolador.LIST p=16F877A include "P16f877A.inc" Primeramente se definen las configuraciones del microcontrolador __config _XT_OSC & _WDT_OFF En la memoria del microprocesador definimos diferentes punter y resgitro memorias que nos serviran en el desarrollo del algoritmo FIL_I COL_I FIL_M COL_M FIL_P COL_P PUN_M PUN_P PUN_PA FIL_PA COL_PA NUM_NO NUM_N SENTI RET_1 RET_2 RET_3 AUX DISP PUN_I equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0xA0 0xA1 0xA2 0xA3 0x28 0x29 0x2A 0x2B 0x2C equ 0x2D equ 0x2E equ 0x2F

Iniciamos el programa limpiando y grabando los valores iniciales en cada registro que sea necesario. Adems de configurar los diferentes puertos que posee el microcontrolador. org 0x00 goto INICIO org 0x05

INICIO clrf PORTB clrf PORTA clrf PORTC clrf PORTD clrf RET_1 clrf RET_2 clrf RET_3 clrf NUM_N clrf FIL_P clrf COL_P movlw 0x20 movwf PUN_I movlw 0x30 movwf PUN_M movlw 0xA4 movwf PUN_P clrf SENTI bsf SENTI,0 bsf STATUS,RP0 movlw 0x3F movwf TRISA ^ 0x80 clrf TRISB ^ 0x80 clrf TRISC ^ 0x80 clrf TRISD ^ 0x80 bcf STATUS,RP0 movlw 0x20 movwf FSR Definimos inicialmente las retinas ciclicas que nos permiten introducir los diferentes datos principales para la solucion del problema IN_DAT btfss PORTA,3 ;rutina para introducir la fila inicial incf PUN_I,f btfss PORTA,4 call INCRE ;llama a subrutina de incremento btfss PORTA,5 call DECRE movf DISP,w call dis_num ;subrutina para mostrar el nmero movwf PORTC call delay_us ;llama delay movf FSR,w xorlw 0x24 btfsc STATUS,Z; se fija si metio todos los datos goto PROG_1 goto IN_DAT ;vuelve arriba para setear nuevamente INCRE movf PUN_I,w movwf FSR incf INDF,f movf INDF,w movwf DISP return DECRE movf PUN_I,w movwf FSR decf INDF,f movf INDF,w movwf DISP return

Inicia el programa que posee diferentes tipos de discriminaciones dependientes del tipo de estimulacin que se tenga en el robot. PROG_1 movf FIL_I,w ; comienza el programa preguntadoce si ya se encuentra en la meta subwf FIL_M,w btfss STATUS,Z goto PROG_2 movf COL_I,w subwf COL_M,w btfss STATUS,Z goto TERMINO ;definir rutina de final ; subprograma que se pregunta si hay ms de un camino PROG_2 movf FIL_I,w subwf FIL_P,w btfss STATUS,Z goto cond_2 ;cumple (que no est en la misma fila) movf COL_I,w subwf COL_P,w btfss STATUS,Z goto rut_mov; si esta en el mismo nodo padre, no necesita guardar cond_2 btfss PORTA,0 goto cond_3 btfsc PORTA,1 goto graba cond_3 btfss PORTA,0 goto cond_4 btfsc PORTA,2 goto graba cond_4 btfss PORTA,1 goto rut_mov btfsc PORTA,2 goto graba goto rut_mov ;primero observa el numero de nodos graba movf PORTA,w xorlw b'00111111' btfsc STATUS,Z goto set_nod movlw 0x02 goto set_two set_nod movlw 0x03 set_two movwf NUM_N movf FIL_I,w ;indica en la ram los nodos padre movwf FIL_P movf COL_P,w movwf COL_P movf PUN_P,w call SAVE_P ;llama a guardar padres rut_mov btfss PORTA,0 ;se fija el sensor izq goto rut_del call gir_izq decfsz SENTI,f goto otro_1 movlw 0x04 movwf SENTI otro_1 call avance ;definir un FLAG de grabado o borrado del camino call act_nod call SAVE_M

goto PROG_1 ;despues de girar se va arriba nuevamente rut_del btfss PORTA,1 goto rut_der call avance call act_nod call SAVE_M goto PROG_1 btfss PORTA,2 goto NO_ROAD call gir_der call avance incf SENTI,f movf SENTI,w sublw 0x05 btfss STATUS,Z goto correct movlw 0x01 movwf SENTI call avance call act_nod call SAVE_M goto PROG_1

rut_der

correct

;subrutina que nos define el caso en el que los sensores detecten que existen paredes en los sentidos definidos. Entonces debe realizar un giro de 180 y volver por el camino que sigui, recordando desde una pila en la memoria interna del microncontrolador. NO_ROAD call giro_180 movf SENTI,w addlw 0x02 movwf SENTI sublw 0x06 btfss STATUS,Z goto cinco movlw 0x02 movwf SENTI goto correg cinco movf SENTI,w sublw 0x05 btfss STATUS,Z goto correg movlw 0x01 movwf SENTI correg movf PUN_P,w btfss STATUS,Z goto ERROR_E ;subrutina sin camino vuelta SCH_INT movf FIL_I,w; subwf FIL_P,w btfss STATUS,Z goto PR_INT movf COL_I,w subwf COL_P,w btfss STATUS,Z goto PROG_1 ;saltar a la rutina inicial ; Toma datos de la rutina interna para tomar la decisin del siguiente movimiento a realizar por orden el primer movimiento si es posible, es un giro y avance. Con la finalidad de encontrar el ultimo nodo con ms de un camino. PR_INT

int_izq

btfss PORTA,0 ;se fija el sensor izq. goto int_del call gir_izq decfsz SENTI,f goto int_1 movlw 0x04 movwf SENTI int_1 call avance ;definir un FLAG de grabado o borrado del camino decf PUN_M,f decf PUN_M,f goto SCH_INT ;despues de girar se va arriba nuevamente int_del btfss PORTA,1 ;rutina si exite camino hacia adelante goto int_der call avance decf PUN_M,f decf PUN_M,f goto SCH_INT btfss PORTA,2 ;rutina si existe camino hacia la derecha goto NO_INT call gir_der call avance incf SENTI,f movf SENTI,w sublw 0x05 btfss STATUS,Z goto corrent movlw 0x01 movwf SENTI call avance decf PUN_M,f decf PUN_M,f goto SCH_INT call giro_180 movf SENTI,w addlw 0x02 movwf SENTI sublw 0x06 btfss STATUS,Z goto cincot movlw 0x02 movwf SENTI goto correg movf SENTI,w sublw 0x05 btfss STATUS,Z goto corregt movlw 0x01 movwf SENTI decfsz NUM_N,f goto SCH_INT call REC_PAD goto SCH_INT movlw 0xFF movwf PORTB call delay_us

int_der

corrent

NO_INT

cincot

corregt

TERMINO

; subrutina error no hay camino solucin, si ha llegado a un camino sin salida y no ha encontrado un nodo anterior con ms de un camino. ERROR_E movlw 0x9C movwf PORTB call delay_us call ENDO ;las subrutinas de giros pueden ser definidas dependiendo de tipo de motor paso a paso que se debe utilizar para la implementacin. gir_izq avance gir_der giro_180 return return return return

Se definieron subrutinas de grabado utilizando un puntero para direccionamiento indirecto, que nos sirven para guardar el camino solucin y el numero de nodos padres que se encontraron. ;subrutina para recordar otro nodo padre REC_PAD movf PUN_P,w bsf STATUS,RP0 movwf PUN_PA movf PUN_PA,w movwf FSR decf FSR,f movf INDF,w bcf STATUS,RP0 movwf NUM_N bsf STATUS,RP0 decf FSR,f movf INDF,w bcf STATUS,RP0 movwf COL_I bsf STATUS,RP0 decf FSR,f movf INDF,f bcf STATUS,RP0 movwf FIL_I bsf STATUS,RP0 decf FSR,f movf FSR,w movwf PUN_PA bcf STATUS,RP0 movwf PUN_P return ;subrutina de mostrar nmero dis_num ADDWF PCL,F RETLW 0xFC RETLW 0x60 RETLW 0xDA RETLW 0xF2 RETLW 0x66 RETLW 0xB6 RETLW 0xBE RETLW 0xE0 RETLW 0xFE RETLW 0xE6 ;subrutina de retardo aprox 300ms delay_us movlw 0x0F movwf RET_3

wait_1

decfsz RET_1,f goto wait_1 decfsz RET_2,f goto wait_1 decfsz RET_3,f goto wait_1 return

; sub-rutina de actualizacin de estado fila y columna en la que se ; encuentra el robot act_nod movf SENTI,w decfsz SENTI,w goto este incf COL_I,f return este movf SENTI,w sublw 0x02 btfss STATUS,Z goto sur incf FIL_I,f return sur movf SENTI,w sublw 0x03 btfss STATUS,Z goto oeste decf FIL_I,f oeste movf SENTI,w sublw 0x04 btfss STATUS,Z return decf COL_I,f return ;subrutina para grabar los nodos solucion SAVE_M movf PUN_M,w movwf FSR movf FIL_I,w movwf INDF incf FSR,f movf COL_I,w movwf INDF incf FSR,f movf FSR,w movwf PUN_M return ;subrutina para grabar los nodos padres SAVE_P bsf STATUS,RP0 movwf PUN_PA bcf STATUS,RP0 movf FIL_P,w bsf STATUS,RP0 movwf FIL_PA bcf STATUS,RP0 movf COL_P,w bsf STATUS,RP0 movwf COL_PA bcf STATUS,RP0 movf NUM_N,w bsf STATUS,RP0 movwf NUM_NO movf PUN_PA,w movwf FSR movf FIL_PA,w

movwf INDF incf FSR,f movf COL_PA,w movwf INDF incf FSR,f movf NUM_NO,w movwf INDF incf FSR,f movf FSR,w bcf STATUS,RP0 movwf PUN_P return ENDO BCF PCLATH,3 BCF PCLATH,4 End

Simulacion utilizando Proteus

Conclusiones Podemos llegar a diferentes conclusiones que nos ayudaron a llegar al desarrollo de este proyecto. Es primordial realizar un diseo previo del algoritmo y el tipo de razonamiento que tiene el robot de tipo vehculo, y determinar cules son los datos importantes que son necesarios para que el robot recuerde su camino y no llegue o se quede atrapado en un bucle sin salida. Despus de desarrollar un algoritmo general, podemos proceder con el desarrollo del programa en cdigo ASM utilizando diferentes tipos de prueba de las seales obtenidas podemos determinar las decisiones que el robot puede tomar.