viernes, 13 de septiembre de 2013

Iniciación a la programación de Mindstorms EV3


Construcción del robot de prueba: TRACK3R

El TRACK3R es el único robot con las instrucciones incluidas en el Set 31313. Se trata de un robot muy fácil de montar, muy estable y muy fácil de modificar con diferentes complementos. De ahí que lo hayan escogido como plataforma de iniciación.

La imagen siguiente muestra los principales elementos utilizados para construir este robot. En el centro abajo vemos la estructura del casco, basada en la conexión de cuatro marcos. Es una estructura sólida, muy estable y fácil de conectar al resto de elementos. El ladrillo EV3 se puede colocar directamente sobre él, fijándolo con pines simples. A los lados vemos los servomotores y las orugas empleadas como sistema de tracción. Es muy fácil ensamblar estos componentes entre sí, bastan un par de ejes, uno debe pasar a través del agujero para ejes situado en la parte inferior del motor, y el otro debe pasar directamente a través del elemento rotatorio del motor, en rojo. También se han incluido un par de elementos decorativos que podemos ver ya montados y etiquetados en la parte posterior de la imagen, detrás de cada motor.


El manual de instrucciones del TRACK3R incluye 5 misiones distintas, cada una con algún elemento diferente que requiere de una programación específica.  Esta entrada pretende convertirse en un tutorial introductorio sobre la programación del EV3, ya que dicho tutorial no ha sido incluido en el manual de instrucciones.

Una vez ensambladas estos elementos obtenemos la plataforma básica sobre la cual implementar las diferentes misiones propuestas.

Pero antes de proseguir debemos conectar los motores al bloque EV3. Para ello lo mejor es usar los cables cortos. Conectamos el motor izquierdo al puerto B y el motor derecho al puerto C, tal y como se muestra en la siguiente imagen. Nótese que izquierda y derecha se definen tomando como referencia la dirección habitual de marcha del robot (de forma similar a como se definen los márgenes izquierdo y derecho de un río).

Si has seguido los pasos anteriores habrás llegado a la página 15 de las instrucciones de montaje. Por motivos didácticos he preferido detenerme en esa página de las instrucciones porque de momento no se necesita nada más para empezar a programar.

Instalación del software

El primer recurso que debemos tener a mano para programar nuestro pequeño robot es la  página oficial dedicada a este producto. Desafortunadamente no está traducida al español todavía.

En esa página, en la sección de descarga (Downloads) vamos a encontrar todo lo necesario para comenzar a programar nuestro robot.
  • Guía de usuario (hay una versión en Español)
  • Software LEGO MINDSTORMS EV3 Home Edition
Además vamos a necesitar un cable USB a mini-USB. El Set incluye un cable USB de dimensiones generosas que nos permitirá hacer pruebas sin tener que conectar y desconectar continuamente. Alternativamente podemos conectar el PC a nuestro robot utilizando bluetooth, pero eso lo dejaremos para otro día, de momento vamos a centrarnos en lo más básico.

Pasos a seguir:
  1. Descargar el software desde aquí
  2. Instalar el software ejecutando el archivo descargado en el paso anterior: LMS-EV3-WIN32-ENUS-01-01-full-setup.exe. Desde ahora, a este programa lo denominaremos abreviadamente como LMS.
  3. Conectar el bloque EV3 a un PC mediante el cable USB incluido en el set. Se trata de un cable de generosas dimensiones que nos permitirá ir realizando cambios en un programa y probarlos en el robot sin necesidad de andar conectando y desconectando cada vez que modificamos un programa.
  4. Ejecutar el software LMS y comprobar que nuestro bloque EV3 aparece conectado. Para ello debemos crear un nuevo proyecto (mediante el menú File > New Project), lo cual nos abrirá la ventana que se muestra en la imagen inferior. En la sección de información (abajo a la derecha, etiquetada con el número 3) debe aparecer conectado nuestro bloque (en la imagen se observa que el nombre del bloque es EV3, que es el nombre predeterminado, aunque se puede modificar), y debe estar marcada la columna USB. si usáramos conexión por wifi o bluetooth veríamos marcadas als columnas correspondientes.
  5. A continuación es recomendable actualizar el firmware, el cual contiene los controladores de hardware y el sistema operativo (Linux). El firmware se aloja en la memoria del ladrillo EV3 y se puede actualizar directamente desde el LMS, mediante el comando de Menu "Tools > Firmware update". 


Elementos principales del sofware LMS:
1. Área de trabajo
2. Paletas de programación
3. Información de hardware (controladores, sensores y actuadores)

Primer programa de prueba

Antes de proceder con la primera misión, vamos a crear nuestro primer programa de prueba, que se limitará a dar unas órdenes de movimiento muy simples, y así vamos familiarizándonos con el software.

Empezaremos creando un proyecto nuevo (podemos usar el proyecto que hemos creado anteriormente para actualizar el firmware si todavía lo tenemos abierto). Verificamos que tenemos los motores correctamente conectados. Para ello nos vamos al área de información y seleccionamos la pestaña con un icono que recuerda la torre de un castillo. Esto nos lleva a la venta de puertos, donde veremos los componentes conectados al Bloque EV3 activo en ese momento. Deberíamos ver lo siguiente:
Esta pantalla nos muestra los diferentes sensores y/o actuadores conectados al bloque EV3 actualmente seleccionado. Los sensores y actuadores incluidos en el set tienen la capacidad de sera detectados e identificados automáticamente, pero es posible que otros componentes requieran una configuración manual (imagino que será el caso de los motores Power Function por ejemplo).

El entorno de programación es totalmente visual e inspirado por la filosofía Lego: al igual que las construcciones físicas con Lego se basan en la interconexión de piezas de diferente tipo, un programa para Mindstorms se construye mediante la interconexión de una serie de bloques de programa disponibles en forma de paleta gráfica, por lo que no es necesario tener conocimientos de programación. Sin embargo para poder ajustar el comportamiento de los bloques de programa será necesario realizar una configuración de los mismos; esta configuración se puede realizar manipulando el bloque con el ratón, o introduciendo valores numéricos mediante el teclado.

Antes de pasar a la programación de nuestro robot vamos a tratar de definir más concretamente el comportamiento deseado en forma de algoritmo. Para los que no lo sepan, un algoritmo es
Un conjunto ordenado y finito de operaciones que permite hallar la solución de un problema
Hay diferentes formas de escribir un algoritmo, algunas más formales y otras menos. De momento vamos a utilizar el lenguaje natural. En otra ocasión es posible que describamos y utilicemos otros métodos para describir algoritmos, como el pseudocódigo y los diagramas de flujo. El que quiera saber más sobre este tema puede consultar la entrada dedicada a los algoritmos en la wikipedia.

Descripción algorítmica:

  1. Avanzar
  2. Girar a la derecha
  3. Girar a la izquierda
  4. Retroceder

Construcción visual


Vamos a necesitar dos tipos de bloques: Move Tank (para avanzar y retroceder) y Move Steering (para los giros). Para añadir estos bloques a nuestro programa sólo tenemos que arrastrarlos desde la Paleta de bloques al área de trabajo principal (también podemos hacer click para seleccionar un bloque en la paleta y click otra vez sobre el área de trabajo para soltarlo).  Para eliminar un bloque arrástralo desde el área de trabajo a la paleta de bloques.

Cualquier programa se inicia con un bloque de inicio (Start), representado por un triángulo verde. A continuación debemos añadir un bloque por cada acción presente en nuestro algoritmo. Es importante entender el flujo de ejecución de nuestro programa, es decir, el orden en que se ejecutan las diferentes acciones programadas. Siguiendo la convención occidental de leer de izquierda a derecha, el flujo de los bloques de programa Lego también va de izquierda a derecha. Eso se traduce en que los bloques de programa suelen tener 2 conectores de flujo, uno de entrada o inicio del bloque, situado a la izquierda, y otro de salida o fin, situado a la derecha. Así pues para conectar dos bloques en secuencia tenemos que colocar el bloque que se ejecuta en segundo lugar a la derecha del primero, de forma que la salida del primero quede unida a la entrada del segundo. De esta manera, la forma más fácil de crear una secuencia de acciones es ir añadiendo bloques de izquierda a derecha siguiendo el orden de ejecución deseado. La siguiente imagen indica los elementos principales de un bloque de acción:


Si seguimos los pasos descritos en nuestro algoritmo veremos que tenemos que añadir 1 x Move Tank, 2 x Move Steering y 1 x Move Tank. Veremos que estos bloques de acción (controlan motores), en la barra superior (de color verde) llevan la etiqueta B + C. Eso indica que el bloque se va a aplicar a los motores conectados en los puertos B y C, asumiendo que B se corresponde con el motor izquierdo y C con el derecho. Esa es precisamente la forma en que hemos conectado los motores de nuestro robot, así pues está correcto y no hay que modificar ese aspecto. 
  1. Move Tank: déjalo tal y como está, en modo rotación, con potencia al 75% en ambos motores, y una única rotación completa. Eso hará que el robot avance recto la distancia correspondiente a una rotación de la rueda tractora (esa distancia será el perímetro de la rueda = 2 * Pi * r)
  2. Move Steering: modificamos el parámetro de giro (steering) y lo ponemos a 100
  3. Move Steering: modificamos el parámetro de giro y lo ponemos a -100
  4. Move Tank: modificamos la potencia de los motores y la ponemos a -75 para ambos motores.

Al final, tiene que quedarnos tal y como se muestra en la imagen siguiente.



Sólo nos queda ejecutar el programa y verificar que el resultado es el esperado. Para ello apretamos sobre la flecha verde en el bloque de inicio. Si tienes el robot conectado el programa se descargará al robot y a continuación se ejecutará. Si lo quieres ejecutar sin estar conectado tendrás que descargarlo primero (pulsa sobre la flecha descendente que hay en el área de información de hardware, justo debajo de la etiqueta EV3, y luego ejecútalo desde el bloque EV3.  Hasta pronto !

martes, 10 de septiembre de 2013

Conceptos básicos de robótica

En esta entrada se describen algunos conceptos fundamentales de robótica aplicados al EV3.

Hay diferentes enfoques para explicar el concepto de robot, por ejemplo, en la wikipedia leemos que:

Un robot es una entidad virtual o mecánica artificial. En la práctica, esto es por lo general un sistema electromecánico que, por su apariencia o sus movimientos, ofrece la sensación de tener un propósito propio. La independencia creada en sus movimientos hace que sus acciones sean la razón de un estudio razonable y profundo en el área de la ciencia y tecnología. La palabra robot puede referirse tanto a mecanismos físicos como a sistemas virtuales de software, aunque suele aludirse a los segundos con el término de bots.
Yo voy a dar otra explicación que creo que será más útil para hacerse una idea general de cómo son los robots de lego. Y lo voy a hacer tomando como punto de partida la definición de un Agente en el ámbito de las ciencias de computación [wikipedia: Agente_inteligente]

Un agente inteligente, es una entidad capaz de percibir su entorno, procesar tales percepciones y responder o actuar en su entorno de manera racional, es decir, de manera correcta y tendiendo a maximizar un resultado esperado. Es capaz de percibir su ambiente con la ayuda de sensores y actuar en ese medio utilizando actuadores (elementos que reaccionan a un estímulo realizando una acción).
En realidad, en la definición anterior podemos eliminar el término inteligente, y nos quedaría que una agente es una entidad capaz de percibir su entorno y actual en él. Un agente puede ser simplemente un programa de ordenador que recibe cierta información (percibe) y actúa (realiza acciones).

Pues bien, un robot es un agente situado en un entorno físico (o virtual) [wikipedia: Agente situado]. No es necesario ser inteligente o mostrar conductas racionales para ser un robot. Es por ejemplo el caso de los robots industriales, que se dedican a repetir las mismas acciones una y otra vez. Diferentes definiciones de agente ponen el énfasis en diferentes aspectos, como puede ser la capacidad de comunicarse con otros agentes, o la capacidad de tomar decisiones de forma autónoma, sin control directo del usuario.

Pues bien, cualquier robot Lego se ajusta a esa definición de agente situado, pues consta de una serie de sensores (de luz, contacto, etc.), una serie de actuadores (motores), y un centro de control (el ladrillo principal) que recibe información de los sensores y genera acciones. Dependiendo de la programación que hagamos del centro de control , la conducta de nuestro robot será repetitiva y mecánica (realizar ciertas acciones de forma prefijada), o flexible y adaptativa, capaz de adaptarse a los cambios en el entorno y enfrentarse a situaciones nuevas. 

Veamos los componentes centrales para construir un robot con Lego Mindstorms.

Arquitectura y componentes principales


La imagen superior muestra de arriba abajo y de izquierda a derecha, los componentes principales que conforman la arquitectura EV3: 
  • 2 x Motor grande (Servomotor)
  • Motor mediano (Motor lineal)
  • Ladrillo EV3
  • Sensor de contacto
  • Sensor de luz
  • Sensor de infrarrojos
  • Mando de control remoto

Ladrillo controlador (y fuente de alimentación)


El componente fundamental, y el que más cambios ha experimentado con respecto a la versión previa de Mindstorms, es el Ladrillo EV3, el cual tiene una doble función: controlador y fuente de alimentación.

El controlador es el elemento encargado de recibir la información procedente de los sensores, tomar decisiones (prefijadas o dependientes de la información obtenida por los sensores) y dar órdenes a los actuadores (como poner en marcha un motor)
Para su función de controlador, el nuevo ladrillo EV3 dispone de 4 conectores de entrada (para los sensores) y 4 conectores de salida (para los actuadores).

Además de controlador y fuente de alimentación, el propio ladrillo incluye elementos de entrada y salida que podemos considerar como sensores (entradas) y actuadores (salidas), los cuales describiremos más adelante.


Las 4 entradas, numeradas del 1 al 4, se sitúan en la parte anterior del ladrillo, y las 4 salidas, identificadas por las letras A a D, se sitúan en la parte posterior del ladrillo. En la parte posterior, además de las salidas encontramos el conector mini USB para conectarlo al PC.



En la parte inferior del ladrillo se alojan 6 pilas AA, a las cuales se accede mediante una práctica tapa sin tornillos. En un lateral encontramos una ranura para introducir una tarjeta micro-SD y un conector USB host, que nos permitirá conectar memorias USB.

Sensores

En el set 31313 encontramos 3 sensores, que de izquierda a derecha son:
  • El sensor de contacto, encargado de detectar presión, típicamente para detectar colisiones, aunque con otros usos.
  • El sensor de luz, con tres modos de funcionamiento: 
    • Medidor de luz reflejada
    • Medidor de luz ambiente
    • Detector de color (distingue 7 colores básicos)
  • El sensor de infrarrojos, con3 modos de funcionamiento
    • Modo proximidad: se utiliza para detectar la distancia
    • Modo baliza: se utiliza para detectar una fuente de infrarrojos, y puede obtener dirección y distancia a esa fuente.
    • Modo remoto: se utiliza para recibir órdenes de un control remoto.

Actuadores

Dentro de los actuadores encontramos 2 grupos:  los periféricos de entrada/salida incluidos en el ladrillo controlador (botones, luz led, pantalla y altavoz); y los motores. Dedicaremos otra entrada a los periféricos incluidos en el propio ladrillo. De momento basta con comentar que de momento los actuadores externos se limitan a 2 tipos de motores.
  • Motor lineal (en inglés se suelen conocer como DC motor, término equivalente a motor de corriente continua, como también se pueden denominar). Son motores que al recibir una corriente eléctrica la convierten en un movimiento rotatorio continuo, es decir, que giran y giran sin parar hasta que dejan de recibir electricidad.
  • Servomotor: es un dispositivo similar a un motor lineal  que tiene la capacidad de ubicarse en cualquier posición dentro de su rango de operación, y mantenerse estable en dicha posición. Esta característica los hace más adecuados que los motores lineales para tareas de precisión en las cuales es importante contar el número de rotaciones del motor.
El motor mediano (en el centro en la imagen) pertenece al primer tipo, mientras que los motores grandes pertenecen al segundo tipo.
Imagino que también se podrán utilizar los motores de la serie Power Functions, aunque será necesario adaptarlos de alguna manera, ya que usan conectores diferentes.

Conectores

Por último, el set incluye 7 cables de conexión en 3 tamaños distintos (hay 3 cortos, 3 medianos y 1 cable largo), más un cable USB (no se muestra en la imagen)

Y ahora qué?

Para construir un robot cualquiera se necesita, como mínimo, el ladrillo o bloque EV3 y algún elemento de entra y/o salida. Estrictamente hablando, el propio ladrillo EV3 contiene entradas y salidas, pero en ese caso sería más correcto hablar de computador que de robot, pues la capacidad de interaccionar con el entorno se limita a interaccionar con una persona. En cierta manera, un robot es un computador con una serie de periféricos que le permiten interaccionar físicamente con el mundo, más allá de los periféricos habituales (pantalla, teclado, escáner e impresora) usados para interaccionar con personas.

En la próxima entrada describiremos la programación del único robot incluido en las instrucciones que acompañan al Set 31313: el TRACK3R.


miércoles, 4 de septiembre de 2013

Toma de contacto con LEGO Mindstorms EV3

Toma de contacto con el EV3

Ya está aquí, oficialmente desde el 1 de septiembre de 2013, la nueva versión de los Lego Mindstorms, la EV3. Si no sabes nada sobre la nueva versión o sobre los Mindstorms en general, puedes ver el vídeo oficial de presentación en youtube.

Tras decidir que por fin iba a iniciarme en el universo Mindstorms, he esperado meses a la llegada de la nueva versión, y ahora que ya ha llegado me he apresurado para hacerme con el codiciado Set 31313 LEGO MINDSTORMS EV3. 


A partir de hoy espero compartir y comentar con vosotros cosas que vaya aprendiendo de este maravilloso juguete. En mi toma de contacto con este set, me he dado cuenta del handicap que supone para los recién llegados a esta serie de LEGO, sobre todo para aquellos poco habituados a las nuevas tecnologías. Y es que el set viene acompañado únicamente de las instrucciones de montaje, no hay ninguna documentación acerca de la instalación y uso del software necesario para desarrollar y ejecutar programas. Por eso, he decidido empezar el blog desde lo más básico.

Cuando abrimos la caja, observaremos de inmediato que esta incluye un envoltorio de cartón impreso por la parte de dentro con lo que parece ser el suelo de unas instalaciones futurísticas (con pasillos delimitados por líneas rojas, y círculos de diferentes colores). Si cortamos el cartón por la línea de puntos marcada en la parte trasera y lo desplegamos obtendremos una superficie de pruebas donde experimentar con nuestras creaciones. Como os podéis imaginar, esta superficie es ideal para utilizar el sensor de luz (el cual permite detectar colores).



Al vaciar el contenido de las bolsas nos encontramos un variado surtido de piezas (en torno a las 600 piezas), incluyendo el ladrillo de control, los sensores, y variedad de piezas de las que se suelen encontrar en la serie Technic. Los colores elegidos para esta serie son el blanco, el negro y el rojo.


Foto tomada de una review en ArsTechnica

Aunque es cuestión de gustos, personalmente me gusta colocar las piezas en un maletín con compartimentos, de esos utilizados para guardar tornillería y componentes electrónicos. Es ideal para mantener las piezas ordenadas, ocupa poco espacio y te permite cambiar de espacio de trabajo con mucha facilidad.





En la última página de la documentación podemos encontrar una guía visual de referencia de todas las piezas incluidas en el set.






En la primera página hay unas referencias visuales para poder determinar la longitud de elementos lineales.
Y a lo largo del manual de instrucciones encontraremos escuetas aunque efectivas instrucciones visuales para el uso del ladrillo EV3.


Aparte de eso vienen las típicas instrucciones de montaje paso a paso. Pero a diferencia las instrucciones que encontramos en las demás series de LEGO, el manual de instrucciones se divide en misiones. Cada misión puede incluir algunos elementos distintos, como veremos en seguida cuando describa el modelo incluido en las instrucciones, el Track3r


El manual en concreto, se corresponde con un sólo modelo, denominado TRACK3R, el cual podéis ver ya montado en las siguientes imágenes:



En la próxima entrada describiré algunos conceptos fundamentales de robótica para los no iniciados