Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Noviembre 2006
Trabajos en Grupo
NDICE
1.Introduccin......................................................................................................................... 4
2.Historia de las competiciones .............................................................................................. 5
3.Competiciones ..................................................................................................................... 7
Alcabot e Hispabot ............................................................................................................. 7
Micromouse ........................................................................................................................ 9
4.Anlisis de estructuras y diseos de robots de laberinto ................................................... 10
El chasis ............................................................................................................................ 10
Forma............................................................................................................................ 10
Materiales ..................................................................................................................... 11
Mtodo de manejo y el dar la vuelta ................................................................................ 12
Grados de movimiento ................................................................................................. 12
La traccin .................................................................................................................... 13
Las ruedas ..................................................................................................................... 15
5.Sensores ............................................................................................................................. 16
Sensores de proximidad.................................................................................................... 18
Sensores de distancia ........................................................................................................ 19
6.Motores .............................................................................................................................. 21
Motores C.C. .................................................................................................................... 21
Motores paso a paso ......................................................................................................... 22
Servo motores ................................................................................................................... 22
7.Bateras .............................................................................................................................. 23
8.Anlisis de algoritmia ........................................................................................................ 24
Algoritmos con laberinto conocido. ................................................................................. 24
Algoritmo de DIJKSTRA: ........................................................................................... 26
Bsqueda de BREADTH FIRST.................................................................................. 32
Algoritmo de BELLMAN-FORD ................................................................................ 33
Algoritmos con el laberinto desconocido ......................................................................... 34
Seguir la pared .............................................................................................................. 34
Llenar caminos ............................................................................................................. 35
Algoritmo aleatorio ...................................................................................................... 36
Pgina 1
Trabajos en Grupo
Pgina 2
Trabajos en Grupo
15.Conclusiones. .................................................................................................................. 82
16.Bibliografa. ..................................................................................................................... 84
Pgina 3
Trabajos en Grupo
1. INTRODUCCION
El documento desarrollado a continuacin trata sobre los Robots de laberinto o Robots
de Micromouse. El trabajo est desarrollado por un grupo de estudiantes de la UAH para
la asignatura de Microrrobots. El fin principal de este trabajo es aportar una base con la que
enfrentarse al desarrollo de un robot de laberinto.
Durante todo el texto abordamos diversos temas relacionados con este tipo de robots.
Para poder desarrollar el tema con la mayor sencillez y amplitud posible hemos dividido el
trabajo en varios aspectos.
Empezamos desarrollando el trabajo dando unas pinceladas de historia acerca de las
competiciones que se han realizado tanto a nivel nacional como internacional. Seguimos
con un anlisis de las estructuras ms usadas con sus ventajas e inconvenientes.
Obviamente necesitamos algn mtodo para salir del laberinto, esto lo abordamos en un
apartado dedicado exclusivamente a la algoritmia, control y simulacin. Para completar el
trabajo desarrollado hemos realizado una propuesta de diseo utilizando herramientas de
diseo en 3 dimensiones y llevando acabo el proyecto.
Finalmente aportamos unas conclusiones y consejos para que quien lo desee pueda
realizar un robot sin tener los mismos problemas que nos ocurrieron a nosotros.
Pgina 4
Trabajos en Grupo
1977
En este ao se introdujo el concepto de microsmouse por el IEEE. En mayo se
anunci la primera competicin de Micromouse que sera celebrada en 1979 en
Nueva York.
1980
El profesor Juan Billinsley, de la escuela politcnica de Portsmouth, introdujo la
primera competicin europea y modific las reglas, consiguiendo que las
competiciones sean parecidas a las de la actualidad.
1981
En la exposicin micro de Pars hubo cinco micromouse, el primer lugar fue para
el ratn Esterlina, alcanzando la meta en menos de 3 minutos.
En la segunda competicin Britnica de micromouse, Dave Woodfield consigui
un tiempo de 47 segundos, proclamndose campen. Esterlina consigui un
segundo lugar con 1min 37sec.
1985
Se llevo a cabo el First World Micromouse Competiton en Tsukuba, Japn.
1986
Los E.E.U.U. hicieron su primera competicin, celebrada en Atlantic City.
1987
Se produjo la primera competicin de Singapur
Pgina 5
Trabajos en Grupo
1989
Se lanz la primera competicin internacional de Micromouse de Singapur.
1992
Tenemos ya la sptima entrega de competicin anual del micromouse de IEE, en
Londres.
Pgina 6
Trabajos en Grupo
3. Competiciones
A continuacin presentamos las competiciones ms conocidas.
ALCABOT
o 2000
NORMATIVA: El concurso ser ganado por aqul micro-robot que
consiga salir del laberinto en el menor tiempo. Se dispone de una
nica entrada y una nica salida.
http://www.depeca.uah.es/alcabot/alcabot2000/normativa.htm
N PARTICIPANTES: 5
o 2001
NORMATIVA: El laberinto tiene una entrada y una salida y los
robots tienen que entrar en el laberinto y salir en el menor tiempo
posible.
http://www.depeca.uah.es/alcabot/alcabot2001/normativa.htm
N PARTICIPANTES PRESENTADOS: 10
o 2002
NORMATIVA: La prueba consistir en sacar al robot desde un punto
de partida conocido mediante sorteo, quince minutos antes del
comienzo de cada sesin. Podr salir por cualquiera de las dos
salidas del laberinto. El plano del laberinto es conocido para los
participantes.
http://www.depeca.uah.es/alcabot/alcabot2002/normas_laberinto.htm
N PARTICIPANTES PRESENTADOS: 35
o 2003
NORMATIVA: Coincide con Hispabot 2003. Es equivalente a la de
Alcabot 2002.
http://www.depeca.uah.es/alcabot/hispabot2003/laberinto.pdf
Pgina 7
Trabajos en Grupo
N PARTICIPANTES PRESENTADOS: 12
o 2004
NORMATIVA: Se introducen novedades respecto aos anteriores:
Dado que el laberinto es conocido, se primar a los Robots
capaces de incorporar algoritmos de navegacin.
Las salidas del laberinto son dos: una de ellas ser vlida,
mientras que la otra tendr una penalizacin.
El Ratn obtendr bonificacin, si logra introducir una pelota
de ping-pong estndar en esa casilla central.
http://www.depeca.uah.es/alcabot/data/doc/HISPA04_Normativa_La
berinto_v1_0.pdf
Por lo dems la normativa es equivalente a la de los aos 2002 2003.
N PARTICIPANTES PRESENTADOS: 11
o 2006
NORMATIVA: Se introducen novedades respecto aos anteriores:
Rampa de entrada
Balizas.
Globos.
La canasta est en el exterior.
El mapa del laberinto no es conocido.
http://www.depeca.uah.es/alcabot/data/doc/HISPA06_Normativa_La
berinto_v2_1.pdf
N PARTICIPANTES PRESENTADOS: 4
HISPABOT
La normativa de cada ao de Hispabot es equivalente a la de Alcabot de cada ao
respectivamente.
Pgina 8
Trabajos en Grupo
N PARTICIPANTES: 11
Pgina 9
Trabajos en Grupo
El chasis
El chasis es la estructura que sostiene y aporta rigidez y forma a nuestro robot. Un
buen smil sera el compararlo con el esqueleto humano. Por lo tanto queda justificada la
importancia de una correcta eleccin.
Forma
Imaginemos que hemos decidido hacer el robot con sensores de contacto, es decir, el
micromouse va por el laberinto, se choca contra una pared y da media vuelta. En este caso
la forma es importantsima puesto que tendremos que pensar en que el robot debe ser capaz
de girar sobre si mismo sin que la pared se lo impida, por ejemplo, con un cuadrado pasara
lo que vemos a continuacin:
Pgina 10
Trabajos en Grupo
http://www.rbzrobotdesign.com/index.php?module=3&id=21
Materiales
Los micromouse se han construido de diversos materiales: metal, plstico, madera
El mejor criterio para elegir uno u otro ser, en primer lugar, que dicho material este
disponible, ya que de poco nos servir pensar en uno que no podamos conseguir. Y, entre
los que encontremos, habr que elegir entre uno u otro por aspectos como la resistencia,
facilidad de mecanizado y peso.
Las soluciones que se han ido viendo en las competiciones son muy variadas, por
ejemplo en el 2002 el robot AURELIO (a la derecha) utiliz
policarbonato diciendo que: este material es resistente, a la par
que ligero, permite ser cortado y troquelado sin presentar
problemas.
Pgina 11
Trabajos en Grupo
Grados de movimiento
Empezaremos viendo los dos tipos de movimiento que podemos tener, en funcin de
los grados de libertad en el giro.
BR3 MOUSE
Pgina 12
Trabajos en Grupo
La traccin
Bsicamente la traccin nos importar en funcin del tipo de giro que proporcione.
Para ver el giro que necesita un robot debemos pensar en la funcin que va a desempear,
es decir, es posible que en ciertos casos necesitemos ms estabilidad que maniobrabilidad o
al contrario.
Existen muchos tipos de tracciones, pero en nuestro caso nos va a interesar
fundamentalmente solo una, por ello diferenciamos, a continuacin, dos tipos, la ms
utilizada y la que no debemos utilizar, explicando porqu:
Diferencial
Para el caso que nos ocupa (micromouse) podemos decir que en el 100% de
los robots premia la maniobrabilidad, y por este motivo utilizaremos una traccin
diferencial, gracias a esto conseguiremos hacer giros de 90-180 sin ninguna
complicacin.
Pgina 13
Trabajos en Grupo
d=
D
c
Donde:
d = distancia recorrida.
D = dimetro de la rueda.
c = nmero de pulsos del encoder por vuelta.
n = nmero de pulsos leidos.
La anterior expresin sera en el caso de que las dos ruedas se moviesen a la
vez.
Si lo que queremos es hacer un giro de x grados la ecuacin sera la
siguiente:
x=
Drueda 360
n
c Dbase
Donde:
x = grados girados.
Drueda = dimetro de la rueda.
Dbase = dimetro de la base tomando como limite de la
circunferencia el inicio de las ruedas.
c = nmero de pulsos del encoder por vuelta.
n = nmero de pulsos.
Este movimiento habr que proporcionarlo a ambas ruedas motrices, cada
una en un sentido.
No diferencial
Por otro lado tenemos la traccin no diferencial, en la que las dos ruedas
giran a la vez y el tipo de giro es de la forma en que lo que movemos es un eje que
une ambas ruedas, producindose as el giro de estas.
Si la usramos, el giro sera ms tedioso e incluso podra darnos problemas.
Lo vemos a continuacin:
Pgina 14
Trabajos en Grupo
Las ruedas
Antes de ponernos a montar las ruedas debemos ver dnde deben estar colocadas. En
principio podemos pensar en una colocacin equidistante en la base lo mas separadas
posible para mayor estabilidad, ahora bien, si lo hacemos as debemos tener en cuenta cual
ser el eje de giro, en este caso, significara que el robot no girar entorno al centro del
crculo que forma su planta y por tanto colisionar con el obstculo.
Pgina 15
Trabajos en Grupo
http://www.sec.upm.es/agustin/charrito/charrito.html
Aqu vemos como las ruedas motrices estn colocadas de tal forma que el robot har
los giros sobre un punto distinto al centro de la base, en concreto, los giros sern los que
vemos en la figura siguiente:
Una forma sencilla de realizar giros sobre el centro de la base sera el adoptado por el
robot Pi de RBZ Robot Design, el cual, como vemos en la fotografa, utiliza dos ruedas
motrices colocadas en el dimetro de la base y dos ruedas locas para la estabilidad:
Pgina 16
Trabajos en Grupo
El gran inconveniente de este tipo de solucin es que solo nos podremos mover por
zonas completamente lisas, ya que si una de las ruedas locas pasase por algn elevamiento,
por muy pequeo que fuera, alguna rueda motriz dejara de tocar el suelo.
Pgina 17
Trabajos en Grupo
5. SENSORES
Los micromouse necesitan una manera de detectar las paredes dentro del laberinto,
esto lo harn mediante sensores. Distinguimos dos tipos: de proximidad simples o de
distancia.
Sensores de proximidad
Estos tipos de sensores nos dan informacin sobre si hay o no hay algo, es decir, nos
dan una seal binaria (verdadero o falso). Generalmente se montan en las alas de los
robots, de modo que puedan detectar las paredes mirando los techos de estas. Si hay una
pared directamente debajo del sensor, su valor ser verdadero, mientras que si no la hay el
valor ser falso. Un micromouse de este tipo tendra el siguiente aspecto:
Un diseo as tendr por lo menos siete sensores, uno mirando al frente y por lo
menos tres a cada lado. El sensor delantero evita que el ratn se estrelle con una pared
prxima al frente, mientras que los laterales permiten que el ratn corrija su trayectoria. En
el caso de la figura anterior, si los sensores izquierdos leen un valor de 010 indica que el
ratn est centrado dentro de la casilla. Si leemos un valor de 100, indicara que el ratn
est descentrado a la derecha y necesita corregir a la izquierda, y al contrario con un valor
001.
Pgina 18
Trabajos en Grupo
Usar este tipo de sensores tiene otra ventaja. Si por ejemplo leemos el sensor
derecho con un valor de 011, indicara que tenemos una pared perpendicular a la derecha
sin necesidad de desplazarnos a la correspondiente casilla, y por lo tanto invirtiendo menos
tiempo en la exploracin del laberinto
La forma de utilizar estos sensores es la siguiente:
Sensores de distancia
Al contrario que los sensores de proximidad, los de distancia no devuelven un simple
verdadero/falso. Estos miden la distancia fsica entre el robot y la pared, y devuelven un
valor, el cual, el microcontrolador pueda interpretar como distancia.
Pgina 19
Trabajos en Grupo
Este sensor emiten una luz IR sobre la pared que es reflejada y recibida por el
dispositivo de deteccin de posicin (PSD). Dependiendo del ngulo de reflexin el
microcontrolador obtendr el correspondiente dato para poder actuar. Los sensores de este
tipo suelen ser ms inmunes a variaciones del color y de iluminacin.
Pgina 20
Trabajos en Grupo
6. MOTORES
Los motores sern los encargados de generar los desplazamientos en el robot, por lo
tanto, la eleccin de estos ser algo determinante para conseguir un buen movimiento, tanto
en aceleracin como en velocidad punta.
A continuacin comentamos, brevemente, los principales motores, que podremos
utilizar.
Motores C.C.
En un motor C.C. la tensin se aplica directamente a los terminales de este
producindose el movimiento. Una vez polarizado, se alcanza, rpidamente, una velocidad
constante que depender dicho voltaje aplicado y de las caractersticas del motor. La
cantidad de fuerza que se puede generar ser funcin de la corriente por las bobinas, siendo
mayor al aumentar esta, es decir, si queremos generar una cierta velocidad, la corriente que
debemos generar ser mayor si el motor tiene una carga que si no.
Pgina 21
Trabajos en Grupo
Puente en H
Unipolares
Bipolares
Servo motores
Los servos se caracterizan por ser capaces de mantener cualquier posicin, dentro de
su intervalo de operacin, en funcin de la seal de entrada.
Para el caso que nos ocupa, quiz lo ms prctico sera utilizarlo
tras haberle quitado los topes y la electrnica encargada de mantener la
posicin, es decir, lo usaremos como un motor de continua, siendo estos
baratos y con buenas prestaciones.
Esto es lo que utiliza por ejemplo el robot HERTRON:
Pgina 22
Trabajos en Grupo
HERTRON
7. Bateras
La bateras sern la alimentacin de nuestro robot, sin ellas nuestro robot no sera ms
que un amasijo de hierros que no servira para mucho, por eso habr que pensar
detenidamente cual ser el consumo para conseguir que en un futuro no nos encontremos
problemas como que la energa que tenemos no sea la suficiente. No obstante, un gran
inconveniente es el peso de las mismas, por lo que no conviene poner pilas de ms sino solo
las que sean necesarias.
La tabla siguiente enumera algunas de las caractersticas ms tpicas de los tipos ms
populares de bateras:
Alcalinas NiCad
Voltaje de la clula
unidad
1.5
1.2
1.2
voltio
Capacidad
2000
500
1100
mAh
Densidad de la energa
190
44
53
Wh/kg
Resistencia interna
150
10
30
ohm
Cargador
NiMH
Trabajos en Grupo
8. Anlisis de algoritmia
Para abordar un estudio sobre la algoritmia usada en los robots de laberinto, vamos a
hacer una clasificacin basada en si el laberinto es o no conocido.
Pgina 24
Trabajos en Grupo
Se puede observar que dicho robot tiene codificado en memoria la situacin de los
muros horizontales y verticales. Adems, a cada celda le asigna un nmero que le indica la
distancia hasta la salida. De esta manera, en el momento que el robot localice su posicin,
deber desplazarse a la casilla con el nmero ms bajo. Este mtodo es muy utilizado, y
aunque existen diversas variantes, todos se basan en la misma idea:
Con los sensores de distancia, el robot puede detectar los muros a una casilla de
distancia en las cuatro direcciones, y memoriza la informacin.
Pgina 25
Trabajos en Grupo
Algoritmo de DIJKSTRA:
Para explicar este algoritmo hemos recurrido al siguiente ejemplo:
Cada uno de los puntos es un nodo, que en nuestro caso puede representar un cruce
del laberinto. El nodo de partida es a, y las distintas flechas nos muestran los posibles
caminos para ir de un nodo a otro, con su longitud.
Pgina 26
Trabajos en Grupo
Los nodos de color rojo son aquellos que podemos alcanzar desde el nodo inicial
a. La distancia desde a a esos nodos es b=4, d=85. De esta forma, b tiene la distancia
mnima al nodo inicial, ya que cualquier otro camino pasar por ms nodos, y por tanto ser
ms largo. A continuacin, b es coloreado de naranja para indicar que es el camino ms
corto.
Ahora las aristas rojas apuntan a los nodos que ya tienen una distancia final. Las
distancia desde a a los siguientes nodos es de c=22, d=85 y e=16. Como e es el camino
ms corto, lo coloreamos de naranja.
Pgina 27
Trabajos en Grupo
Pgina 28
Trabajos en Grupo
En este caso la distancia a los nodos es d=82, f=42, h=49. La distancia a f ha vuelto
ha cambiado, ya que se ha encontrado otro camino ms corto a travs de los nodos b, c, j.
Coloreamos de naranja el nodo f, ya que tiene la distancia ms corta.
Las distancias son d=82, h=49, i=53. El nodo h tiene la distancia ms corta, as que
lo coloreamos de naranja.
Pgina 29
Trabajos en Grupo
En esta situacin ya tenemos a la vista todos los nodos del ejemplo. Las distancias
son
d=82, g=51, i=53. Coloreamos de naranja el nodo g pues tiene la distancia mnima.
Pgina 30
Trabajos en Grupo
Por ltimo, solo nos queda el nodo d, con distancia d=63, as que lo coloreamos de
naranja, y por tanto el algoritmo ha finalizado.
Qu hemos conseguido? Pues si queremos llegar a un nodo determinado partiendo
de a, nicamente tendremos que seguir las aristas naranjas y encontraremos el camino ms
corto a ese nodo.
http://alumnos.unican.es/uc900/Algoritmo.htm
Pgina 31
Trabajos en Grupo
Paso 1
Paso 2
Paso 3
Paso 4
Paso 5
Paso 6
Paso 7
Paso 8
Paso 9
Pgina 32
Trabajos en Grupo
Algoritmo de BELLMAN-FORD
Es un algoritmo que se utiliz en un principio para el enrutamiento de redes de
datos, el funcionamiento de ste se basa en el tiempo que se tarda de un nodo hasta el
siguiente. As si partimos de un nodo inicial que tendr un valor 0 y queremos dirigirnos
hacia el siguiente, tendremos que ver el tiempo que demora por esa lnea y sumarlo a
nuestro valor inicial que en este caso es 0, entonces si el valor de la lnea es de 7 el nodo
siguiente ser 7 y si la lnea del siguiente nodo al cual nos dirigimos es 3, el valor del
siguiente nodo ser 10.
La diferencia que posee con respecto al mtodo de Dijkstra es que permite valores
negativos en los arcos del grafo, estos valores se colocarn en los arcos si el prximo nodo
dista menos del nodo origen.
(Floyd-Warshal)
www.cs.umu.se
Pgina 33
Trabajos en Grupo
http://www.astrolog.org/labyrnth/algrithm.htm
Pgina 34
Trabajos en Grupo
SOLUCION
CAMINO RECORRIDO
SIN SALIDA
SIN RECORRER
http://www.astrolog.org/labyrnth/algrithm.htm
Llenar caminos
Un algoritmo muy sencillo es el de llenar los caminos sin salida. Solamente es
necesario examinar el laberinto de forma aleatoria y eliminar los caminos que no tengan
salida. Al final slo quedar la solucin, o las soluciones si hay ms de una. Sin embargo,
hay que tener mucho cuidado de utilizar este algoritmo en el laberinto adecuado, ya que
evidentemente, ser totalmente ineficaz en un laberinto que no tenga caminos sin salida. El
otro inconveniente es que, tal y como muestra el ejemplo, el robot tendr que examinar el
laberinto casi en su totalidad, y por tanto no ser adecuado para laberintos muy complejos
que impliquen mucho tiempo de exploracin.
SOLUCION
CAMINO RECORRIDO
SIN SALIDA
SIN RECORRER
http://www.astrolog.org/labyrnth/algrithm.htm
Pgina 35
Trabajos en Grupo
Algoritmo aleatorio
Este algoritmo se basa en moverse al azar, es decir, desplazarse en una direccin y
seguir el pasadizo hasta el siguiente cruce, sin hacer giros de 180 hasta que no sea
necesario. Simula el comportamiento de un ser humano sin memoria y no recuerda por
donde ha pasado, por lo que no garantiza la llegada al final. En contraposicin, es un
algoritmo muy simple.
http://www.ucy.ac.cy/~gracm05/PROCS1/10.pdf
Pgina 36
Trabajos en Grupo
Recursividad
Este mtodo se utiliza para resolver un laberinto haciendo uso de la recursividad.
Esto significa que una funcin se llama continuamente hasta que se resuelva el laberinto,
utilizando las siguientes prioridades, izquierda, derecha, arriba y abajo. x0, y0 indican la
posicin de entrada y xf , yf la de salida. Cada casilla puede tener algunos de los siguientes
valores: muro, camino sin visitar y camino visitado
Pgina 37
Trabajos en Grupo
Funciones utilizadas:
Funcin vlida:
Se le pasa como datos de entrada la fila y la columna hacia donde se dirige y retorna un
valor booleado indicando si la posicin es correcta.
Algoritmo:
resultado vale VERDADERO
si nos hemos salido del laberinto o si a donde vamos hay pared o ya fue visitada
resultado vale FALSO
Funcin recorrer:
Retorna un valor buleano para as ver si se lleg o no al final, esta es la funcin que utiliza
la recursividad para moverse por el laberinto, los datos de entrada es la posicin actual
donde se encuentra y dentro de la funcin se pasa a si misma los valores en X e Y del
siguiente movimiento, marcando cada casilla por donde ha pasado para no retroceder e
intentando moverse primero a izquierdas, derechas, arriba y finalmente abajo pero
asegurndose antes que la casilla donde se mover ser vlida. La condicin de salida de
esta funcin es ver si se lleg a la salida o ver si nos encontramos en un callejn.
Algoritmo:
Si listo vale falso
Se marca la casilla
Si llegamos al final del laberinto
Devolver verdadera
Si no se resolvi el laberinto y la casilla de la izquierda es un movimiento valido
Se llama a recorrer (recursividad) con el valor de la posicin izquierda
Si no se resolvi el laberinto y la casilla de la derecha es un movimiento valido
Pgina 38
Trabajos en Grupo
Algoritmo de Microtauro
El laberinto se considera como una gran matriz donde cada cuadrante de ste es una
casilla del array, cada pared se considera como un 1 y el lugar por donde no ha pasado el
robot se considera como 4. Cada vez que llega a una interseccin de 4 caminos transforma
el 4 en un 3(que significara que el robot puede pasar hasta 3 veces por esa casilla), cuando
se encuentra en un camino bidireccional lo transforma en un 2 (que significara que el robot
puede pasar hasta 2 veces) cuando se encuentra en un callejn al retroceder va
disminuyendo una unidad cada casilla entonces las casillas que tenan un 2 (ya que es un
pasillo) se transformar en 1, dejando as imposibilitado el paso ya que se tratara ahora de
una pared. Pero el robot no solo descuenta una unidad en los callejones, sino que lo hace a
medida que va avanzando, entonces si antes haba pasado por una casilla que tenan un
valor de 3 al pasar nuevamente, significar que ya solo puedo pasar 2 veces ms. Es decir,
el programa sabe por donde hemos pasado y por donde hay posibilidades de ir.
Pgina 39
Trabajos en Grupo
El robot intenta dirigirse hacia el nmero ms alto que lo rodea pero en el caso de
que el nmero ms alto se repita, a la hora de elegir intenta ir por defecto a la derecha del
laberinto, ya que all se encuentra la salida, y a la hora de elegir entre ir arriba o abajo, no
teniendo la posibilidad de seguir avanzando hacia la salida, el robot reconoce en que
direccin se encuentra esta, calcula si se encuentra arriba o debajo de l y se dirige hacia
ella.
Por ltimo el robot posee un sistema de descarte de caminos, que consiste
simplemente en que el robot cuando consigue llegar a una pared establece lo que se ha
llamado puntos de anclaje, entonces cuando el robot consigue llegar a una pared diferente
a sta, se establecera otro punto de anclaje, formando una lnea continua que se
corresponder con el movimiento realizado por el robot. Finalmente observa donde se
encuentra la salida, y dependiendo de si esta se encuentra arriba o abajo de nuestra lnea de
anclaje, se proceder a eliminar la parte en la que esta no se encuentre, ya que si el robot se
pudo mover entre esas 2 paredes, la parte eliminada no ser de ayuda a la hora de encontrar
el camino hacia la salida.
Pgina 40
CMO SE CONSIGUE
PERFECTO?
Trabajos en Grupo
UN
CONTROL
TAN
Diagonales
Recorrer el circuito en diagonal es una buena forma de ahorrar tiempo, pero tambin
es muy peligrosa. Los competidores expertos suelen estructurar sus diseos de tal forma
que sus robots puedan identificar y realizar tramos en diagonal, disminuyendo la longitud
total del recorrido y evitando as perder tiempo en realizar giros. Dependiendo de las
dimensiones de cada celda, nuestro laberinto tendr un ancho en diagonal determinado, que
en las pruebas de micromouse suele estar entorno a unos 110-130 mm, y por supuesto, el
robot deber ser ms estrecho que dicha longitud. Como es lgico, cuanto ms grande sea
nuestro robot, ms precisos deberemos ser, aunque tampoco interesa que el robot sea
demasiado estrecho, porque podramos tener problemas en curvas a velocidades altas. Por
ejemplo, si circulamos a una alta velocidad y realizamos un giro sobre una de las ruedas
para entrar en la diagonal, corremos el riesgo de que, por inercia, el cuerpo del robot se
desplace hacia uno de los lados. En definitiva: debemos disponer de una tolerancia mnima
que nos permita recorrer sin problemas el tramo de la diagonal, as como permitir pequeos
movimientos en torno a las posiciones calculadas. No es raro que durante la competicin
preliminar, muchos de los robots se choquen contra alguna de las esquinas del circuito.
Pgina 41
Trabajos en Grupo
www.robots-dreams.com
Los sensores deben realizar trabajo extra en las diagonales. En el caso de usar
sensores laterales, ahora ya no disponemos de una superficie perpendicular de reflexin. La
variacin de distancia al muro es mayor y asimtrica, por lo que no podemos disponer de
informacin simultnea del lado derecho e izquierdo.
Entonces, cmo se consigue? La respuesta es sencilla, a base de probar y probar, y
realizar los ajustes necesarios. Es en este momento cuando aparecen los beneficios de
disponer de mrgenes seguros desde el comienzo del diseo, para despus modificar el
control y poder correr ms o menos riesgos.
En lnea recta
Recorrer largos tramos rectos puede parecer sencillo, pero estamos seguros de que
el dimetro de las ruedas es el mismo (en el caso de usar motores paso a paso) o que los
bucles de control son los adecuados Qu ocurrira si nuestro robot llegase a chocar contra
una pared del laberinto? Para evitar esto, debemos tener en cuenta los distintos tipos de
errores que podemos cometer para poder actuar convenientemente. Corregir dichos errores
ser una labor necesaria para obtener unos buenos resultados. A continuacin se detallan
algunos de esos errores:
ERROR FRONTAL
http://micromouse.cannock.ac.uk/navigation/straights.htm
Pgina 42
Trabajos en Grupo
Error de distancia frontal: Se produce cuando nuestro robot se encuentra muy cerca
o muy lejos de la pared frontal. Este error es uno de los ms sencillos de corregir, ya que es
muy comn utilizar sensores de posicin que nos permiten realizar la calibracin con
suficiente antelacin. Sin embargo, algunos aspectos como la reflectividad de las distintas
paredes, la direccin e intensidad de la luz ambiental o simplemente la acumulacin de
otros errores, hace que no haya nada establecido sobre este proceso de recalibracin. Segn
[1] utilizar un sensor IR de corto alcance montado en la parte delantera del robot es un
mtodo muy preciso. Hay que tener mucho cuidado con acumular errores de este tipo. En el
peor de los casos, un error frontal de unos 2 cm cada 15 celdas representa un error del
0.7%, que puede ser suficiente para que se produzca una colisin al llegar a una curva. En
algunos casos, aunque no se haya producido colisin, tendremos un error de offset despus
de un giro de 90. En motores paso a paso, un error de ms o menos un paso representa un
error de unos 0.4 mm, que acumulado durante 15 celdas provoca un error de offset de unos
6 mm al realizar un giro. Este error debera ser corregible. En realidad, grandes
correcciones en el error frontal son sntoma de que hemos podido cometer errores graves en
otras partes del sistema de control del robot.
ERROR DE OFFSET
http://micromouse.cannock.ac.uk/navigation/straights.htm
Error de offset: Se produce cuando nos encontramos demasiado cerca o lejos de uno
de los muros laterales, y que aparece tras cometer un error de distancia frontal en un giro.
Para poder corregir este error, ser inevitable acumular un error frontal, ya que
recorreremos un tramo recto del laberinto en diagonal.
Error en la direccin: Se produce cuando el robot, tras tomar una curva, se
encuentra orientado a los muros laterales, y no al centro de la celda. Si el robot est en
marcha, el corregir este error supondra reducir o aumentar la velocidad de una de las
ruedas, aunque no sera apropiado si el robot ya circula a la mxima velocidad, o si va muy
lento. En estos casos sera conveniente realizar el giro pero con el robot parado.
ERROR DE DIRECCIN
Pgina 43
Trabajos en Grupo
http://micromouse.cannock.ac.uk/navigation/straights.htm
http://fribotte.free.fr/
Las curvas
El giro ms sencillo que puede hacer un robot se basa en hacer girar las ruedas en
sentido opuesto, y de esta manera rotar sobre su centro. Una vez que se tienen calibrados
los motores se pueden realizar giros de 90 y 180 con gran precisin. Los giros de 180
son necesarios cuando encontramos un camino sin salida y el robot no es bidireccional. Hay
que tener mucho cuidado con los momentos de inercia y para ello, sera conveniente
colocar la masa del robot lo ms cerca posible del centro, y si podemos reducir la masa del
robot, mucho mejor. Los sensores de los muros pueden aumentar de forma sorprendente el
momento de inercia en las ecuaciones, segn [1] en trminos de la distancia al centro al
cuadrado. Si se considera el giro sobre una sola rueda, hay que tener en cuenta que una de
las ruedas recorre ms distancia que la otra, y tal vez no sea provechoso en trminos de
velocidad, adems de que los problemas de inercia son peores en este tipo de giro.
Otro de los aspectos que permiten una velocidad alta en los robots de Micromouse
es el modo en el que se trazan las curvas del laberinto.
En un primer punto, vamos a centrar nuestra atencin en los giros de 180, lo cual
nos lleva a pensar en dos estrategias a seguir a la hora de trazarlos, estas estrategias son las
que vienen representadas en el dibujo inferior. Se puede observa que el dibujo de la
izquierda va asociado a un control ms rudimentario mientras que la forma de afrontar la
Pgina 44
Trabajos en Grupo
http://www.robots-dreams.com
Una de las formas de poder mantener una velocidad tan considerable en un robot es
saber si la siguiente casilla a la que el robot va a acceder tiene o no pared. Para ello se va
obteniendo informacin por unos sensores colocados en la parte frontal del robot. Estos
sensores pueden ser de ultrasonidos o luminosos. Los sensores se colocan como se muestra
en la figura siguiente:
http://www.robots-dreams.com
Primeramente podemos ver que hay un sensor que apunta directamente hacia al
frente. Este sensor es, intuitivamente, sencillo de entender. Est colocado para poder
detectar posibles paredes situadas en celdas adyacentes. Esta estrategia de diseo hace tener
que obviar muchos posibles errores en la informacin enviada por los sensores, lo que hace
trabajar de forma aproximada.
Pgina 45
Trabajos en Grupo
http://www.robots-dreams.com
En esta segunda imagen vemos como se comportan los sensores colocados de forma
oblicua. En un primer momento se puede llegar a pensar que la colocacin de los sensores
de esta forma es un poco intil, pero posicionando los 2 emisores con el mismo ngulo
permiten, como se puede observar en la figura, que el ngulo de incidencia y el de reflexin
es el mismo, y as poder conseguir tener informacin sobre paredes laterales en celdas
adyacentes.
De la experiencia de los distintos competidores de Micromouse, se llega a la
conclusin de que el ngulo ptimo para posicionar los sensores, no es de 45 sino un
ngulo algo menor.
Pgina 46
Trabajos en Grupo
9. Simuladores
En relacin al apartado de simulacin, tras realizar una bsqueda por diferentes
sitios dentro de la Red que podemos hacer uso de diferentes herramientas para poder probar
los distintos algoritmos, es decir, existen soluciones comerciales para responder a tal
necesidad.
Por el contrario, podemos utilizar programas comerciales con el fin de simular el
comportamiento de nuestro robot. Un ejemplo es el programa Matlab. Gracias a que
incorpora la Fuzzy Logic Toolbox, Matlab nos permite disear un controlador borroso para
nuestro robot. A continuacin mostraremos un ejemplo.
El laberinto consiste en un mapa de bits blancos y negros, donde los bits negros
representan las paredes. El robot deber desplazarse continuamente por el laberinto sin
chocarse con las paredes, utilizando para ello dos sensores de distancia colocados a +45 y 45 con respecto a su eje longitudinal.
Pgina 47
Trabajos en Grupo
Pero cada desarrollador de microrrobots, adems de poder usar soluciones como las
que se ofertan en MATLAB, se puede realizar su propio simulador mediante cualquier
herramienta de desarrollo, como puede ser el lenguaje C, JAVA, etc. En este trabajo se va a
proponer un posible simulador, implementada en lenguaje C, probndose sobre l, dos de
los algoritmos arriba explicados.
Simulamos los 2 mtodos que nos han parecido los ms destacados pos su sencillez
y eficacia:
El primero es el mtodo de tirar a derechas, este algoritmo es fcil de aplicar, ya
que en su algoritmo solo hay que poner una serie de prioridades que seran: primero tirar a
derechas, en caso contrario, seguir recto, despus tirar a la izquierda, y por ultimo ir hacia
atrs. Con este algoritmo tenemos la certeza de que encontrar la salida.
Pgina 48
Trabajos en Grupo
Pgina 49
Trabajos en Grupo
En nuestro caso las respuestas a estas preguntas no son del todo reales, ya que hemos
creado nuestra propia competicin a la que ajustar el robot. An as las respuestas son las
siguientes:
Una vez tenemos una base sobre la que poder trabajar debemos empezar a idear una
algoritmia, en nuestro caso y debido a la reutilizacin del microcontrolador debemos saber
que tenemos ciertos limites impuestos a priori. Una vez decidida la algoritmia, tendremos
que establecer los bloques necesarios para aportar datos suficientes al algoritmo, segn
sabemos los sensores que necesitamos realizamos una estructura inicial del robot que
permita manejar dichos sensores con un mnimo de garantas, es decir, que los pulsadores
estn colocados de forma estratgica o que los sensores de distancia estn dentro de su
margen de actuacin sin que se les impida en ningn momento su visin.
Pgina 50
Trabajos en Grupo
Dnde estamos?
Hacia dnde vamos?
Pgina 51
Trabajos en Grupo
Como podemos observar en la imagen anterior el robot no sabe hacia donde est
mirando, es por esto que almacenamos el laberinto con sus cuatro posibles orientaciones:
Pgina 52
Trabajos en Grupo
Una vez resuelto el problema de la orientacin nos queda por solucionar el problema
de la casilla de salida. Debido a que el laberinto esta formado por un campo de 9 celdas por
9 celdas lo mximo que podemos movernos hacia un lado u otro son 8 celdas, y debido a
que no queremos perder informacin haremos una matriz de 17 celdas por 17 celdas para
as aun saliendo desde una esquina podamos almacenar todos los datos en nuestra matriz
sin perder ningn valor, para ello empezaremos a guardar los datos desde el centro de la
matriz de datos:
Trabajos en Grupo
destacar que la celda central siempre es comn a cualquiera de los casos as que nuestra
bsqueda siempre partir desde la celda central.
El problema que se nos presenta en este caso es el uso de memoria RAM necesaria
para poder implementar el algoritmo.
Los mapas conocidos a priori se almacenarn siempre en memoria no voltil, de
forma que as siempre estarn disponibles y no ocuparan memoria RAM, es por esto que
necesitaremos nicamente memoria para la matriz de adquisicin de datos, esto implica un
tamao de memoria mnimo de 289 bytes disponibles en la memoria RAM.
Inicialmente las casillas tendrn el valor 0xFF para as poder diferenciar las que se
han recorrido y las que no. Cada byte tendr la siguiente estructura, vlida tanto para los
laberintos grabados inicialmente en ROM como para el que est en RAM:
BIT 7
BIT 6
BIT 5
BIT 4
Posicin de paredes 0-15
BIT 3
BIT 2
BIT 1
BIT 0
Distancia a la salida 0-15
...
...
BIT 6
0
1
0
0
0
1
0
El algoritmo a seguir es bastante intuitivo, una vez que sabemos en que posicin
estamos lo nico que falta es encontrar un camino mnimo hasta la salida. Para ello
tendremos en cuenta el nmero de casillas hasta la salida, es decir, equivale a usar un mapa
en cualquier ciudad.
La informacin necesaria para salir, la buscaremos en los bytes de las casillas,
guiaremos el camino dndole valores a cada casilla, cuanto ms lejos esta la salida mayor
ser el nmero asignado, de esta forma el robot lo que tiene que hacer es ir hacia la casilla
que tenga un valor menor. A continuacin mostramos un ejemplo segn el mapa que
estamos usando en esta presentacin.
Pgina 54
Trabajos en Grupo
De esta forma en cuanto sepamos donde estamos solo tenemos que consultar las
casillas que nos rodean y seleccionar la apropiada, pudiendo haber caminos que tengan la
misma distancia hacia la salida. Bien es cierto que en la figura anterior quizs fuese mejor ir
por el camino verde ya que tiene menos giros, en este caso si queremos que solo vaya por el
verde lo nico que deberamos hacer es cambiar el nombre la casilla que inicia el camino
rojo por una de mayor valor, de esta manera evitamos que seleccione ese camino.
Debido a la limitacin que tenemos en la memoria (lo que nos lleva a usar variables
tipo char y no tipo int) no podemos pasar de una distancia 15 la salida, esto nos hace andar
a ciegas durante unas cuantas casillas hasta encontrar casillas con valor menor a 15, en caso
de querer evitar esto deberamos usar variables de tipo int, por lo que necesariamente
tendramos que cambiar de microcontrolador. Como alternativa para no cambiar el micro
controlador es guardar en memoria ROM un mapa con valores y un mapa con las paredes.
Una vez adquirimos los datos debemos encontrar en que matriz la direccin del mapa
en la que estamos y con que orientacin nos encontramos, para ello la idea inicial que
tenemos es empezar a buscar comparando los datos que tenemos por filas, inicialmente
empezaremos a buscar por la casilla central de los datos recogidos tal y como se ha dicho
anteriormente, ya que es la nica celda que tenemos en comn, segn avancemos por el
laberinto iremos recopilando ms datos lo que nos lleva a descartar mapa por mapa y
encontrarnos. Para saber la direccin en la que estamos mirando llevaremos un historial de
los ndices de la matriz de las ltimas celdas recorridas sabiendo de donde venimos, si
aadimos a esto el nmero de giros dados sabemos hacia donde miramos.
Pgina 55
Trabajos en Grupo
Pgina 56
Trabajos en Grupo
El cerebro
Todo robot que tiene que tomar decisiones de forma autnoma necesita un cerebro,
en este caso y por el motivo de aprovechar lo que tenemos hemos decidido usar un
68HC08 que reutilizamos de la prctica del laboratorio de SED de Ingeniera de
Telecomunicacin. Esto nos aporta la ventaja de que al menos alguno de los integrantes
del grupo conoce las herramientas de trabajo.
El uso de este micro no es debido nicamente al ahorro de coste, ya que si no
cumpliese ciertas necesidades este no sera til. Podemos destacar las siguientes
caractersticas tcnicas del microcontrolador:
Microcontrolador de 8 bits
32Kbytes de memoria FLASH
512 bytes de memoria RAM
Velocidad de bus de hasta 8MHz
2 Timers de 16bits
ADC de 8 bits con 8 canales
Admite tanto lenguaje C como lenguaje Ensamblador
Hemos destacado estas caractersticas porque nos resulta necesario el tener un ADC
con una resolucin aceptable y al menos un temporizador.
Debido a la tarjeta de desarrollo tenemos un pequeo impedimento en el ADC, esto es
que el margen dinmico viene fijado entre 0 y 5 voltios
Pgina 57
Trabajos en Grupo
El sistema sensorial
Para saber en que posicin estamos en cada momento solo necesitamos tener 3
sensores de distancia, colocados de forma que sepamos la distancia hacia el frente,
derecha e izquierda. Con el fin de mejorar el posicionamiento de nuestro robot le
incluimos uno en la parte trasera.
Usamos como sensores de distancia unos GP2D12. Como ya sabemos son sensores de
distancia mediante infrarrojos, la medida que nos aporta estos sensores es una tensin
analgica con un rango de valores de 0.4V a 2.6V.
Con el fin de obtener una mejor resolucin usaremos un circuito que adapte la seal
de manera que amplificaremos de 2.6V a 5V, esto nos da una ganancia de 1.9. En el caso
de querer tener todava ms resolucin, la solucin es tan sencilla como bajar los 0.4V a 0
y luego amplificar
El problema que nos dan estos dispositivos es que distancias menores de 10cm las
medidas no son vlidas. Este inconveniente se tiene en cuenta ya en el diseo de la
estructura.
A los sensores de distancia se les suma un bumper delantero que nos indicara cuando
hemos pinchado un globo.
Los actuadotes
Obviamente necesitamos algn mecanismo que nos permita movernos por el
laberinto, para ello hemos credo conveniente utilizar motores paso a paso, ya que de esta
forma tenemos un control sobre el nmero de vueltas que llevamos dadas, as como giros
parciales con una gran exactitud.
Pgina 58
Trabajos en Grupo
Estructura fsica
Nuestra idea es realizar una base con forma elptica con el fin de tener suficiente
espacio, evitar esquinas y poder contener las ruedas dentro del permetro de la base,
Pgina 59
Trabajos en Grupo
evitando as posibles roces con las paredes que podran hacer que el robot pasease a ser
un robot de escalada, llegando a volcar.
Las ruedas se realizarn con Cds ya que conseguimos un permetro suficientemente
grande, avanzando mucho con pocas vueltas lo que tambin aumenta la velocidad.
Los sensores los hemos colocado estratgicamente para poder conocer la posicin de
las paredes as como la posicin dentro de la celda. Adems en la parte frontal se han
colocado dos sensores, uno ms elevado que otro, el fin de colocar los sensores con esta
configuracin es detectar el globo. En la siguiente figura se demuestra el porque:
Con esta posicin de los sensores sabemos en cada momento la distancia en cada
pared, lo que nos indica si estamos posicionados correctamente dentro de la celda, as
podemos conseguir rectificar pequeos errores en el movimiento
Pgina 60
Trabajos en Grupo
13. Catia.
Para disear el robot nos hemos ayudado del programa Catia, que nos permite realizar
un modelo en 3D, con todo tipo de medidas. Con ello conseguimos saber las cualidades que
va a tener nuestro robot antes de construirlo fsicamente.
Introduccin a Catia.
Catia tiene distintos mdulos, cada uno enfocados a distintos aspectos del diseo. Se
comienza con la generacin de figuras 2D(Sketcher), se crean slidos (Part Desing) y
finalmente se ensamblan(Assembly).
Hay otros muchos ms mdulos que permiten hacer un estudio fsico del producto
realizado, que dan datos sobre costes o precios y hasta pruebas de resistencia.
Debido a que el entorno de Catia era desconocido para todos nosotros, nos hemos
centrado en el modulo de diseo mecnico (Mecanical Desing).
Sketcher.
La base de todo diseo se realiza con esta herramienta. Su funcin es crear unos
planos 2D, que luego podremos dar volumen con la herramienta Part Desing.
Se pueden hacer todo tipo de formas (rectngulos, crculos, elipses, formas libres),
que luego se deben acotar implantando unas constraint. Las constraint son las medidas
de la figura 2d realizada. Es muy importante dar medidas correctas para que luego en el
ensamblado todo siga una misma escala.
Pgina 61
Trabajos en Grupo
Part Desing
Una vez que tenemos el plano 2D definido, hay que darle volumen. Con el Part
Desing podemos darle volumen, hacer agujeros a un volumen ya creado, rotar una pieza
para formar un volumen de revolucin, hacer contornos
El desarrollo de todas las piezas se hace dentro de Part Desing, entrando en el
Sketcher siempre que se necesite un nuevo volumen; para ello solo hace falta elegir el plano
donde se dibujara la figura 2D.
El gran potencial de esta herramienta es la posibilidad de hacer todo tipo de
volmenes, sin excepcin, a base de figuras simples. Podemos realizar operaciones
booleanas entre piezas para conseguir nuevos volmenes.
No hay que olvidar que hay que seguir dando las medidas de la pieza que queremos
realizar, incorporando todas las constraints necesarias.
Pgina 62
Trabajos en Grupo
Assembly Dessing
Herramienta en donde se unen todas las partes ya creadas. El desarrollo del
ensamblado debe ser ordenado y estructurado por sub-partes, es decir, no se debe intentar
montar todo el conjunto a la vez.
Una vez que aadimos al producto nuevo una de las partes ya hechas en el Part
Desing hay que ir agregando nuevas partes e irlas colocando. Para ello esta herramienta nos
presenta funciones para el movimiento en el espacio de las piezas y el asignamiento de
nuevas constraints.
Definir constraints en esta parte del ensamblado es muy importante. Aqu se definen
los mrgenes del producto creado. Seguir paralelismos, unir caras, unir ejes poco a poco
hacen que se cree un producto ordenado y exacto.
La exactitud es la principal caracterstica que nos brinca Catia, por lo que hay que
explotarla al mximo definiendo toda constraint que veamos necesaria.
El ensamblado final de los sub-ensamblados hay que realizarlo con especial cuidado,
uniendo todas las caras, siguiendo paralelismo(o perpendicularidades), siguiendo medidas,
etc. La precisin es importantsima, una pieza mal colocada o mal diseada nos puede
chocar con otro volumen. Catia da la posibilidad de ver todas las intersecciones de
piezas, con lo que podremos arreglar posibles fallos.
Trabajos en Grupo
girado 360 sobre uno de sus lados o como una circunferencia a la que se le da volumen
vertical (u horizontal). De ah la gran posibilidad de diseos de piezas y figuras.
El ensamblado es una parte extremadamente compleja y debe realizarse paso a paso.
Una vez que se tenan todas las piezas simples, se hace un pre-ensamblado de piezas. Por
ejemplo, los cds se unen o se pone el soporte al motor. A su vez estas piezas compuestas se
vuelven a ensamblar con otras. El ensamblado recursivo nos hace tener un orden de
ensamblado, que hace que el conjunto est ordenado.
El ensamblado final requiere que todos los sub-ensamblados esten correctos. Si es
as, es muy sencillo, ya que todas las medidas han sido previstas y encaja todo. En cuanto
una medida es errnea, el montaje puede dar fallos como la superposicin de piezas.
Los posibles errores se pueden corregir directamente en las piezas simples, y al
guardarlas se actualizar directamente en los conjuntos de piezas.
Esta estructuracin permite simplificar el diseo, que an as es complicado.
GP2D12.
Los sensores es una parte fundamental del robot. Se han diseado en catia siguiendo
las medidas de la hoja de caractersticas.
Pgina 64
Trabajos en Grupo
Placa
Es el cerebro de nuestro robot. Se ha diseado siguiendo las medidas de la placa
original. Con ello conseguimos saber perfectamente donde puede ser ensamblada y su
posicin ideal dentro del conjunto del robot.
Trabajos en Grupo
suelo para que las ruedas locas y los cds toquen el suelo sin perder la horizontalidad de la
base.
Bumper
Dispositivo que gracias a l sabremos si se a explotado el globo por contacto.
CD
Los cds nos servirn como ruedas de nuestro robot.
Pgina 66
Trabajos en Grupo
Aguja.
Elemento punzante que explotara el globo al contacto. Sencilla manera, pero
efectiva, de explotar los globos.
Sub-ensamblaje
El motor y los cds es una parte esencial que debe estar perfectamente alineada para
que el robot se mueva en linea recta. Para conseguir una mayor perfeccion y que el motor
izquerido tenga las mismas medidas que el derecho se ensamblo como un subconjunto, que
luego se unir al robot por duplicado. As se consigue un perfecto alineamiento.
Pgina 67
Trabajos en Grupo
Montaje completo
El montaje completo da una perfecta idea del robot a construir. Se ven todas las
piezas perfectamente definidas y su situacin dentro del conjunto.
Pgina 68
Pgina 69
Trabajos en Grupo
Trabajos en Grupo
ALANTE
ATRAS
DERECH
IZQUIERD
ARRIBA
ABAJO
0
1
2
3
4
5
#define SI
#define NO
#define
#define
#define
#define
#define
#define
#define
#define
0
1
LCDport
PTC
RS
PTB_PTB7
E
PTB_PTB6
DelayTime
DATOS
1
CONTROL
0
ON
OFF
10
1
0
void configTBM(void);
void configADC(void);
Pgina 70
void
void
void
void
void
void
void
Trabajos en Grupo
LCDdelay(void);
Ctrl8bits(unsigned char codigo);
Ctrl4bits(unsigned char codigo);
Datos4bits(unsigned char dato);
Config_LCD_4bits(void);
printf_LCD_4bits(unsigned char fila, unsigned char columna, char *texto);
convertir1 (unsigned char hexa);
char donde=ALANTE,moverse=SI,leer=ARRIBA,derecha=0,izquierda=0,arriba=0,abajo=0,atras=0;
unsigned char transformado1=48, transformado2=48, transformado3=48;
char pasos=0,vueltas=0,datosestables=NO;
void main(void) {
/* include your code here */
DDRA=0xFF;
//Configuramos todo de salida
DDRB=0x00;
//configuramos los PTB como entrada
DDRB_DDRB6=1;
DDRB_DDRB7=1;
DDRC=0xFF;
DisableInterrupts;
CONFIG1_COPD=1;
Config_LCD_4bits();
configTBM();
configADC();
EnableInterrupts; /* enable interrupts */
CONFIG1=0;
for(;;) {
__RESET_WATCHDOG(); /* kicks the dog */
if(pasos>=200){
vueltas++;
pasos=0;
}
printf_LCD_4bits(1,1,"Pas:");
convertir1(pasos);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
printf_LCD_4bits(1,9,"Vuelt:");
convertir1(vueltas);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
printf_LCD_4bits(2,1,"Der:");
convertir1(derecha);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
printf_LCD_4bits(2,9,"Izq:");
convertir1(izquierda);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
printf_LCD_4bits(3,1,"Arr:");
convertir1(arriba);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
printf_LCD_4bits(3,9,"Abj");
convertir1(abajo);
Datos4bits(transformado3);
Datos4bits(transformado2);
Pgina 71
Trabajos en Grupo
Datos4bits(transformado1);
printf_LCD_4bits(4,1,"Atr:");
convertir1(atras);
Datos4bits(transformado3);
Datos4bits(transformado2);
Datos4bits(transformado1);
} /* loop forever */
}
void configTBM(void){
TBCR_TBR=0; //prescaler para 3.33333ms
TBCR_TBIE=1;
TBCR_TBON=1;
}
void configADC(void){
ADCLK_ADIV=3;//preescaler a 8
ADCLK_ADICLK=0; //coje reloj externo
ADSCR=0b01100000;//inicialmente mira el canal0
}
interrupt 16 void conversionADC(void){
static unsigned char cont=1;
if(leer==DERECH){
derecha=ADR;//derecha+ADR;
ADSCR=0b01100001;
leer=IZQUIERD;
}
else if (leer==IZQUIERD){
izquierda=ADR;
ADSCR=0b01100010;
leer=ARRIBA;
}
else if (leer==ARRIBA){
arriba=ADR;
ADSCR=0b01100011;
leer=ABAJO;
}
else if (leer==ABAJO){
abajo=ADR;
ADSCR=0b01100100;
leer=ATRAS;
}
else if (leer==ATRAS){
atras=ADR;
ADSCR=0;
/*if(cont<=3){
cont=1;
datosestables=SI;
atras=atras/3;
//hacemos la media de 3 muestras para que sean
mas estables
abajo=abajo/3;
arriba=arriba/3;
izquierda=izquierda/3;
derecha=derecha/3;
}
else {
ADSCR=0b01000000;
Pgina 72
Trabajos en Grupo
leer=DERECH;
}*/
}
}
interrupt 17 void time_base(void){
static char paso=0;
static unsigned char cuenta=0;
TBCR_TACK=1;
//Borrar flag
cuenta++;
if(cuenta>=2){ //2*3.33ms=6ms
cuenta=0;
if(moverse==SI){
pasos++;
paso++;
if(donde==ALANTE){
if(paso==1)
PTA=0x33; // OFF OFF ON ON
else if(paso==2)
PTA=0x66; // OFF ON ON OFF
else if(paso==3)
PTA=0xCC; // ON ON OFF OFF
else if(paso==4){
PTA=0x99; // ON OFF OFF ON
paso=0;
}
}
else if(donde==ATRAS){
if (paso==1)
PTA=0x33;
else if (paso==2)
PTA=0x99;
else if (paso==3)
PTA=0xCC;
else if (paso==4){
PTA=0x66;
paso=0;
}
}
else if(donde==DERECH){ //PARTE ALTA LA RUEDA DERECHA
if(paso==1)
PTA=0x33;
else if(paso==2)
PTA=0x96;
else if(paso==3)
PTA=0xCC;
else if(paso==4){
PTA=0x69;
paso=0;
}
}
else if(donde==IZQUIERD){//PARTE BAJOA RUEDA IZQUIERDA
if(paso==1)
PTA=0x33;
else if(paso==2)
PTA=0x69;
else if(paso==3)
PTA=0xCC;
else if(paso==4){
PTA=0x96;
paso=0;
}
Pgina 73
Trabajos en Grupo
}
}
}
if(pasos>=100){
leer=DERECH;
datosestables=NO;
ADSCR=0b01100000;
/*
derecha=0;
izquierda=0;
arriba=0;
abajo=0;
atras=0;*/
//ADSCR=0b01000001;
}
}
///////////////////////////////////LCD/////////////////////////////////////////////////////
void convertir1 (unsigned char hexa){
//utilizamos esta funci ara imprimir datos en el LCD
//este convertir vale para transformar numeros de HEXA a DECIMAL y poder imprimirlos
if(hexa<=99){
transformado2=(hexa/0x0A)+48;//calculamos
transformado1=(hexa%0x0A)+48;//calculamos
transformado3=48;
}
else{
transformado1=(hexa%0x0A)+48;//calculamos
transformado2=(hexa/0x0A);
transformado3=(transformado2/0x0A)+48;
transformado2=(transformado2%0x0A)+48;
unidades
//calculamos centenas
//calculamos decenas
}
}
void LCDdelay(void)
{
unsigned int j;
for(j=0;j<DelayTime;j++); // t > 40us (Tiempo de ocupaci el LCD)
}
void Ctrl8bits(unsigned char codigo)
{
LCDport
=
((LCDport & 0xF0) | (codigo >> 4));
parte baja del puerto PTx[0:3]
RS
=
CONTROL;
E
=
ON;
E
=
OFF;
RS
=
CONTROL;
LCDdelay();
}
// Si est onectado a la
*/
LCDport
=
((LCDport & 0xF0) | (codigo >> 4)); // Si est onectado a la parte
baja del puerto PTx[0:3]
RS
=
CONTROL;
E
=
ON;
E
=
OFF;
Pgina 74
Trabajos en Grupo
LCDdelay();
/* Trasmito el nibble bajo.
*/
LCDport
=
((LCDport & 0xF0) | (codigo & 0x0F));//Si est onectado a la parte
baja del puerto PTx[0:3]
RS
=
CONTROL;
E
=
ON;
E
=
OFF;
LCDdelay();
}
void Datos4bits(unsigned char dato)
{
/* Trasmito el nibble alto.
*/
LCDport
=
((LCDport & 0xF0) | (dato >> 4)); // Si est onectado a la parte
baja del puerto PTx[0:3]
RS
=
DATOS;
E
=
ON;
E
=
OFF;
LCDdelay();
/* Trasmito el nibble bajo.
*/
LCDport
=
((LCDport & 0xF0) | (dato & 0x0F)); // Si est onectado a la parte
baja del puerto PTx[0:3]
RS
=
DATOS;
E
=
ON;
E
=
OFF;
LCDdelay();
}
void Config_LCD_4bits(void)
{
unsigned int cnt;
RS = 0;
E = 0;
for(cnt=0;cnt<4000;cnt++);
alimentar).
Ctrl8bits(0x30);
for(cnt=0;cnt<1000;cnt++);
//
FunctionSet, interface a 8 bits.
// Espera mas de 4.1 ms.
Ctrl8bits(0x30);
for(cnt=0;cnt<100;cnt++);
//
FunctionSet, interface a 8 bits.
// Espera mas de 100 us.
Ctrl8bits(0x30);
bits.
//
FunctionSet, interface a 8
Ctrl8bits(0x20);
aqu aso a 4 bits.
//
FunctionSet, a partir de
Ctrl4bits(0x28);
bits,
//
FunctionSet:
//
Ctrl4bits(0x08);
Ctrl4bits(0x01);
//
//
Pgina 75
Display Off.
Display Clear.
Interface 4
for(cnt=0;cnt<500;cnt++);
Trabajos en Grupo
Ctrl4bits(0x06);
cursor y no desplazar.
Ctrl4bits(0x0C);
sin parpadear.
1.52 ms.
//
//
}
void printf_LCD_4bits(unsigned char fila, unsigned char columna, char *texto)
{
unsigned char adrs;
/* Si estamos en la primera fila la direccion de memoria es igual al
de la columna menos uno...*/
adrs = columna - 1;
/* ...si estamos en la segunda fila hay que sumarle 0x40.
*/
if(fila == 2)
adrs = adrs | 0x40;
if(fila==3)
adrs = adrs | 0x94;
if(fila==4)
adrs =adrs | 0xD4;
/* El codigo a mandar es el de la direccion con el bit D7 a uno. */
Ctrl4bits(adrs | 0x80);
/* ... y escribimos el texto normalmente. */
while(*texto)
Datos4bits(*texto++);
}
Para controlar los motores paso a paso hemos montado unos ULN2003A que
alimentamos con la tensin que queremos aplicar al motor paso a paso. La conexin se
realiza mediante unas resistencias de pull-up para aplicar mayor corriente a los motores.
La conexin de toda la electrnica realizamos mediante un cable plano que une la placa
del micro-controlador con una placa de grapin donde hemos soldados las conexiones.
Nos resulto imposible encontrar unos conectores para los GP2Y0A21. Por ello
grapinamos directamente los pines. Para darle un poco de rigidez y aislar un poco los
ruidos exteriores hemos usado tubo termo retrctil que aplicndole calor se encoge
adoptando la forma del contenido. Para mejorar la seal de entrada de los sensores
conectamos unos condensadores entre la tensin de salida y masa, evitando as el rizado
de la seal.
A la hora de realizar la estructura, intentamos adaptarnos a los consejos de la parte
que trata ese tema en este mismo trabajo, es decir, escogimos un material que tuviramos
a nuestro alcance teniendo en cuenta que el presupuesto no es elevado, procurando que
sea resistente.
Pgina 76
Trabajos en Grupo
Inicialmente utilizamos una bandeja corriente que resulta un material muy duro, al
trabajar con el nos dimos cuenta que no lo suficientemente maleable como pensbamos
en un principio, aun as decidimos seguir trabajando con el debido a su dureza. Tras haber
montado los motores e intentar mover el robot nos encontramos con que el par del motor
no nos daba suficiente fuerza para arrancar el robot, intentando reparar este problema
aplicamos mayor potencial al motor paso a paso, aun as no conseguimos que arrancase,
asique decidimos quitar el material de la bandeja, ya que pesaba demasiado.
Como sustituto de la bandeja decidimos usar madera de balsa, un material que se
trabaja muy fcilmente y que es muy ligero, pero como problema presenta que es muy
frgil, de hecho mientras trabajbamos con el se partieron varias piezas.
Adems de esto, para montar la estructura y darle rigidez hemos usado unos listones
de SAMBA, que resultan muy ligeros, por el contrario se astillan con mucha facilidad.
Para trabajar estos materiales usamos una sierra de calar, un taladro, una Dreamel,
lija, abrazaderas, cola blanca, tornillos, etc..
Pgina 77
Pgina 78
Trabajos en Grupo
Pgina 79
Trabajos en Grupo
Pgina 80
Trabajos en Grupo
Trabajos en Grupo
Componentes
Precio
Bandeja x2
Madera de balsa
Rueda de plstico
Liston de SAMBA 2m
Tornillos
ULN2003 x4
Resistencias 10K x10
GP2Y0A21 x5
Placa de grapin
Motores paso a paso
Placa con micro controlador
Tubo Termo retrctil
Bobina de grapin
Estao
Cds/DVD
Bolsa de globos
Bumper
Discos de corte Dreamel
Zocalos x4
Aguja
Tornillos con tuerca
Condensadores de 100nf x10
TOTAL
3
1,80
0,94
4,61
1,05
2,5
0,20
45,95
7
0
0
0,95
10
1
0
0,90
?
3
3,60
0
0,95
0,60
88,05
Pgina 81
Trabajos en Grupo
15. CONCLUSIONES
Las conclusiones que podemos sacar de las competiciones de Alcal son que la
participacin siempre a sido baja, incluso descendiendo en cada ao. Se ha visto que el
laberinto desconocido los participantes tenan muchos problemas para alcanzar la salida
por lo que en general, este, suele ser conocido.
Los participantes de las competiciones en general suelen tener luego una trayectoria
acadmica admirable, el participar en competiciones les da mucha experiencia en amplia
variedad de sectores, la robtica ayuda al estudiante a aumentar conocimientos para
posteriormente poder aplicarlos a sus estudios, o simplemente por joby.
En cuanto a la estructura hemos visto que es preferible usar algo ms de tiempo
decidiendo una buena, ya que una mala eleccin podra complicar la salida del laberinto.
Por otro lado, hemos visto que dependiendo del presupuesto que tengamos
conseguiremos un resultado mejor, ya que, por ejemplo, el material de la base ser mejor
o peor y tendremos ms o menos precisin de los sensores.
Respecto al tema de algoritmia, podemos destacar tres conclusiones:
Por ltimo vamos a hablar de las conclusiones que hemos sacado a la hora de
disear el robot.
Este ha sido el primer robot que hemos intentado montar. Nos hemos encontrado
con muchos problemas que a priori no pensbamos que podran ocurrir.
Para comenzar el diseo de nuestro robot pensamos en utilizar la herramienta Catia, ya que
pareca un programa muy intuitivo y que presentaba grandes resultados. Una vez que nos
pusimos con el desarrollo de las piezas surgen muchas dudas sobre planos, cortes y
superficies. Las herramientas de desarrollo en 2D son las usuales en todo programa grafico,
pero en cuanto se pasa al desarrollo 3D (Part Desing) todo es nuevo. Moverte en 3D no
resulta todo lo sencillo que pueda parecer, y equivocarte de ejes y superficies es algo
normal.
A la hora de montar todas las partes (Assembly Desing) ya se haba conseguido
tomar cierta familiaridad con el entorno lo que ya result algo menos costoso.
Por la falta de tiempo y el total desconocimiento del programa antes de la propuesta del
trabajo, solo hemos trabajado con la parte de diseo mecnico. Hay mltiples herramientas
dentro de Catia que podran habernos ayudado, incluso ms que la parte mecnica, ya que
el peso o el centro de gravedad bien definidos puede hacer un montaje mucho ms sencillo.
Como conclusin, es mejor trabajarse el diseo en Catia en todas sus posibilidades y luego
ponerse con el montaje.
Pgina 82
Trabajos en Grupo
Pgina 83
Trabajos en Grupo
16. Bibliografa.
Informacin relacionada con el algoritmo de Dijkstra:
http://www.alumnos.unican.es/uc900/Algoritmo.htm
ALGORITMOS FUNDAMENTALES VOL. I, Donald E.Knuth, EditorialRevert
S.A. 1985
Informacin relacionada con el algoritmo de Breadth-first:
http://www.cs.duke.edu/csed/jawaa/BFSanim.html
http://ccc.inaoep.mx/~emorales/Cursos/Busqueda04/node13.html
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/
breadthSearch.htm
http://www.ics.uci.edu/~eppstein/161/960215.html
Pgina 84
Trabajos en Grupo
Informacin complementaria:
Pgina del departamento de Electrnica de la Universidad de Alcal donde se han
consultado diversos archivos en PDF de robots participantes en ediciones de Alcabot e
Hispabot.
http://www.depeca.uah.es
Informacin CATIA:
Manual adjunto en PDF y tutoriales varios.
Pgina 85