legos1

6

Click here to load reader

Transcript of legos1

Page 1: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

1

Resumen—En el presente laboratorio se experimenta la

construcción de robots móviles a partir de herramientas como

la de Lego Mindstorms con la finalidad de armar una

plataforma mecánica con locomoción por ruedas, dotada de

dos tipos de sensores (de contacto y de luz) para que ejecute la

detección de obstáculos y el seguimiento de una línea negra

sobre una superficie blanca.

Palabras clave—Lego Mindstorms, robots móviles,

programación en Java, Lejos RCX API.

Abstract—In this laboratory experience building mobile

robots from tools like Lego Mindstorms in order to build a

mechanical platform with locomotion by wheels, equipped

with two types of sensors (light and contact) to execute the

obstacle detection and tracking of a black line on a white

surface.

Key words—Lego Mindstorms, mobile robots, Java

programming, Lejos RCX API.

I. OBJETIVOS

Conocer y experimentar con los diferentes tipos

de sensores provistos por Lego Mindstorms.

Construir la plataforma mecánica para la

realización de las pruebas correspondientes a

cada tipo de sensor.

Realizar la programación del robot móvil a

través de la API Lejos de Java.

II. INTRODUCCIÓN

Lego Mindstorms es un juego de robótica para

niños fabricado por la empresa Lego, el cual posee

elementos básicos de las teorías robóticas, como la

unión de piezas y la programación de acciones, en

forma interactiva. Este robot fue comercializado por

primera vez en septiembre de 1998.

Comercialmente se publicita como Robotic

Invention System, en español Sistema de Invención

Robotizado (RIS). También se vende como

herramienta educacional, lo que originalmente se

pensó en una sociedad entre Lego y el MIT

(Massachusetts Institute of Technology). La versión

educativa se llama Lego Mindstorms for School, en

español Lego Mindstorms para la escuela y viene

con un software de programación basado en la GUI

(graphical user interface) de Robolab (entorno de

programación gráfico que permite controlar el

bloque inteligente de LEGO RCX) [1].

III. LEGO MINDSTORMS RCX

El bloque RCX es la parte central del Lego

Mindstorms, ya que aquí se encuentra toda la parte

lógica y electrónica que permite la mayoría de las

acciones del robot, almacenándose hasta 5

programas que se pueden cargar en su memoria

interna, y guardándose allí el firmware básico para

el control de los distintos dispositivos que se pueden

conectar al bloque.

El bloque RCX tiene tres versiones oficiales: 1.0,

1.5 y 2.0, las cuales presentan mejoras en el

software sin verse afectado mayormente el

hardware que se vende con el bloque, sin embargo,

la parte electrónica de los bloques no es compatible,

ya que las tres versiones poseen distintas

regulaciones de voltaje, pero aun así no afecta el

hardware que posee el bloque.

Su microcontrolador interno es Hitachi H8/3292,

que funciona a 5 volts y una velocidad aproximada

de 16 Mhz, siendo esa su velocidad máxima para la

serie de Hitachi H8/3000. Posee una memoria ROM

de 16 Kb, una memoria RAM externa de 32 Kb y

posee un decodificador Analógico Digital que

permite transformar las distintas entradas de energía

en bits. Su empaque original es de un circuito

impreso, que carece de zócalos de conexión, y se

encuentra soldada a la base del circuito impreso del

bloque. Este microcontrolador puede procesar

varias instrucciones por segundos, pero su mayor

desventaja comparado con el Lego Mindstorms

NXT es la baja capacidad de mantener hilos de

procesos, es decir, no puede ejecutar dos

instrucciones al mismo tiempo, y a pesar que el

Introducción a la Robótica Móvil con Lego

Mindstorms Arnold Alejandro Cruz, Gerardo Andrés López, Anderson Fajardo Londoño, Juan David Valenzuela

{arnold.91, galogeing, anderskater15, judavara}@hotmail.com

Universidad del Quindío

Page 2: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

2

programador o usuario compruebe que si puede, no

es así, sino que la velocidad de proceso impide

distinguir el retardo producido [2].

Fig. 1 Bloque RCX de Lego Mindstorms.

En la parte delantera del bloque RCX, el Lego

Mindstorms trae un puerto infrarrojo que le permite

la comunicación con el computador para transferir

el firmware y los programas. Funciona a una

frecuencia de 37 Khz, que se asemeja al control

remoto de un televisor, transmitiendo datos a una

velocidad aproximada de 2400 bps, lo que implica

que cada bit se transmite a 417 us.

Una de las cualidades del puerto infrarrojo es la

capacidad de conectarse a otro dispositivo que

posea el puerto, como Palms, computadores

portátiles y algunos modelos de teléfonos móviles,

lo que permite realizar pequeñas plataformas de

comunicaciones para lugares recónditos o muy

pequeños.

La distancia de separación entre el RCX y el

receptor es como máximo a 30 cm, funcionando a

su máxima capacidad desde la base de la torre y sin

objetos que interfieran la visual entre ambos

instrumentos. Sin embargo, la distancia es menor

debido a la contaminación lumínica que puede

existir en el cuarto [3].

A. Sensor de luz

El sensor de luz permite tomar una muestra de luz

mediante un bloque modificado que en un extremo

trae un conductor eléctrico y por el otro una cámara

oscura que capta las luces. Esta cámara es capaz de

captar luces entre los rangos de 0,6 a 760 lux. Este

valor lo considera como un porcentaje, el cual es

procesado por el bloque lógico, obteniendo un

porcentaje aproximado de luminosidad.

El bloque RCX con la fórmula

determina el porcentaje obtenido por la lectura de la

luz, tomando una muestra cada 2.9ms.

Debido a que este sensor capta grados de

luminosidad, no es capaz de distinguir colores, sólo

capta la existencia del blanco (claridad), negro

(oscuridad) y los tonos de grises que corresponden a

los distintos porcentajes de luz existentes en el

medio [4].

Fig. 2 Sensor de luz lego RCX.

Para analizar los valores captados por los

sensores se tiene la siguiente tabla:

Tabla 1.

Mediciones del sensor de luz.

Voltaje Raw Sensor(Ohm) Luz(lux) Temp(°C)

5.0

B. Sensor de contacto

El sensor de contacto permite detectar si el bloque

que lo posee ha colisionado o no con algún objeto

que se encuentre en su trayectoria inmediata. Al

tocar una superficie, una pequeña cabeza externa se

contrae, permitiendo que una pieza dentro del

bloque cierre un circuito eléctrico haciendo circular

energía, provocando una variación de voltaje de 0 a

5 V.

En este caso, si la presión supera una medida

estándar de 450, mostrado en la pantalla de LCD, se

considera que el sensor está presionado, de otro

modo, se considera que está sin presión [5].

Page 3: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

3

Fig. 3 Sensor de contacto lego RCX.

IV. PROCEDIMIENTO

A. Montaje robot móvil evasor de obstáculos

Se lleva a cabo la construcción de la plataforma

móvil Roverbot planteada por la guía de laboratorio,

se monta paso a paso siguiendo el procedimiento

especificado por el manual de los legos RCX para

finalmente conectar los sensores de contacto

obteniéndose de esta manera la siguiente estructura:

Fig. 4 Robot móvil evasor de obstáculos.

Finalmente se procede a establecer el algoritmo a

través de la API de lejos que permitirá al robot

móvil eludir obstáculos de la mejor manera posible.

Si uno de los sensores detecta algún obstáculo el

robot retrocede para luego girar a la derecha o a la

izquierda durante cierto tiempo según el sensor

accionado para luego continuar su trayectoria en

línea recta hasta encontrar una nueva obstrucción.

La siguiente figura muestra la lógica de control:

Inicio

Configuración tipo y modo del sensor: Tipo contacto Modo booleano

Activación de los sensores S1 y S3

Modificación de la potencia de los motores

A y C

¿sensor S1 presionado?

Motor A y C hacia atrás

SI

NO

Motor C hacia delante

¿sensor S3 presionado?

Motor A y C hacia atrás

SI

Motor A hacia delante

Motor A y C hacia delante

NO

Lectura sensores S1 y S3

Fig. 5 Lógica robot móvil evasor de obstáculos.

B. Montaje robot móvil seguidor de línea negra

Se procede a cambiar los sensores de contacto de la

plataforma construida por el sensor de luz, en donde

resulta la siguiente estructura:

Fig. 6 Robot móvil seguidor de línea negra.

Donde el objetivo principal es crear un algoritmo

que permita al robot móvil seguir una línea negra

sobre una superficie blanca por medio de un solo

sensor de luz. Para lograr esto fue necesario calibrar

el sensor de luz a través de la lectura analógica de

los diferentes valores obtenidos cuando se

accionaba sobre línea negra y sobre la superficie

blanca, en donde se obtuvo un valor analógico de

Page 4: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

4

para el color negro de la línea. Con base en este

valor se procedió a realizar la correspondiente

lógica de control que permitiría el seguimiento de la

línea negra:

Inicio

Configuración tipo y modo del sensor: Tipo luz Modo analógico

Modificación de la potencia de los motores

A y C

¿iteraciones < 6? && ¿sensor S2 < 750?

SI

NO Motor A y C hacia delante

Motor A hacia atrásMotor C hacia delante

Tiempo*iteraciones

Lectura sensor S2Iteraciones = 1

Activación del sensor S2

¿iteraciones%2==0?

Lectura sensor S2Iteraciones++

SI

Motor A hacia delanteMotor C hacia atrásTiempo*iteraciones

Lectura sensor S2Iteraciones++

NO

Fig. 7 Lógica robot móvil seguidor de línea negra.

Las iteraciones permiten establecer por cuanto

tiempo debe permanecer girando el robot para

encontrar la línea negra, es decir, si por ejemplo

durante 50 milisegundos el robot móvil no ha

encontrado la línea negra este deberá girar en

sentido contrario una vez más 50 milisegundos (100

milisegundos), si aún continua sin encontrarla girará

en sentido contrario, pero esta vez dos veces más 50

milisegundos (150 milisegundos) y así

sucesivamente hasta encontrar la línea.

V. CONCLUSIONES

La utilización de estructuras para la construcción de

plataformas con diferentes tipos de locomoción

facilitan el desarrollo de robots móviles a precios

relativamente bajos y en el menor tiempo posible,

con la disposición de todo tipo de piezas para el

armado de dichas plataformas en donde la única

limitación presente es la capacidad creativa de cada

autor. Además estructuras como las de los juegos de

robótica lego suministran una serie de sensores y

actuadores, donde combinan la electrónica con

bloques de piezas, que permiten establecer gran

cantidad de sistemas con diversas aplicaciones

como la construcción de robots móviles que

detecten obstáculos y sigan diferentes tipos de

trayectorias marcadas por una línea negra.

Se concluye que la tecnología robótica lego permite

construir, depurar y reparar cada diseño de

estructura en menor tiempo, que si fuese construido

cada robot, cada plataforma con la manufactura de

cada pieza, no sería posible ni siquiera igualar

dichas facilidades proporcionadas por lego para la

creación de todo tipo de robots. Permitiendo de esta

manera invertir y focalizar el tiempo y los recursos

de una forma más efectiva, desarrollando así

conceptos de informática, mecánica y electrónica

con los mínimos esfuerzos académicos.

Finalmente se concluye que de los diferentes tipos

de locomoción, la que más facilidades presenta

frente a la descripción matemática de su dinámica y

frente a la implementación de la misma es la

locomoción por ruedas. Este tipo de locomoción,

además de que se construye con relativa facilidad,

permite la movilización de mucho mas peso que la

locomoción con patas, pero presenta la desventaja

de que la altura del obstáculo a superar no debe ser

mayor al radio de la rueda.

REFERENCIAS

[1]http://es.wikipedia.org/wiki/Lego_Mindstorms

[2]http://es.wikipedia.org/wiki/Lego_Mindstorms#B

loque_RCX

[3]http://es.wikipedia.org/wiki/Lego_Mindstorms#B

loque_RCX

[4]http://es.wikipedia.org/wiki/Lego_Mindstorms#B

loque_RCX

[5]http://es.wikipedia.org/wiki/Lego_Mindstorms#B

loque_RCX

Page 5: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

5

ANEXOS

Algoritmo correspondiente al robot detector de obstáculos:

import josx.platform.rcx.*; public class obstaculos { public static void main(String[] args) throws Exception { Sensor.S1.setTypeAndMode(SensorConstants.SENSOR_TYPE_TOUCH, SensorConstants.SENSOR_MODE_BOOL); Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_TOUCH, SensorConstants.SENSOR_MODE_BOOL); Sensor.S1.activate(); Sensor.S3.activate(); Motor.A.setPower(7); Motor.C.setPower(7); while (true) { boolean myS1State = Sensor.S1.readBooleanValue(); boolean myS3State = Sensor.S3.readBooleanValue(); if (myS1State) { Sound.systemSound(false, 2); Motor.C.backward(); Motor.A.backward(); Thread.sleep(1000); Motor.C.forward(); Thread.sleep(500); } else { if (myS3State) { Sound.systemSound(false, 2); Motor.C.backward(); Motor.A.backward(); Thread.sleep(1000); Motor.A.forward(); Thread.sleep(500); } else { Motor.A.forward(); Motor.C.forward(); } } } } }

Page 6: legos1

Universidad del Quindío, Alfonso Cruz, López Orozco, Fajardo Londoño, Valenzuela Ramos. Introducción a la robótica

móvil.

6

Algoritmo correspondiente al robot seguidor de línea negra:

import josx.platform.rcx.*; public class seguidor { public static void main(String[] args) throws Exception { Sensor.S2.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT, SensorConstants.SENSOR_MODE_RAW); Sensor.S2.activate(); Motor.A.setPower(7); Motor.C.setPower(7); while (true) { int s2raw = Sensor.S2.readRawValue(); int iteracion = 1; Motor.A.forward(); Motor.C.forward(); while (iteracion < 6) { if (s2raw < 750) { if (iteracion%2 == 0) { Motor.A.backward(); Motor.C.forward(); Thread.sleep(50*iteracion); s2raw = Sensor.S2.readRawValue(); iteracion++; } else { Motor.A.forward(); Motor.C.backward(); Thread.sleep(50*iteracion); s2raw = Sensor.S2.readRawValue(); iteracion++; } } else { break; } } } } }