Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

8
Cód. 285744 285750. Informe 01. 22 de Febrero de 2013 1 ResumenEn este laboratorio se realizaron dos prácticas que se basaban en realizar una interfaz entre un Software y un Hardware, en este caso se utilizó el software LEGO para poder mover un motor por medio del Brick y que este movimiento pueda ser modificado fácilmente mediante la manipulación de un código, con ello se podrá introducir más en la utilización de la plataforma LEGO. Palabras Clave Control, Hardware, LEGO, Mindstorms, Motor, Posición, Software, Velocidad. I. OBJETIVOS A. Objetivo General En esta primera práctica se pretende familiarizar al alumno con las herramientas básicas necesarias para la implementación de algoritmos de control en la plataforma de Lego Mindstorms NXT. El lenguaje que se utilizará para la programación es el denominado NXC (Not eXactly C) para los Lego NXT, el entorno de programación será el proporcionado por el software Brick Command Center B. Objetivos Específicos Identificar los componentes principales de la plataforma LEGO Mindstorms como lo son los sensores, actuadores y unidades de procesamiento (Brick). Examinar las características técnicas de los sensores, actuadores y los componentes internos del Brick. Estudiar las diferentes herramientas de programación presentes en el software Brick Command Center. Reconocer las estructuras básicas de programación del lenguaje NXC. II. INTRODUCCIÓN La plataforma LEGO de Mindstorms es una aplicación muy utilizada en la industria de la robótica mas que todo para sistemas de control que no necesitan un esfuerzo muy grande ni tampoco requerimientos muy extremos, si no como para prototipos de robots, controles de velocidad, control de sistemas y aplicaciones que comúnmente se pueden encontrar en el área de la ingeniería. Para este caso se va a realizar una pequeña aproximación en el área de la programación con software del Brick NXT y con lenguaje NXC para conocer sobre algunas de las funciones y variables que son manejadas en este tipo de estructuras; esto se realizara mediante el control de velocidad y posición de un motor modificando su funcionamiento por medio de un programa copiado en el Brick por medio de Bricx Command Center. Control: Introducción a la Plataforma LEGO Mindstorms Julián A. Alarcón Manrique, Daniel M. Vargas Corredor, Control. UNIVERSIDAD NACIONAL DE COLOMBIA.

Transcript of Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Page 1: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

1

Resumen— En este laboratorio se realizaron dos

prácticas que se basaban en realizar una interfaz entre un

Software y un Hardware, en este caso se utilizó el software

LEGO para poder mover un motor por medio del Brick y

que este movimiento pueda ser modificado fácilmente

mediante la manipulación de un código, con ello se podrá

introducir más en la utilización de la plataforma LEGO.

Palabras Clave — Control, Hardware, LEGO,

Mindstorms, Motor, Posición, Software, Velocidad.

I. OBJETIVOS

A. Objetivo General

En esta primera práctica se pretende familiarizar al

alumno con las herramientas básicas necesarias para la

implementación de algoritmos de control en la

plataforma de Lego Mindstorms NXT.

El lenguaje que se utilizará para la programación es el

denominado NXC (Not eXactly C) para los Lego NXT,

el entorno de programación será el proporcionado por el

software Brick Command Center

B. Objetivos Específicos

Identificar los componentes principales de la

plataforma LEGO Mindstorms como lo son los

sensores, actuadores y unidades de

procesamiento (Brick).

Examinar las características técnicas de los

sensores, actuadores y los componentes internos

del Brick.

Estudiar las diferentes herramientas de

programación presentes en el software Brick

Command Center.

Reconocer las estructuras básicas de

programación del lenguaje NXC.

II. INTRODUCCIÓN

La plataforma LEGO de Mindstorms es una aplicación

muy utilizada en la industria de la robótica mas que todo

para sistemas de control que no necesitan un esfuerzo

muy grande ni tampoco requerimientos muy extremos, si

no como para prototipos de robots, controles de

velocidad, control de sistemas y aplicaciones que

comúnmente se pueden encontrar en el área de la

ingeniería.

Para este caso se va a realizar una pequeña

aproximación en el área de la programación con

software del Brick NXT y con lenguaje NXC para

conocer sobre algunas de las funciones y variables que

son manejadas en este tipo de estructuras; esto se

realizara mediante el control de velocidad y posición de

un motor modificando su funcionamiento por medio de

un programa copiado en el Brick por medio de Bricx

Command Center.

Control:

Introducción a la Plataforma

LEGO Mindstorms

Julián A. Alarcón Manrique, Daniel M. Vargas Corredor, Control.

UNIVERSIDAD NACIONAL DE COLOMBIA.

Page 2: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

2

III. PROCEDIMIENTO DEL LABORATORIO

Para realizar este laboratorio es necesario dividirlo en

2 secciones, primeramente se va a realizar un análisis y

familiarización con el hardware y la segunda parte

consiste en ver cómo funciona el software y la forma de

utilizarlo para manejar un motor.

A. Introducción al Hardware

1) Características Técnicas De La Unidad Básica De

Procesamiento Brick

El Brick de Lego® es un dispositivo programable de

grandes aplicaciones en el área de la robótica, debido a

su fácil uso con el software Brick Command Center, el

cual utiliza un lenguaje de programación de alto nivel

por lo cual es muy fácil de implementar cualquier

programa y de esta forma utilizar el hardware disponible

para el Brick al gusto del programador.

Antes de poder usarlo correctamente, es necesario

conocer sus características técnicas como su capacidad

de memoria, de procesamiento, que tipo de protocolo de

comunicación utiliza con sus componentes y como

puede ser utilizado el mismo.

Primeramente se va a realizar un pequeño esquema de

cómo es la configuración interna del Brick para así

conocer la relación entre cada uno de sus módulos y

poderlos analizar con detalle a cada uno de ellos.

Figura 1. Configuración interna del Brick. [1]

Ahora bien, se puede especificar que contiene cada

módulo internamente y así se puede saber con qué

recursos se cuenta para la ejecución de un programa.

Procesador Principal:

Atmel® 32-bit ARM® processor, AT91SAM7S256

- 256 KB FLASH

- 64 KB RAM

- 48 MHz

Co-Procesador:

Atmel® 8-bit AVR processor, ATmega48

- 4 KB FLASH

- 512 Byte RAM

- 8 MHz

Comunicación Inalámbrica Bluetooth:

CSR BlueCore 4 v2.0 +EDR System

- Perfil de Puerto Serial (SPP)

- Interna 47 KByte RAM

- Externa 8 MBit FLASH

- 26 MHz

Comunicación USB 2.0:

Velocidad Máxima (12 Mbit/s)

4 Puertos de Entrada:

6-conexiones de interface digital y análoga

- 1 puerto de alta velocidad, IEC 61158

Tipo 4/EN 50170 compliant

3 Puertos de Salida:

Page 3: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

3

6-conexiones soportadas para interfaz de codificadores

de entrada.

Display:

LCD de 100 x 64 pixeles a blanco y negro

- Área: 26 x 40.6 mm

Altavoz:

Canal de salida con una resolución de 8 bits

- Frecuencia de muestreo de 2-16 KHz

4 Botones de Interfaz con el Usuario:

Botones de goma

Fuente de Energía:

6 Baterías AA

- Recomendable Alcalinas

- Batería Recargable de Litio

Conector:

6-conexiones con conector RJ12 con ajuste lateral

derecho.

2) Limitaciones Del Brick

El Brick aunque es un dispositivo de una amplia

variedad de aplicaciones, también posee cierta cantidad

de limitaciones que no permite que sea utilizado en

algunas áreas de la ingeniería.

Una de las grandes desventajas de esté es que la

memoria para almacenar los códigos en NXC es muy

pequeña y cuando esta se encuentra muy saturada no se

puede copiar archivos nuevos para ser ejecutados por el

Brick, por otro lado una limitación también importante

es la cantidad de entradas y salidas del dispositivo ya

que este solo posee 3 salidas y 4 entradas que limita

mucho a una cantidad de aplicaciones que puede utilizar

muchos más periféricos tanto de salida como de entrada.

Por ultimo otra de las restricciones más visibles del

Brick es su espacio de impresión en pantalla ya que solo

permite imprimir hasta 8 líneas al tiempo y existen

múltiples aplicaciones donde la pantalla tiene que

mostrar muchos más caracteres para poder asociar al

usuario con el entorno del hardware.

3) Características Técnicas De Sensores [2].

Ultrasonido

Figura 2. Sensor Ultrasónico.

Sensor Digital que realiza una medición de distancias

por medio de ultrasonido.

Transmite mediante protocolo de comunicación .

Disparo simple: Realiza una medición cada vez que el

byte de orden se desvía, identificando hasta 8 objetos

para guardarlos en un arreglo de 0 – 7 bytes.

Medición Continua: Tipo de medición por defecto que

se realiza una nueva medición continúa en el intervalo.

EOPD(Electro Optical Proximity Detector)

Sensor de proximidad Opto-eléctrico, utiliza la luz

visible para su operación.

Dos modos de operación: sensibilidad por 1X y 4X.

Cada uno tiene una frecuencia de muestreo ligeramente

diferente (figura 3).

Page 4: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

4

Figura 3. Funcionamiento sensor EOPD

Puede leer hasta 300 muestras por segundo.

Color

Sensor de color que funciona mediante el uso de un

LED blanco.

Figura 4. Sensor de color.

Debe ser manejado a una distancia no muy cercana al

objetivo (figura 4).

Para el uso de este sensor es necesario de unas

equivalencias para cada color y que de esta forma se

pueda manejar desde el programa (figura 5).

Figura 5. Tabla de colores

Giroscopio

Este sensor mide los giros que realiza el dispositivo y

devuelve un valor que representa los grados de rotación

por segundo.

Puede medir hasta ± 360 ° por segundo de rotación.

Permite lectura de 300 mediciones por segundo.

El eje de medición se encuentra en el eje vertical

(figura 6).

Figura 6. Eje de medición del Giroscopio.

Acelerómetro

Este es un acelerómetro de 3 ejes que mide la

aceleración en X, Y, Z (figura 7).

Figura 7. Ejes del acelerómetro.

Puede ser utilizado para medir la inclinación sobre los

ejes.

Page 5: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

5

Touch

Figura 8. Sensor Touch.

Sensor que detecta la presión de un objeto (figura 8).

Reacciona al tacto y al soltar

Puede ser utilizado para detectar una serie de

pulsaciones en un dispositivo.

Se da un rango de sensado de 0 a 100 mostrándolo con

un LED.

Brújula magnética

Figura 9. Brújula magnética

Contiene una brújula digital que calcula el ángulo de

partida mediante un campo magnético (figura 9).

B. Introducción al Software

1) Estructura Básica De Programación NXT

La estructura básica de la programación del NXT se

encuentra en lenguaje NXC que quiere decir Not eXactly

C, lo cual indica que es muy similar al lenguaje utilizado

en C pero con algunas pequeñas variaciones en los

comandos, lo cual facilita el manejo del entorno de

desarrollo. [3]

Primeramente un programa diseñado en NXC se

compone de 2 partes fundamentales que son bloques de

código: las tareas y las funciones, cada tipo de bloque

tiene sus propias características únicas, pero comparten

una estructura en común. El número máximo de bloques

en tareas y funciones es de 256.

Hay dos formas de ver la estructura del código, el

modo en el que se ve en la programación y la forma en la

que se ejecuta en el programa, ya que en la ejecución se

puede saltar entre líneas para ir a alguna tarea o función

descrita anteriormente por ejemplo.

El orden léxico (orden de escritura) es importante para

el lenguaje NXC pero no lo es para el Brick NXT, por lo

tanto en el orden en el cual un programador escriba un

código no tiene ningún efecto en el orden de ejecución,

pero para esto existen unas normas de control para el

orden de ejecución.

Tiene que haber una tarea principal y esta tarea se

ejecutará siempre en primer lugar.

El momento en el cual cualquier otra tarea que

será ejecutara es determinada por las funciones

API documentadas en el módulo de comando.

Una función se ejecutara una vez que sea llamada

desde un bloque de código.

Por otro lado también existen normas para el orden

léxico, las cuales son:

Cualquier identificador que nombra una tarea o

función debe ser conocida por el compilador antes

de utilizarlo en el bloque de código.

Page 6: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

6

Una tarea o función definida debe ser reconocida

por el compilador.

Una tarea o función tiene que tener una

nomenclatura adecuada para el compilador.

Una vez que una tarea o función se define no

puede ser redefinida o declarada.

Una vez que una tarea o función se declara no

puede volver a ser declarada.

Ahora conociendo esto, se puede conocer que tipos de

variables son comúnmente utilizadas en la programación

con NXC, las cuales son prácticamente las mismas para

cualquier otro lenguaje de programación.

bool: Booleano o bandera

byte: Entero de 8 bits

char: Tipo carácter de 8 bits

int: Entero de 16 bits

short: tipo short de 16 bits

long: Entero de 32 bits

unsigned: Es usado para modificar los tipos

chart, int y long.

float: Flotante de32 bits

mutex: valor de 32 bits usado para sincronizar

el acceso a recursos

string: Tipo cadena de caracteres

Structures: Definir estructuras en el programa

Arrays: Tipo de vectores

Estos son los tipos de variables que se van a utilizar de

ahora en adelante y también es necesario definir algunos

de los comandos que van a ser utilizados en este

laboratorio.

TextOut:

Es un comando de salida que se utiliza para dibujar

texto en el Brick especificando una serie de parámetros

como (x,y,str,Options):

x: Coordenada en x para el inicio del texto

y: Coordenada en y para el inicio del texto

str: Cadena de caracteres a pintar

Options: Opciones de dibujo las cuales se dan con los

números:

0000: Normal

0001: Limpiar toda la pantalla

0002: Limpiar todo excepto la pantalla de

estado.

0004: Limpiar pixeles

0008: Lógico And

0010: Lógico Or

0018: Lógico Xor

0020: Llenar la forma

0003: Limpiar modos de pantalla

0400: Poli línea, polígono

0800: Limpiar línea

1000: Borrar hasta el final de la línea después

de escribir.

NumbOut:

Es un comando de salida que se utiliza para dibujar en

el Brick pero esta vez solo para uso de números

utilizando los mismos parámetros que utiliza TextOut

OnFwd:

Este comando realiza el movimiento del motor en

sentido positivo.

OnRev:

Este comando realiza el movimiento del motor en

sentido negativo.

Off:

Este comando apaga los motores sin importar en qué

dirección se estén moviendo.

Wait:

Realiza una interrupción en el programa en una

cantidad específica de milisegundos.

MotorActualSpeed:

Page 7: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

7

Esta función retorna el valor de la velocidad actual del

motor.

MotorRotationCount:

Esta función retorna el valor de rotaciones actuales del

motor.

2) Diseño e implementación de los algoritmos.

Después de conocer la estructura básica de la

programación NXT, y a ver analizado sus distintas

herramientas y comandos se puede proceder a realizar el

código para controlar la velocidad del motor siguiendo

un patrón de señal de diente de sierra como se puede ver

en la imagen (figura 9), para ello es necesario realizar un

ciclo para que se ejecute el programa por un tiempo o

cantidad de ciclos dados.

Figura 9. Patrón para el control de velocidad y posición.

El código que se va a utilizar va a usar los comandos

MotorActualSpeed el cual indica el valor de la velocidad

que lleva el motor que se encuentra conectado en la

salida A del Brick, también se va a utilizar TextOut y

NumOut los cuales imprimen en la pantalla del Brick el

texto y los números deseados con una serie de reglas que

fueron descritas anteriormente, con ello se puede

proceder a programar el código de la velocidad (figura

10). [4]

Figura 10. Programa para controlar la velocidad del motor

Con este código se puede observar en la práctica que

el motor va aumentando la velocidad poco a poco hasta

llegar a un máximo definido y luego se detiene,

iniciando de nuevo el ciclo por 10 veces.

Con este código realizado se puede proceder para

realizar el control del motor teniendo en cuenta la

posición, para ello se va a utilizar el comando que mide

las rotaciones del motor (MotorRotationCount), y hay

que tener en cuenta que el motor tiene que girar hasta

una posición y devolverse rápidamente al punto de

partida con el fin que se cumpla un diente de sierra casi

perfecto pero que en la práctica seria con una pendiente

un poco menor porque no se puede devolver en un

tiempo cero, de esta forma el código también tendrá que

ser un ciclo (figura 11).

Page 8: Informe 1. Introducción a la Plataforma LEGO Mindstorms.pdf

Cód. 285744 – 285750. Informe – 01.

22 de Febrero de 2013

8

Figura 11. Programa para controlar la posición

Con este programa se utilizó una velocidad constante

tanto para el avance como para el retroceso, en este caso

40 para avance y 100 para el retroceso para que se pueda

aproximar a la señal de diente de sierra y aparte de esto

mostrar esta posición en el display del Brick.

IV. CONCLUSIONES

El Brick de LEGO Mindstorm es una muy buena

opción para realizar prototipos de nuevos proyectos

de la ingeniería como en el campo de la robótica y

el control automático de sistemas ya que su

programación es muy sencilla y puede ser migrada

a otras plataformas.

El lenguaje NXC es muy similar por no decir que

prácticamente igual al lenguaje C, ya que los

comandos y las estructuras de programación pueden

ser declaradas de la misma forma que en esté, la

única diferencia notable es que existen comandos y

funciones específicas para el control y

gestionamiento de los recursos y dispositivos que

pueden ser implementados en el Brick.

El mas mínimo cambio en el código del Brick

puede llegar a efectuar cambios enormes en el

funcionamiento del hardware, por lo tanto hay que

ser muy cuidadosos en el uso de las funciones y

parámetros que las rigen para el adecuado

funcionamiento del dispositivo programable.

Un factor muy importante a tener en cuenta es la

memoria del Brick ya que esta es muy limitada y

solamente acepta una cantidad de programas por lo

que si no se encuentra el espacio adecuado el Bricx

Command Center no podrá grabar el archivo en el

dispositivo por lo tanto no podrá ser implementado.

V. BIBLIOGRAFÍA

[1] LEGO MINDSTORMS, «LEGO Mindstorms NXT

Hardware Developer Kit,» LEGO Group, 2006.

[2] Lego Engineering, «HiTechic Sensors for LEGO

Robotics,» Tufts, 22 Septiembre 2009. [En línea].

Available:

http://legoengineering.com/index.php?option=com_conte

nt&view=article&id=108. [Último acceso: 26 Marzo

2013].

[3] D. Benedettelli, Programming LEGO NXT Robots using

NXC, vol. Vesion 2.2, J. Hansen, Ed., 2007, p. 51.

[4] Doxygen, «NXC programmer's guide,» NXC, version

1.2.1 r5, [En línea]. Available:

http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/modules

.html. [Último acceso: 23 Marzo 2013].