Está en la página 1de 11

Robot de Laberinto

Autores: A. Morales D. Coyago C. Sanga D. Aguay


Escuela Superior Politcnica de Chimborazo

Email: alexismorales@gmail.com
Email: davidcoyago@hotmail.com
Email: cristhiansanga@hotmail.es
Email: davidaguay@gmail.com

Finalmente aportamos unas conclusiones


Abstract y consejos para que quien lo desee pueda
realizar un robot sin tener los mismos
In this article we present the robot of the labyrinth problemas que nos ocurrieron a nosotros.
for the manufacture and design of this one was
realized first an analysis of what implies the sensors MARCO TEORICO
so that the robot can move freely with the help of the
same assigning an algorithmic programming for any Anlisis de estructuras y diseos de robots de
type of situation. laberinto

A priori puede parecer que cualquier


RESUMEN estructura es vlida para nuestro robot,
En este artculo presentaremos el robot del laberinto que lo importante es lo que tiene dentro,
para la fabricacin y diseo de este se realiz pero esto no es del todo cierto.
primero un anlisis de lo que implica los sensores Dependiendo de la funcin de dicho
para que el robot pueda moverse libremente con la robot ser conveniente utilizar una u otra,
ayuda de los mismos asignando una programacin incluso una mala eleccin puede hacer
algortmica para cualquier tipo de situacin. que se compliquen mucho las cosas en un
futuro. Por ello, es conveniente utilizar
parte del tiempo en pensar donde colocar
INTRODUCCION las partes del robot y de forma de hacerlo.
El documento desarrollado a A continuacin estudiamos las partes
continuacin trata sobre los Robots de ms importantes de un robot laberinto:
laberinto o Robots de Micromouse.
El trabajo est desarrollado por un grupo
de estudiantes de la ESPOCH para la El chasis
asignatura de Circuitos Electricos I. El El chasis es la estructura que sostiene y
fin principal de este trabajo es aportar aporta rigidez y forma a nuestro robot. Un
una base con la que enfrentarse al buen smil sera el compararlo con el
desarrollo de un robot de laberinto. esqueleto humano. Por lo tanto queda
Durante todo el texto abordamos justificada la importancia de una correcta
diversos temas relacionados con este tipo eleccin.
de robots. Para poder desarrollar el tema
con la mayor sencillez y amplitud posible Forma
hemos dividido el trabajo en varios
aspectos. Imaginemos que hemos decidido hacer el
Seguimos con un anlisis de las robot con sensores de contacto, es decir,
estructuras ms usadas con sus ventajas e el robot va por el laberinto, se choca
inconvenientes. Obviamente contra una pared y da media vuelta. En
necesitamos algn mtodo para salir del este caso la forma es importantsima
laberinto, esto lo abordamos en un puesto que tendremos que pensar en que
apartado dedicado exclusivamente a la el robot debe ser capaz de girar sobre si
algoritmia, control y simulacin. Para mismo sin que la pared se lo impida, por
completar el trabajo desarrollado hemos ejemplo, con un cuadrado pasara lo que
realizado una propuesta de diseo vemos a continuacin:
utilizando herramientas de diseo en 3
dimensiones y llevando a cabo el
proyecto.
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.
Sin embargo, si elegimos una forma
redondeada no tendramos este Mtodo de manejo y el dar la vuelta
problema.
En este apartado estudiaremos las
distintas tcnicas que se utilizan para
conseguir buenos giros y movimientos.
Esto es algo que debemos estudiar
especialmente en los micromouse puesto
que tenemos grandes restricciones de
movimiento por el laberinto.

Grados de movimiento

Empezaremos viendo los dos tipos de


movimiento que podemos tener, en
Ahora bien, Que pasara si utilizamos funcin de los grados de libertad en el
sensores de distancia?, Ya no sera giro.
importante la forma?, en este caso, la
forma seguira siendo igual de Movimiento en diagonal: Con
importante puesto que, aunque en un este tipo de movimiento
principio pudiramos pensar que el robot conseguimos unos
nunca tocara las paredes, en cualquier desplazamientos notablemente
momento esto podra ocurrir y nos ser ms rpidos, puesto que la
mucho ms fcil salir del problema distancia que recorremos es
eligiendo una buena forma para el robot. menor. A cambio, nos
encontramos con varios
Una buena solucin a esto podra ser no inconvenientes. Para empezar,
preocuparse de la forma del chasis, o no ser ms difcil de construir, ya
preocuparse demasiado, y ms tarde que para moverse en diagonal
colocar una carcasa externa con la forma tendremos que tener en cuenta
que queramos. Esta tcnica es la factores que de otro modo no
empleada por ejemplo por el robot PI: los tendramos, como por
ejemplo estudiar ms a fondo la
colocacin de los sensores,
adems, estos deben tener la
Materiales suficiente precisin como para
detectar las zonas en las que nos
Las carcasas se han construido de podemos mover en diagonal y
diversos materiales: metal, plstico, no chocarnos con las paredes.
madera En cuanto al control del
El mejor criterio para elegir uno u otro movimiento, este debe ser muy
ser, en primer lugar, que dicho material preciso, ya que un pequeo
est disponible, ya que de poco nos desvo en la trayectoria podra
servir pensar en uno que no podamos hacernos rozar con las esquinas.
conseguir. Y, entre los que encontremos,
habr que elegir entre uno u otro por

Pgina 1
Movimiento en lnea recta: este
tipo de movimiento ser mucho
ms sencillo de realizar que el
diagonal, pero a cambio los
desplazamientos sern ms
lentos al tener que recorrer ms
distancia. Con este tipo, nos
podemos encontrar problemas
como que alguna rueda patine o
que los giros no sean
exactamente de 90-180
haciendo al robot tener un error
acumulativo que puede tener
graves consecuencias si no lo Un ejemplo de esta colocacin
corregimos. sera la utilizada por el robot
Charrito

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.

Las ruedas

Antes de ponernos a montar las ruedas


debemos ver dnde deben estar Aqu vemos como las ruedas motrices
colocadas. En principio podemos pensar estn colocadas de tal forma que el robot
en una colocacin equidistante en la base har los giros sobre un punto distinto al
lo ms separadas posible para mayor centro de la base, en concreto, los giros
estabilidad, ahora bien, si lo hacemos as sern los que vemos en la figura
debemos tener en cuenta cual ser el eje siguiente:
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 2
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:

El emisor: En el caso de la
figura, polarizamos el diodo
a travs de un resistor, R, este
se elige para establecer la
corriente apropiada que
pasar a travs del LED.
Tambin podemos usar otra
opcin en la que lo
Sensores conectamos a travs de un
Los robots de laberinto necesitan una transistor controlado para
manera de detectar las paredes dentro del que el LED emita solo
laberinto, esto lo harn mediante cuando sea necesario,
sensores. Distinguimos dos tipos: de ahorrando as la energa que
proximidad simples o de distancia. del otro modo
desperdiciaramos.
Sensores de proximidad
Estos tipos de sensores nos dan El receptor: Este recibir la
informacin sobre si hay o no hay algo, seal, o no, dependiendo de si
es decir, nos dan una seal binaria esta rebota en alguna
(verdadero o falso). Generalmente se superficie, dando una tensin
montan en las alas de los robots, de nula, o positiva
modo que puedan detectar las paredes respectivamente.
mirando los techos de estas. Si hay una
pared directamente debajo del sensor, su El emisor y receptor pueden ser
valor ser verdadero, mientras que si no componentes separados, o estar
la hay el valor ser falso. Un micromouse contenidos juntos en un paquete plstico.
de este tipo tendra el siguiente aspecto: En la siguiente fotografa los vemos
juntos:

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 Sensores de distancia
una pared prxima al frente, mientras que Al contrario que los sensores de
los laterales permiten que el ratn corrija proximidad, los de distancia no
su trayectoria. En el caso de la figura devuelven un simple verdadero/falso.
anterior, si los sensores izquierdos leen Estos miden la distancia fsica entre el
un valor de 010 indica que el ratn est robot y la pared, y devuelven un valor, el
centrado dentro de la casilla. Si leemos cual, el microcontrolador pueda
un valor de 100, indicara que el ratn interpretar como distancia.
est descentrado a la derecha y necesita Una forma de poner este tipo de
corregir a la izquierda, y al contrario con sensores en funcionamiento es utilizar un
un valor 001. circuito similar al del sensor de
proximidad. La gran diferencia es que el
Usar este tipo de sensores tiene fototransistor no es forzado a la
otra ventaja. Si por ejemplo leemos el saturacin. El emisor genera una luz que

Pgina 3
se reflejar en la pared y, cuanto ms
cercano est el robot de esta, ms
brillante ser la luz reflejada y por lo
tanto mayor seal recibir el receptor.

Un mtodo bastante popular para medir


distancia es utilizando el GP2D12.

Este sensor emiten una luz IR sobre la


pared que es reflejada y recibida por el
dispositivo de deteccin de posicin Puente en H
(PSD). Dependiendo del ngulo de
reflexin el microcontrolador obtendr el
correspondiente dato para poder actuar. Motores paso a paso
Los sensores de este tipo suelen ser ms
inmunes a variaciones del color y de La principal caracterstica de estos
iluminacin. motores es el hecho de poder moverlos
paso a paso aplicando pulsos.
Motores Dependiendo del motor, un paso puede
ser desde 90 hasta 1.8, es decir, se
Los motores sern los encargados de necesitaran 4 pasos en el primer caso
generar los desplazamientos en el robot, (90) y 200 en el segundo (1.8), para
por lo tanto, la eleccin de estos ser algo completar un giro completo de 360.
determinante para conseguir un buen
movimiento, tanto en aceleracin como La gran ventaja de estos motores es que
en velocidad punta. no necesitamos usar encoders para
controlar el movimiento y saber dnde
A continuacin comentamos, estamos, es decir, seremos capaces de
brevemente, los principales motores, que conocer en todo momento la posicin sin
podremos utilizar. ms que llevar un control de los pulsos
aplicados.
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 Podemos clasificarlos en dos grupos:
puede generar ser funcin de la
corriente por las bobinas, siendo mayor Unipolares
al aumentar esta, es decir, si queremos Bipolares
generar una cierta velocidad, la corriente
que debemos generar ser mayor si el
motor tiene una carga que si no. 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.
Generalmente, para polarizar el motor
utilizaremos un puente en H, Para el caso que nos ocupa, quiz
consiguiendo as un buen control de la lo ms prctico sera utilizarlo tras
tensin aplicada y pudiendo invertir la haberle quitado los topes y la
polaridad, y por tanto el sentido de giro, electrnica encargada de mantener
si se necesita. la posicin, es decir, lo usaremos
Pgina 4
como un motor de continua, siendo estos
baratos y con buenas prestaciones.

Esto es lo que utiliza por ejemplo el robot


HERTRON:

Alcalinas: ste tipo se


encuentra fcilmente en
cualquier tienda y proporciona
un voltaje mayor que las
recargables. Como
inconveniente tenemos su alta
resistencia interna, por lo que es
HERTRON posible que no puedan
proporcionar mucha corriente
en determinados motores.
Bateras NiCad: Como inconveniente
La bateras sern la alimentacin de nos encontramos con que tienen
nuestro robot, sin ellas nuestro robot no una menor tensin que las
sera ms que un amasijo de hierros que alcalinas, necesitando un mayor
no servira para mucho, por eso habr que numero para alcanzar un voltaje
pensar detenidamente cual ser el dado. Sin embargo, por su baja
consumo para conseguir que en un futuro resistencia interna pueden
no nos encontremos problemas como que llegar a proporcionar una mayor
la energa que tenemos no sea la corriente a los motores, por esta
suficiente. No obstante, un gran razn suelen ser comunes en los
inconveniente es el peso de las mismas, micromouse de alto
por lo que no conviene poner pilas de rendimiento.
ms sino solo las que sean necesarias.
NiMH: La nica ventaja que
encontramos en este tipo de
La tabla siguiente enumera algunas de las bateras es que, manteniendo
caractersticas ms tpicas de los tipos una buena resistencia interna,
ms populares de bateras: tienen mayor capacidad de las
de NiCad.
Y como inconveniente la
dificultad a la hora de cargarlas.
Alcalinas NiCad NiMH unidad Anlisis de algoritmia

Voltaje de la clula 1.5 1.2 1.2 voltio Para abordar un estudio sobre la
algoritmia usada en los robots de
Capacidad 2000 500 1100 mAh laberinto, vamos a hacer una
clasificacin basada en si el laberinto es
Densidad de la energa 190 44 53 Wh/kg o no conocido.
Resistencia interna 150 10 30 ohm
Algoritmo aleatorio
Cargador ninguno simple difcilmente
Este algoritmo se basa en moverse al
azar, es decir, desplazarse en una

Pgina 5
direccin y seguir el pasadizo hasta el simples, y al guardarlas se actualizar
siguiente cruce, sin hacer giros de 180 directamente en los conjuntos de piezas.
hasta que no sea necesario. Simula el
comportamiento de un ser humano sin Esta estructuracin permite simplificar el
memoria y no recuerda por donde ha diseo, que aun as es complicado.
pasado, por lo que no garantiza la llegada
al final. En contraposicin, es un
algoritmo muy simple. Desarrollo por partes del diseo.
Diseo de nuestro robot.
Base del robot.
Para el diseo de nuestro robot
comenzamos con un boceto a mano La base sigue una forma triangular,
alzada en una hoja. La base de las ideas siguiendo los conceptos de estructuras
estaba ya realizada, faltaba manejar el estudiados. Con esta forma conseguimos
Catia. hacer los giros con mayor facilidad y
evitar atascos con las paredes. Las ruedas
Primero se realizaron las primeras piezas se incluyen dentro del permetro de la
simples (la base, los cds, los elipse base, para que no choquen
GP2D12). En estos primeros pasos en directamente contra la pared en caso de
el Sketcher y en el Part Desing se toma haber perdido la referencia. A
un primer contacto con las herramientas, continuacin se muestran sus planos:
que hace que se coja soltura poco a poco.
En cada una de las partes creadas se ha
utilizado una forma de dar volumen. No
hay una sola forma de crear una pieza. Sensor Sharp GP2Y0A21YK0F
Por ejemplo, un cilindro puede hacerse
como un rectngulo girado 360 sobre Los sensores es una parte fundamental
uno de sus lados o como una del robot. Se han diseado en catia
circunferencia a la que se le da volumen siguiendo las medidas de la hoja de
vertical (u horizontal). De ah la gran caractersticas.
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.
Arduino
El ensamblado final requiere Es el cerebro de nuestro robot. Se ha
que todos los sub-ensamblados esten diseado siguiendo las medidas de la
correctos. Si es as, es muy sencillo, ya placa original. Con ello conseguimos
que todas las medidas han sido previstas saber perfectamente donde puede ser
y encaja todo. En cuanto una medida es ensamblada y su posicin ideal dentro del
errnea, el montaje puede dar fallos conjunto del robot.
como la superposicin de piezas.

Los posibles errores se pueden


corregir directamente en las piezas

Pgina 6
motores paso a paso necesitamos
llevar una cuenta de los pasos dados, y
controlando el tiempo entre pasos
podemos saber la velocidad. Entonces
utilizamos uno de los Timer que
tenemos, lo configuramos para que
interrumpa cada 3.33ms, de manera
que configuramos el sistema para dar
un paso cada 6.66 ms.

Los sensores de distancia los


muestreamos cada 100 pasos (cada
media vuelta) de forma continua. As
Motor paso a paso. tenemos referencias de todas las
paredes cada poca distancia.
Es el elemento que hace que se mueva el
robot. Se hizo un primer modelo de Para que nosotros podamos ver
motor genrico, al que se le agreg el tipo los datos hemos instalado un LCD de
de soporte una vez que se supo de cual se 4 lneas que nos muestra los datos
dispona. Gracias al diseo en Catia, ofrecidos por los GP2 y el nmero de
podemos calcular la medida de distancia vueltas que han dado los motores paso
que debe tener con el suelo para que las a paso.
ruedas locas y los cds toquen el suelo sin
perder la horizontalidad de la base. A continuacin mostramos el cdigo
implementado:

#include <AFMotor.h>
#include <Servo.h>

int ir_sersor0 = A0;


float lectura;
int cm;

#define MAX_DISTANCE 80
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 40
#define COLL_DIST 10
#define TURN_DIST COLL_DIST+20

Montaje real del robot: AF_DCMotor izqMotor(2);


AF_DCMotor dereMotor(1);
Pensamos que para la prctica nos iba Servo myservo;
a ser de gran ayuda el montaje de un
robot de laberinto, por eso, aun int izqdistancia, deredistancia;
teniendo poco tiempo, decidimos int curDist = 0;
disearlo intentando que al menos String motorSet = "";
funcionase su sistema sensorial y int speedSet = 0;
motriz.

El primer paso que realizamos fue void setup() {


centrarnos en el funcionamiento
myservo.attach(10);
software del sistema, para ello
myservo.write(90);
utilizamos el lenguaje en el programa
delay(1000);
de arduino.
}
Nuestro primer objetivo era que se
moviesen los motores. Al utilizar
void loop() {
Pgina 7
//-----------------------------------------------
myservo.write(90); ------------------------------------------------
delay(90); --------------------------------------
curDist = readPing(); void moveStop() {
if (curDist < COLL_DIST) izqMotor.run(RELEASE);
{changePath();} dereMotor.run(RELEASE);}
moveForward(); //-----------------------------------------------
delay(500); ------------------------------------------------
} --------------------------------------
//----------------------------------------------- void moveForward() {
------------------------------------------------ motorSet = "BACKWARD";
--------------------------------------
izqMotor.run(BACKWARD);
void changePath() {
moveStop(); dereMotor.run(BACKWARD);
myservo.write(30); for (speedSet = 0; speedSet <
delay(500); MAX_SPEED; speedSet +=2)
deredistancia = readPing(); {
delay(500);
myservo.write(160); izqMotor.setSpeed(speedSet);
delay(700);
izqdistancia = readPing(); dereMotor.setSpeed(speedSet);
delay(500); // delay(5);
myservo.write(90); }
delay(100); }
compareDistance(); //-----------------------------------------------
} ------------------------------------------------
--------------------------------------
void moveBackward() {
void compareDistance() motorSet = "FORWARD";
{
if (izqdistancia>deredistancia) izqMotor.run(FORWARD);
{
turnLeft(); dereMotor.run(FORWARD);
} for (speedSet = 0; speedSet <
else if (deredistancia>izqdistancia) MAX_SPEED; speedSet +=2)
{ {
turnRight();
} izqMotor.setSpeed(speedSet);
else
{ dereMotor.setSpeed(speedSet);
turnAround(); //delay(5);
} }
} }
//-----------------------------------------------
------------------------------------------------
//----------------------------------------------- --------------------------------------
------------------------------------------------ void turnRight() {
-------------------------------------- motorSet = "RIGHT";

int readPing() { izqMotor.run(BACKWARD);


delay(70);
lectura = analogRead(ir_sersor0); dereMotor.run(FORWARD);
cm=pow(3027.4/lectura,1.2134);
return cm;
}

Pgina 8
dereMotor.setSpeed(speedSet+MAX_S
PEED_OFFSET);
delay(1500); CONCLUSIONES
motorSet = "BLACKWARD";
En cuanto a la estructura hemos visto
izqMotor.run(BACKWARD); que es preferible usar algo ms de tiempo
decidiendo una buena, ya que una mala
dereMotor.run(BACKWARD); 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
void turnLeft() { de la base ser mejor o peor y tendremos
motorSet = "LEFT"; ms o menos precisin de los sensores.

izqMotor.run(FORWARD); Respecto al tema de algoritmia, podemos


destacar tres conclusiones:

izqMotor.setSpeed(speedSet+MAX_SP Todos los algoritmos aplicados


EED_OFFSET); al enrutamiento de redes para
encontrar el camino ms corto
dereMotor.run(BACKWARD); desde un punto hasta otro, son
delay(1500); aplicables al diseo de robots de
motorSet = "BACKWARD"; laberinto, existe poca
algoritmia que de forma
izqMotor.run(BACKWARD); especfica sirviese para robots.
Otro punto importante a
dereMotor.run(BACKWARD); resear, es el de que cuanto ms
} sofisticado sea el laberinto a
//----------------------------------------------- implementar, requiere un
------------------------------------------------ control mucho ms complejo.
--------------------------------------
void turnAround() {
motorSet = "RIGHT"; RECOMENDACIONES
izqMotor.run(BACKWARD); Se recomienda a la revisin de
temas sobre robtica antes de
dereMotor.run(FORWARD); empezar hacer un robot tener
conocimientos tericos de que
como hacer un robot para que
dereMotor.setSpeed(speedSet+MAX_S tenga los menores
PEED_OFFSET); inconvenientes en el campo de
delay(2000); la practica
motorSet = "BLACKWARD"; Estudiar algoritmos para
comprender la implementacin
izqMotor.run(BACKWARD); de cdigo para el
funcionamiento tanto de los
dereMotor.run(BACKWARD); sensores y de los motores del
} robot.
Leer sobre la programacin en
Con este cdigo tanto las especificaciones del Arduino.
funcionamiento de los sensores y motores del robot
del laberinto se implementan en el Arduino y se
hace ms sencillo su desarrollo si tener aplicaciones
extra para el mismo

Pgina 9
BIBLIOGRAFA
http://www.cs.duke.edu/csed/jawaa/BFSani
m.html
http://ccc.inaoep.mx/~emorales/Cursos/Busq
ueda04/node13.html
http://www.personal.kent.edu/~rmuhamma/
Algorithms/MyAlgorithms/GraphAlgor/
breadthSearch.htm
http://www.ics.uci.edu/~eppstein/161/96021
5.html

http://micromouse.cannock.ac.uk/navigation
/straights.html
http://micromouse.cannock.ac.uk/navigation
/straights.htm http://www.robots-
dreams.com/micromouse/index.html

http://www.aula-
ee.com/webs/laberints/castella/res.htm
http://www.astrolog.org/labyrnth/algrithm.ht
m

http://neo.lcc.uma.es/evirtual/cdd/tutorial/re
d/bellman.html
http://www.boost.org/libs/graph/doc/bellma
n_ford_shortest.html
http://salaam.cs.buap.mx/ADA/Bellman_For
d.ppt#262,7,ejecucion
http://personales.upv.es/arodrigu/grafos/For
d.htm

http://www.ucy.ac.cy/~gracm05/PROCS1/1
0.pdf
http://topo.math.upsud.fr/~slc/TeX/lcs/hodg
es/Graphs_HodgesWilfried/graphs001a.pdf
http://www.osti.gov/bridge/servlets/purl/101
80101-GX4NXg/10180101.PDF
http://www2.ing.puc.cl/~iic11021/materia/ej
emplos/maze.htm

Pgina 10

También podría gustarte