Programación gráfica

monkeyserna edited this page May 24, 2014 · 53 revisions

En este capitulo se explica el funcionamiento del modo de programación gráfica, o modo Code.

Charlie es capaz de ser controlado de dos maneras. Mediante la conducción libre, o mediante la realización de automatismos, empleando un lenguaje de programación gráfico basado en Blockly. Esta forma de control es algo más avanzada, ya que permite exprimir todas las características del robot para que éste realice distintas acciones, ya sea leer señales en el suelo, medir distancias, o realizar secuencias de movimiento.

Este modo de programación es accesible tanto desde una página web, como desde la aplicación Android.

Programación desde Android Programación desde web

Para programar automatismos en el robot, se emplean tanto bloques ya existentes en Blockly como bloques propios.

Disposición de los elementos

El modo de programación gráfica tiene tres bloques de contenidos diferenciales.

Estos son:

  • Barra superior. Contiene acciones relacionadas con tratamiento de los bloques creados en el espacio de trabajo, ya sea ver el código traducido, ejecutar el scrit en el robot, o cargar/almacenar el espacio de trabajo.
  • Barra lateral. Contiene bloques con los que realizar los automatimos
  • Espacio de trabajo, donde realizar los scripts.

Barra superior

Dispone de los siguientes elementos:

  • Show code Muestra la traducción a Python del script Arduino que será enviada al robot.
  • Execute Envía el script al robot, y éste lo ejecuta.
  • Clear Elimina todos los bloques del espacio de trabajo.
  • Load Incrusta en el espacio de trabajo bloques guardados previamente.
  • Save Guarda el espacio de trabajo.

Barra de bloques

La barra de bloques (también llamada toolbox de Blockly) contiene tanto bloques nativos como propios, dedicados a funciones específicas del robot.

La explicación detallada de cada uno de estos bloques se encuentra disponible en la Referencia de instrucciones.

Espacio de trabajo

El espacio de trabajo está destinado a la creación de scripts o automatismos con los que dar comportamiento al robot.

¿Cómo se programa?

Para comprender cómo se programa a Charlie, se debe considerar que el paradigma de programación que se va a utilizar está basado en estados.

El robot tiene dos estados de movimiento:

  • En movimiento : al menos un motor está girando.
  • Detenido : ambos motores están parados.

A su vez, cada uno de los leds y el claxon tienen dos estados disponibles:

  • on : estado encendido.
  • off : estado apagado.

Los bloques relacionados con el movimiento de motores, control de leds y de sonar hacen cambios de estado sin realizar rupturas de flujo. Por ejemplo, la función move straight slow cambia el estado del robot a En movimiento y ejecuta inmediatamente la siguiente instrucción.

Existe un comando para detener el flujo de ejecución. Este es el bloque wait.

Este bloque espera una determinada cantidad de tiempo antes de ejecutar la siguiente instrucción.

Un paradigma alternativo sería el basado en acciones de duración definida, donde cada bloque actuaría durante un tiempo definido, por ejemplo 1 segundo. Es decir, al hacer move straight slow el robot avanzaría durante 1 segundo y después se detendría. La siguiente instrucción se ejecutaría cuando el robot hubiera completado la instrucción anterior, es decir, tras un segundo de movimiento. Como contrapartida, el robot no podría realizar ninguna acción mientras estuviese avanzando. Este modelo de programación puede resultar ligeramente más sencillo para niños y en general cualquier humano que esté iniciándose en el mundo de la programación, aunque limita las posibilidades del robot. Por otra parte, todo programa realizado mediante acciones de duración fija se puede desarrollar con el modelo actual, basado en estados. No ocurre al revés. Por ejemplo, no podríamos mover el robot y leer los sensores al mismo tiempo con el enfoque de acciones de duración determinada.

Vamos a ilustrar esto con unos ejemplos.

Recordemos que se programa como si se tratase de una máquina de estados, por lo que al ejecutar el script:

Se actualiza el estado del robot a En movimiento y comienza a avanzar indefinidamente. No se detendrá nunca.

Si el modelo fuese basado en acciones de 1 segundo, el robot se desplazaría durante 1 segundo y después se detendría. Durante el segundo que el robot está ejecutando la instrucción de movimiento no se podrá realizar ninguna otra acción (como leer algún sensor).

Veamos otro ejemplo:

¿Qué realiza esta instrucción?

Cambia el estado del robot a En movimiento e inmediatamente después actualiza el estado a Detenido. La velocidad a la que se procesan las instrucciones es mayor que la velocidad de respuesta de los motores, por lo que no se podrá apreciar ningún tipo de movimiento. Es decir, el robot cambia a En movimiento e inmediatamente a Detenido. Hay tan poco tiempo entre las instrucciones que los motores no llegan a ejecutar la primera instrucción, y el robot simplemente se detendrá (o no se moverá si ya está detenido).

En un modelo de acciones de duración fija sí que habría movimiento del robot, y el comando stop motors sería innecesario al estar implícito en la instrucción move straight slow (recordemos que pasado un cierto tiempo detiene el movimiento de los motores).

Si nuestro objetivo precisamente es avanzar durante un segundo y luego detener el movimiento, el código que realiza estas acciones es el siguiente:

  • La primera instrucción establece el estado a En movimiento.
  • La segunda instrucción espera 1 segundo. El robot permanece en el mismo estado, por lo que seguirá avanzando.
  • La tercera instrucción cambia el estado del robot a "Detenido", por lo que el robot se detiene.

Al igual que ocurre con los bloques relacionados con el movimiento de motores, los bloques de control de los leds y del claxon permiten determinar el estado de esos elementos.

El siguiente bloque cambia el estado del primer led a encendido (on):

Porque estamos programando bajo un paradigma basado en estados, este led no se apagará hasta se cambie su estado de nuevo a off. Por tanto, puede ocurrir que termine la ejecución del script en el que se encendía sin una instrucción de apagado. En tal caso, permanecerá encendido hasta que otro script incluya la instrucción set led 0 off.

Ocurre lo mismo con el claxon:

El robot estará emitiendo sonido hasta que otra instrucción cambie su estado a apagado (o se apague el robot).

Para emitir un pitido de 1 segundo de duración, por tanto, se realizaría de esta forma:

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.