Está en la página 1de 3

Informe Práctica # 2: Robot seguidor de linea

Jorge Daniel Vásquez Vergara Jose David Estrada Cardozo


Dpto. de Ingeniería Eléctrica y Electrónica Dpto. de Ingeniería Eléctrica y Electrónica
Universidad del Norte Universidad del Norte
Barranquilla, Colombia Barranquilla, Colombia
jorgedv@uninorte.edu.co jdestrada@uninorte.edu.co

I. O BJETIVOS 2. Inicializamos los motores tanto izquierdo como el dere-


Poner en práctica seguimiento de rutas en la plataforma cho, en velocidad y posición:
E-Puck. leftMotor = robot.getDevice(’left wheel motor’)
Utilizar la técnica de seguimiento de línea para recorrer rightMotor = robot.getDevice(’right wheel motor’)
un entorno. leftMotor.setPosition(float(’inf’))
rightMotor.setPosition(float(’inf’))
II. I NTRODUCCIÓN leftMotor.setVelocity(0.0)
En el siguiente documento se explica la elaboración de rightMotor.setVelocity(0.0)
un código para un robot seguidor de linea que funcione de 3. Inicializamos los sensores adicionales que agregamos
manera eficiente y rápida, sin usar otro tipo de sensores que y los habilitamos para el tiempo de muestreo (TIME
no sean los sensores de distancia (IR), el robot recorrerá el STEP):
mundo (FIGURA 1), sin salirse de la linea trazada y en caso left ir = robot.getDevice(’ir1’)
e salirse, encontrara la linea de nuevo y retornará su camino left ir.enable(TIME STEP)
hasta finalizar el recorrido. right ir = robot.getDevice(’ir0’)
right ir.enable(TIME STEP)
center ir = robot.getDevice(’ir3’)
center ir.enable(TIME STEP)
while robot.step(timestep) != -1:
4. Creamos variables para leer los datos arrojados por los
sensores:
left ir value = left ir.getValue()
right ir value = right ir.getValue()
center ir value = center ir.getValue()
5. Imprimimos los valores leídos de los sensores:
print("left: right: center: ".format(left ir value,right
ir value,center ir value))
6. Inicializamos las velocidades de los motores en el 50
por ciento de la velocidad máxima (MAX SPEED):
leftSpeed = 0.5 * MAX SPEED
rightSpeed = 0.5 * MAX SPEED
7. Agregamos condiciones para los sensores infrarrojos en
la izquierda detenten la línea, hagan pequeños giros que
permitan que el robot siga en la línea:
Figura 1: Mundo if(left ir value>right ir value) and (3 <left ir value
<1500 ): leftSpeed = -MAX SPEED * 0.001
III. D ESCRIPCIÓN DEL CÓDIGO if(right ir value>left ir value) and (3 <right ir value
1. Declaramos la velocidad máxima y el tiempo de mues- <1500 ): rightSpeed = -MAX SPEED * 0.001
treo: 8. Agregamos condicionales con respecto al sensor infra-
MAX SPEED = 6.28 rrojo central, para reducir la velocidad y pueda seguir el
TIME STEP = 64 recorrido en caso de líneas rectas perpendiculares:
robot = Robot() if(center ir value>right ir value ) and (center ir
timestep = int(robot.getBasicTimeStep()) value>15):
leftSpeed = rightSpeed * (MAX SPEED * 0.1)
if(center ir value>left ir value) and (center ir va-
lue>15):
rightSpeed = leftSpeed * (MAX SPEED * 0.1)

9. Experimentalmente nos percatamos de que en ciertos


puntos los valores de los sensores son todos iguales a
1000 y estos puntos el robot daba giros bruscos y en
ocasiones se salía de la pista por lo que agregamos este
condicional:

if(center ir value==right ir value) and (center ir


value==left ir value ):
rightSpeed = MAX SPEED
leftSpeed = MAX SPEED
leftMotor.setVelocity(leftSpeed)
rightMotor.setVelocity(rightSpeed)
pass

10. Por ultimo las velocidades de los motores izquierdo y


derecho serán leftspeed y rigthspeed respectivamnete, es Figura 3: Mundo Zonas Curvas
decir que las velocidades normalmente serán las velo-
cidades dadas por la cinemática inversa pero cambiaran En la Figura 3 se evidencia como robot logra superar las
en caso de que los sensores de distancia detecten algo. partes que llevan una curva con bastante facilidad sin salirse
en ningún momento de la linea.
leftMotor.setVelocity(leftspeed)
rightMotor.setVelocity(rigthspeed)
pass

Figura 4: Mundo Final del recorrido

El robot logra hacer el recorrido de manera exitosa sin


Figura 2: Mundo Zonas Rectas salirse de la linea trazada en ningún momento y con un tiempo
de 3:30 tal y como se muestra en la Figura 4.
IV. PROCESO
Como se muestra en la Figura e, e robot logra superar las La idea principal para la elaboración de este controlador
partes donde se encuentran dos rectas que forman un ángulo era utilizar sensores infrarrojos en el lado derecho e izquierdo
de 90° sin salirse en ningún momento de la linea. para realizar pequeños giros cada vez que se encontrara un
curva, esta idea funciono para pistas básicas, al momento
de probarlo en pistas mas elaboradas nuestro robot perdía el
camino, por lo que decimos agregar un sensor central para
limitar a nuestro robot y evitar que se saliera de la linea, uno
de los mayores problemas encontrado durante la elaboración
del controlador para nuestro robot, fue determinar el valor
de las velocidades de los motores a la hora de pasar por las
curvas, también tuvimos que analizar los valores arrojados por
los sensores de distancia para poner restricciones al robot, los
cuales tenían que encontrase de manera experimental, por lo
que fue necesario una gran cantidad de pruebas hasta poder
encontrar los valores con los cuales nuestro robot consiguiera
el desplazamiento deseado, se debían tener los valores de la
velocidad muy reducidos para que el robot no se saliera del
carril y consiguiera hacer todo el recorrido de la manera mas
rápida posible.
V. RESULTADOS
Con nuestro controlador el robot nunca se sale de su camino,
por lo que no fue necesario hacer una modificación para que el
robot regrese a la linea, nuestro código funciona perfectamente
en la pista de la Figura 1 y en varias pistas en las que se
realizaron pruebas, sin embargo en algunos casos es necesario
eliminar una de las condiciones en el código para que funcione
en dichos casos.
VI. B IBLIOGRAFÍA

También podría gustarte