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 !

No hay comentarios:

Publicar un comentario