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