sábado, 30 de marzo de 2013

Bloques personalizados (NXT-G) 3/6

Y con ésta entrada llegamos a la mitad del tutorial que surge de la traducción del que original realizado por Dave Parker

Variables, cableado, y la edición de un Mi Bloque

El uso de parámetros de entrada es una manera en que un programa de NXT-G pueda enviar datos a un Mi Bloque. Otra forma es mediante el uso de variables. En esta sección, vamos a utilizar el bloque de Variables para enviar una pieza adicional de datos para el bloque de movimiento Forward que hemos desarrollado en el apartado anterior, a fin de que el bloque Forward tenga más capacidad y flexibilidad. De paso, vamos a aprender un par de otras técnicas que son útiles al editar o trabajar con Mi Bloques complejos.

Uso de variables para enviar datos a un Mi Bloque


Como se indicó en la sección anterior, Mi Bloque Forward supone que el robot está utilizando los neumáticos estándar NXT 2.0 en las ruedas con el fin de ser capaz de convertir centímetros de distancia del recorrido deseado a los grados de rotación del motor. Pero si un robot utilizase en su lugar orugas (o diferentes neumáticos), la conversión no sería correcta. Especialmente para un robot como el multi-Bot que puede llevar orugas y neumáticos, sería bueno si pudiéramos hacer un Mi Bloque que trabajase tanto para orugas como neumáticos. Podríamos cambiar el Mi Bloque Forward para agregar un tercer parámetro para esto (lo que requeriría empezar de nuevo, ya que no se puede agregar un parámetro a una existente Mi Bloque), pero aquí vamos a hacer esto con una variable.
Igual que una variable en NXT-G puede ser escrita en un punto de un programa y luego leerse en otro punto, usándose para pasar información de un punto a otro, una variable también se puede utilizar para pasar información entre un programa y un Mi Bloque. Para ampliar nuestro bloque Forward para hacer los cálculos correctos si se utilizan bandas de rodadura (orugas) o el estándar NXT 2.0, vamos a definir una variable de tipo lógico (el valor es verdadero o falso) de nombre Treads. Esta variable tendrá el valor Verdadero si el robot está utilizando bandas de rodadura, o Falso si se utilizan neumáticos. En concreto, en el programa principal se escribe el valor de la variable al principio del programa, y el contenido de Mi Bloque Forward lee la variable para decidir qué hacer. Si Treads es falso (el robot está utilizando neumáticos como antes), entonces cada centímetro de viaje requiere 27 grados de rotación del motor como antes. Sin embargo, si Treads es True, entonces cada centímetro requerirá 36 grados de rotación del motor (determinado por experimentación con un robot con orugas).

Definición de variables en un Mi Bloque


A diferencia de agregar un parámetro a un Mi Bloque, añadir una variable no requiere volver a empezar con la creación Mi Bloque, basta con abrir el contenido de Mi Bloque Forward y hacer nuestros cambios allí. El primer paso es definir la variable en Mi Bloque. La figura 31 muestra la variable Treads se define utilizando comando de menú Edición - Definir Variables en el contenido de Mi Bloque Forward.
Figura 31: Las variables definidas en el contenido de un Mi bloque puede ser utilizadas para enviar datos al bloque.

 

Reescribiendo el contenido de un Mi Bloque


Después de definir la variable Treads en Mi Bloque Forward, estamos dispuestos a modificar el contenido de la Mi Bloque Forward para usarla. Utilizar la variable de la forma deseada en realidad dará lugar a un cambio sustancial en la forma en que fue escrito el bloque, por lo que en este punto, es útil saber que una vez que Mi Bloque ha sido creado, pueden realizarse cambios importantes, hasta el punto de volver a escribirlo casi completamente si lo desea. De hecho, las únicas cosas que no puede cambiar de un Mi Bloque son el número y los tipos de los parámetros. Todo lo demás se puede borrar y volver a crear si es necesario.
La figura 32 muestra el contenido de Mi Bloque Forward después de eliminar los anteriores cálculos de cm a grados e iniciar el proceso de utilización de variable Treads para hacer esto de una manera diferente. El comentario de cabecera de bloque también se ha revisado para agregar una mención de la utilización de la variable Treads. Tenga en cuenta que los dos bloques de parámetros de conexión no se pueden eliminar, pero puede eliminar los cables que van de ellos y luego volver a conectarlos a los bloques nuevos o modificados, como vamos a hacer a continuación.
Figura 32: Empieza a escribir el Mi Bloque Forward utilizando la variable Treads.

Cables compartidos en una bifurcación


Con el fin de obtener el comportamiento que queremos de la variable de Treads en el bloque Forward, utilizaremos la técnica de cableado en un bloque de bifuración. Aunque no es específico para Mi Bloquess, esta técnica es especialmente útil cuando se trabaja con ellos debido a la necesidad de compartir los accesos a un parámetro, por lo que lo veremos a través de un ejemplo.
Una Bifurcación se utiliza para comprobar el valor de la variable Treads y decidir si se debe multiplicar el parámetro Distancia cm por 27 para neumáticos (cuando Treads es falso) o por 36 para orugas (cuando Treads cuando es verdadera). La Figura 33 muestra la primera parte del conmutador (Treads es verdadera) completada y cableada hasta un bloque Math que se multiplica por 36. Tenga en cuenta que la bifurcación debe tener la opción Vista plana sin marcar para mostrar la vista de pestañas, que permite pasar los cables de datos del exterior al interruptor.
Figura 33: La pestaña verdadera de la Bifurcaicón utiliza un bloque de matemáticas para multiplicar por 36 cm de distancia.
La figura 34 muestra el panel de control después de seleccionar la pestaña Falso y añadir otro bloque de matemáticas que se multiplica por 27 en lugar de 36.
Figura 34: Pestaña falsa del conmutador utiliza un bloque de matemáticas para multiplicar Distance cm por 27.
Ahora podemos conectar este bloque Math a los dos puntos de conexión ocultos que se crearon en el límite de la Bifurcación cuando la parte Veradero estaba visible. Para ello, se dibujan cables desde el bloque de Matemáticas y terminando en los dos puntos de conexión en los bordes de la bifurcación, como se muestra en la Figura 35a / b.
Figura 35a / b: Los puertos del bloque de matemáticas en la pestaña Falso de la Bifurcación se conectan a los puntos donde los cables entraron y salieron del conmutador en la pestaña Verdadero.

El resultado final es que los dos bloques matemáticos (una en cada pestaña de la Bifurcación) usan la mismo parámetro de entrada Distance cm (aunque sólo uno de ellos se ejecutará, en función del valor de la variable de Treads), y el valor del resultado del bloque matemático que fue elegido enviará sus datos al puerto Duración del bloque Mover.
 

Uso de Mis Variables de Mi Bloque en el Programa Principal


Una vez que se ha modificado el contenido de Mi Bloque Forward para leer la variable de Treads y modificar en consecuencia sus cálculos, podemos cambiar el programa principal para utilizarlo. El programa principal tendrá que escribir el valor de la variable Treads al valor correcto para el robot antes de que la variable de Treads sea leída por el bloque Forward. Sin embargo, antes de que podamos escribir la variable de Treads en el programa principal, primero debemos definirla. A pesar de que ya se ha definido la variable en el contenido del bloque Forward, tenemos que definirla de nuevo en el programa principal, como se muestra en la Figura 36. Es importante cuidar que el nombre de la variable sea exactamente el mismo que el definido en el bloque, incluyendo la capitalización (mayúsculas y minúsculas).
Nota: Cada programa y Mi Bloque tiene su propia lista de variables que se han definido y se pueden utilizar en su interior. Sin embargo, si una variable en un programa tiene el mismo nombre que una variable en un Mi Bloque utilizado por ese programa, las dos variables se refieren a la misma ubicación de almacenamiento, y por lo tanto se puede utilizar para pasar datos entre el programa y el Mi Bloque. Esto se refiere a veces como una variable "global" en otros lenguajes de programación, y de hecho todas las variables en NXT-G son globales en este sentido.
Figura 36: una variable definida en el programa principal con el mismo nombre que
una variable en un Mi Bloque tendrá acceso a la misma ubicación de almacenamiento.

La figura 37 muestra un ejemplo de programa de prueba que utiliza Mi Bloque Forward con la variable Treads. Al comienzo del programa, la variable Treads está actualizada con el valor Verdadero para indicar que el robot utiliza bandas de rodadura y no neumáticos. A continuación, el bloque Forward se utiliza dos veces junto con el bloque BeepBeep que hemos creado antes. Aunque el bloque Forward se utiliza dos veces, sólo necesita escribir el valor de la variable Treads una vez al principio del programa, y todas las instancias del bloque utilizan ese valor.
Nota: Si usted no escribe un valor en una variable antes de que se lea, entonces una variable de tipo lógico tendrá el valor Falso, una variable de tipo Number tendrá el valor 0 (cero), y una variable de tipo String estará vacía. Sin embargo, incluso si este es el valor deseado para una variable concreta, es una buena idea siempre escribir explícitamente el valor deseado de la variable antes de leerlo, para reducir la confusión y para ayudar a recordar a usted (y cualquier otro que lea de su programa) que la variable se usa más tarde.
Figura 37: Una variable escrita en el programa principal puede ser leída por los Mi Bloques.

Ahora bien, si más tarde decido modificar nuestro robot para utilizar los neumáticos en lugar de bandas de rodadura, podríamos simplemente cambiar el bloque de variable Treads al principio del programa para establecerla en Falso en vez de Verdarero, y todos los usos del bloque Forward automáticamente se adaptarán correctamente. Tenga en cuenta que si hubiéramos decidido utilizar un tercer parámetro de entrada para el bloque Forward para enviar el valor de Treads en lugar de utilizar una variable, cada uso de Forward en el programa tendría que ser cambiado para especificar el valor nuevo de Treads, por lo que en este caso utilizando una variable en lugar del parámetro parece mejor. En general, si el valor de un elemento de datos que necesita un Mi Bloque no va a cambiar mientras se ejecuta un programa, se puede considerar el uso de una variable en lugar de un parámetro de entrada.
Nota: Las variables también se puede utilizar para enviar datos desde un Mi Bloque al programa que usa el bloque. Un resultado calculado por mi un bloque que fue almacenado en una variable podría ser leído posteriormente por el programa principal u otros Mi Bloques en el programa.

Bloques personalizados (NXT-G) 2/6

Segunda entrada que surge de la traducción del gran tutorial de Dave Parker que hice para mi equipo de FLL.
 

Crear Mis Bloques con parámetros de entrada

El bloque BeepBeep creado en la sección anterior fue muy fácil de crear y de usar, pero es algo limitado en lo que puede hacer. Siempre van a sonar exactamente los mismos dos tonos cada vez que se utiliza. Esto está bien para algunos bloques, pero muchas veces se quiere crear un Mi Bloque que pueda modificar su comportamiento cada vez que se utiliza. Por ejemplo, cada vez que utilice el bloque Mover estándar, puede especificar una duración diferente, un nivel de energía diferente, etc. Estos aspectos del bloque que se pueden modificar se denominan parámetros. (Más específicamente, los parámetros de entrada, ya que proporcionan valores de datos de entrada para el bloque). Es posible crear un Mi Bloque que contenga uno o más parámetros de entrada que modifiquen su comportamiento y hacerlo más flexible, y eso es lo que vamos a aprender en esta sección.

¿Qué son los parámetros de entrada?

La mayoría de los incorporados en NXT-G bloques tienen parámetros de entrada. Por ejemplo, el bloque Mover que se muestra en la Figura 12a tiene varios parámetros que se muestran en el panel de configuración cuando se selecciona
el bloque (Figura 12b). Estos parámetros le permiten cambiar el comportamiento de cada uso del bloque.
Figura 12a / b: Muchos de los incorporados en NXT-G bloques tienen parámetros de entrada que se pueden cambiar.


Como un ejemplo de cómo crear un Mi Bloque con un parámetro de entrada, vamos a crear un Mi Bloque que es una versión simplificada del bloque Mover. Si se selecciona el bloque Mover y se crea un Mi Bloque con él siguiendo los pasos mostrados en el ejemplo anterior BeepBeep (un Mi Bloque puede consistir en un sólo bloque), entonces el Mi Bloque resultante no tendrá parámetros de entrada y siempre utilizará los valores de los parámetros que se hayan declarado en el bloque que contiene cuando se creó.Por ejemplo, el bloque de Mover en la Figura 12 anterior se fija para tener una duración de 500 grados, nivel de potencia 75, etc. La figura 13a muestra el resultado de la creación de un Mi Bloque con este bloqueMover. Debido a que el Mi Bloque siempre utilizará una duración de 500 grados, puse el nombre de Forward500 a Mi Bloque. Puesto que no hay parámetros, el panel de configuración que aparece cuando el Mi Bloque se ha seleccionado está vacío (Figura 13b). Esto puede ser útil si desea mover en esta cantidad una y otra vez en un programa, pero sería más útil si el programa que usa el Mi Bloque puede especificar la duración de un parámetro, similar al bloque Mover original.
Figura 13a / b: Un Mi Bloque
simple creado a partir de un único bloque Mover no tiene parámetros que se puedan cambiar.

Creación de un Mi Bloque con un parámetro de entrada

En esta sección, vamos a aprender a crear un Mi Bloque que incluye un parámetro de entrada. Hacer esto es más complejo que un Mi Bloque simple
tal como el ejemplo BeepBeep anterior y requiere el uso de centros de datos, cables de datos y bloques de variables y / o constantes. Asegúrese de que está familiarizado con estos conceptos antes de continuar.

Recursos: Cómo aprender acerca de los centros de datos, cables de datos y variables.

Como ejemplo de un Mi bloque con un parámetro de entrada, vamos a crear una nueva versión de un bloque Mover simplificado llamado ForwardDeg que incluirá un parámetro Degrees que permitirá que el programa pueda especificar cuántos grados debe moverse, en lugar de desplazarse siempre 500 grados, como en el bloque Forward500 anterior.
Para crear un Mi Bloque con un parámetro, tendrá que crear una conexión de datos para cada parámetro de los bloques contenidos a los que desea acceder. Querremos acceder al parámetro Duración del bloque Mover, por lo que debemos empezar por abrir el centro de datos del bloque Mover como se muestra en la Figura 14.
Figura 14: Para acceder a los puertos de datos para un bloque, haga clic en el lugar indicado para deslpegar bloques de datos.


Para crear una conexión de datos por cable para el parámetro Duración del bloque Mover, tenemos que crear una fuente de datos para ello. Una manera fácil de hacer esto en el software NXT 2.0 es utilizar el bloque Constante (Figura 15). Colocamos el bloque Constante antes que el bloque de Mover, como se muestra en la Figura 16.
Nota: El bloque constante se añadió en el software NXT 2,0. Si está utilizando una versión anterior de NXT-G, se puede utilizar un bloque variable Leer en su lugar. Sin embargo, como no se puede especificar un valor para una variable en un bloque de lectura variable, es posible que también deba agregar un bloque de escritura Variable antes en el programa para darle un valor a la misma.


Figura 15: El bloque constante en el menú de datos se puede utilizar para crear una conexión a un puerto de datos.


Figura 16: Coloque el bloque constante al principio de la secuencia.


Usando el panel de configuración para el bloque constante (Figura 17), configure la constante Personalizar para la Acción, a continuación establezca el tipo de datos para el parámetro (número en este caso), y dé a la constante un nombre que ayudarle a recordar lo que hace (en este caso he elegido "Degrees"). También puede introducir un valor para la constante en el campo Valor. Este valor es útil para probar la secuencia de los bloques antes de crear el Mi Bloque (pero el Mi Bloque final tendrá un parámetro en lugar de este valor).
Figura 17: En el panel de configuración para el bloque constante, introduzca el tipo de datos, un valor de prueba, y un nombre para la constante.

Una vez que el bloque constante ha sido correctamente configurado, conéctelo al bloque de parámetros que desea controlar con un cable de datos (Figura 18).
Figura 18: Conecte con un cable el puerto de salida del bloque constante al puerto de entrada para el parámetro de entrada.


El programa de dos bloques de la figura 18 ahora hará lo mismo que el programa de un bloque en la Figura 12. Se utilizará el bloque Mover para avanzar 500 grados.
La diferencia es que ahora hemos "conectado" el parámetro Duración utilizando un bloque constante estableciendo el valor 500 en lugar de poner el 500 directamente en el bloque Mover. Tenga en cuenta que todos los demás parámetros del bloque Mover tales como el nivel de potencia se toman directamente desde el panel de configuración del bloque de Mover (incluyendo el ajuset grados que le dice al bloque Mover que interprete el valor de duración de 500 como grados y no como segundos). Ahora es un buen momento para probar el programa para asegurarse de que funciona como se espera antes de crear el Mi Bloque. 
Después de probar el programa en la Figura 18, se puede crear el Mi Bloque. Para ello seleccione el bloque Mover, pero no el bloque Constante, a continuación haga clic en el botón Crear Mi Bloque(Figura 19) y proceda con el Mi Generador de Bloques creando un bloque llamado ForwardDeg.
Figura 19: Al crear el Mi Bloque, seleccione el bloque Mover, pero no el bloque Constante.


Creando Mi bloque como se muestra en la Figura 19 se generará un Mi Bloque con un parámetro de entrada para la propiedad Duración debido a la regla siguiente bloque de Move:
 
Regla: Cuando una secuencia de bloques se convierte a un Mi Bloque, cualquier ruta de cable de datos que lleva a una fuente de datos fuera del Bloque (no incluidos en los bloques seleccionados) creará un parámetro de entrada.

Usted puede pensar en el Mi Bloque como un "corte" del programa cuando se crea, y los caminos que conducen fuera del corte de bloques son "extremos abiertos" que necesitan fuentes de datos. Estos extremos se convierten en los parámetros de entrada, donde las fuentes de datos serán especificadas por el programa que utiliza el Mi Bloque. Si había seleccionado también el bloque constante en la figura 19 al hacer el Mi Bloque, el resultado sería un nuevo Mi Bloque que siempre se mueve en 500 grados, ya que el número 500 se especifica dentro de el contenido del bloque.

El uso de un Mi Bloque con un parámetro de entrada

Después de crear un Mi bloque desde la selección que se muestra en la Figura 19 y nombrarlo ForwardDeg, el programa modificado se muestra en la Figura 20a. El bloque de Mover (el único bloque incluido en el Mi Bloque) ha sido sustituido por el Mi Bloque ForwardDeg , y el bloque Constante sigue ahí y ahora está conectada en el centro de datos de ForwardDeg. Seleccionando el bloque ForwardDeg se muestra el panel de configuración de la Figura 20b, donde podemos ver que ahora tenemos acceso al parámetro Duration del bloque Mover de dentro del Mi Bloque.
Figura 20a / b: Un parámetro de entrada para un Mi Bloque está disponible en el centro de datos y en el panel de configuración.

Al igual que con los bloques incorporados en el NXT-G, si una fuente de datos está conectada al concentrador de datos de un mi bloque, ese será el valor de datos que se utilizará, de lo contrario será el valor del panel de configuración del bloque el que se usará. Aquí el valor de 500 se conecta en el bloque Grados Constante, por lo que dicho valor prevalece sobre el valor 0 para el Duración en el panel de configuración, por lo que el programa resultante seguirá haciendo lo que hacía antes (avanzar en 500 grados). Si se prueba el programa modificado después de crear un Mi Bloque, debería hacer lo mismo que el programa utilizado para crear el Mi Bloque.

Ahora que el Mi Bloque ForwardDeg ha sido creado, se puede borrar el bloque Grados constante si se quiere, y especificar la Duration directamente en el panel de configuración del bloque ForwardDeg. También puede colocar mas bloques ForwardDeg en su programa de la paleta personalizada y especificar la Duration ya sea por el centro de datos o en el panel de configuración.

En este punto, usted se estará preguntando por qué querría crear un Mi Bloque de un solo bloque y facilitar el acceso a uno solo de sus parámetros. En este sentido, el bloque ForwardDeg parece menos útil que el bloque Mover por sí mismo, ya que el bloque Mover sigue siendo sólo un bloque y también le permite cambiar el nivel de potencia, etc. El bloque ForwardDeg principalmente se muestra aquí como un ejemplo sencillo, pero hay algunas situaciones en las que puede encontrar que algo como esto tiene utilidad.
Por un lado, mediante el bloque de ForwardDeg podría hacer que el programa que utiliza sea más fácil de leer. Si el programa tiene un montón de bloques Mover dentro, no se puede decir tan fácilmente cuáles van hacia adelante o hacia atrás o usando grados o segundos sin una mirada más de cerca a los bloques. Usando Mis bloques para acciones le permite ver los nombres asignados a cada bloque, que es más indicativo de lo que hace. También, se aprovechar del hecho de que un cambio en el contenido de un Mi Bloque afectará a todos los usos de ese bloque. Por ejemplo, si uso el bloque ForwardDeg diez veces en un programa, los diez usos utilizará el mismo nivel de potencia que se estableció dentro del Mi Bloque (75 más arriba). Entonces, si se edita el contenido de mi bloque con sólo cambiar el nivel de potencia del bloque Mover dentro de él, los diez usos del bloque ForwardDeg utilizarán automáticamente el nuevo nivel de potencia. Si hubiera utilizado diez bloques Mover independientes, tendría que cambiar los diez niveles de potencia de forma individual.

El diseño de su propios Parámetros de entrada


En el ejemplo ForwardDeg anterior, se ha creado un parámetro de entrada proporcionando acceso directo a uno de los parámetros de los bloques contenidos en el Mi Bloque (el parámetro de Duración del bloque de Mover). También puede diseñar sus propios parámetros de entrada para mi un bloque que se comporten de la forma que desee y elegir sus propios nombres para ellos. Como ejemplo, vamos a empezar otra vez con el ejemplo de mi un bloque que se mueve hacia adelante, y esta vez vamos a hacer una versión diferente llamada Forward cm, que tiene el parámetro Duration (lo que se interpreta como grados) sustituido por un parámetro llamado Distancia cm, que es la distancia en centímetros que queremos que el robot se mueva. Muchos usuarios de robots NXT quisieran decirle al robot hasta dónde viajar en pulgadas o centímetros en lugar de tener que determinar el valor correcto grados. Con un poco de matemáticas, podemos crear un Mi Bloque que lo hará por nosotros en NXT-G.
Mediante la ejecución de algunos experimentos con un robot que utiliza los neumáticos estándar
NXT 2.0 (43,2 x 22) sobre sus ruedas motrices, se puede determinar que los motores de tracción deben girar 27 grados para hacer robots de viaje 1 cm (esto se determina mejor mediante la observación de cuántos grados son necesarios para recorrer una distancia más larga, como 100 cm y luego dividiendo para determinar el valor para 1 cm). Tenga en cuenta que esta cifra puede variar dependiendo de si el robot utiliza orugas frente a los neumáticos, el diámetro de los neumáticos y los engranes utilizados, pero una vez que se han elegido éstos en el diseño de su robot puede determinar la conversión de grados a cm.

La Figura 21a muestra un programa que convierte una distancia en centímetros (procedente de un bloque Constante denominada cm) a los grados de motor mediante el uso de un bloque de Matemáticas, y luego el cableado de los grados resultantes al puerto Duración en un bloque Mover. El bloque de Matemáticas se configura para multiplicar por 27 (Figura 21b).

Figura 21a / b: El valor de bloque Constante se multiplica por 27 antes de ser utilizado como los grados Duration.


Al seleccionar tanto el bloque de Matemáticas y el bloque de movimiento (pero no el bloque constante) en la creación de un Mi Bloque (Figura 22), el Mi Bloque resultante
tendrá un parámetro de entrada que permitirá que el programa que lo usa pueda suministrar la distancia en cm. Observe que el parámetro de entrada se produce por que el cable de datos que lleva al puerto "A" del bloque de matemáticas Math fue "cortado" del bloque constante durante la creación Mi Bloque. El cable que conduce al puerto Duración del bloque Mover no resultará en otro parámetro de entrada, puesto que su fuente de datos (el bloque de matemáticas) está dentro del bloque. Esto es lo que queremos, el valor de nuestro parámetro de entrada en cm va al bloque de matemáticas, se multiplica por 27, y luego se envía al bloque Mover como grados.

Figura 22: Los bloques Mover y Matemáticas y se incluyen en el Mi Bloque, pero no el bloque Constante.


Cambio del nombre de un parámetro

El resultado es la creación de un Mi bloque desde el programa que se muestra en la Figura 22 al que damos el nombre Forward cm y luego abriendo el contenido del Mi bloque se muestra en la Figura 23. La pestaña Forward cm contiene el contenido de Mi bloque, que consta de dos bloques (un bloque de Matemáticas y un bloque de movimiento), y también un bloque de parámetros de conexión especial que representa el origen del parámetro de entrada. Por defecto, NXT-G nombra un parámetro de entrada con el nombre del puerto de datos al está conectado, por lo que en este caso el parámetro se denomina "A", ya que está conectado al puerto "A" del bloque de Matemáticas. Este es también el nombre que se mostrará en el panel de configuración de Mi Bloque. Puede cambiar el nombre de un parámetro para que sea más descriptivo, como se explica a continuación, y por lo general querrá hacerlo.
Figura 23: El nombre predeterminado del parámetro general se toma del puerto de datos a que se conecte.


Para cambiar el nombre de un parámetro en un Mi Bloque, haga doble clic en el nombre del parámetro (que se muestra encima del bloque de parámetros en la vista del contenido del Mi Bloque) y escriba un nombre nuevo. También puede arrastrar el bloque de parámetro de conexión a una posición diferente si se desea, como se muestra en la Figura 24.
Figura 24: Un bloque de conexión parámetro se puede mover y cambiar de nombre.


Al cambiar el nombre de un parámetro, el nuevo nombre se utilizará también en el panel de configuración de Mi Bloque. Sin embargo, para ver el nuevo nombre, tendrá que borrar la primera copia que fué creada en la definición de Mi Bloque e insertar una nueva copia del Mi Bloque.
La figura 25 muestra una nueva copia del bloque Forwad cm y su panel de configuración que muestra el parámetro de entrada, ahora denominada Distance cm.
Figura 25: La inserción de una nueva copia del Mi Bloque mostrará el parámetro cambiado el nombre.


Creación de un Mi Bloque con parámetros de entrada múltiple

El ForwardDeg y el bloque Forward cm que hemos creado antes tenían sólo un parámetro de entrada, pero como habrá adivinado, es posible crear un Mi Bloque que tiene más de un parámetro de entrada, y esto es a menudo útil. Hay algunas cuestiones a tener en cuenta, por lo que esta sección se mostrará un ejemplo más de una variante extendida del bloque Forward cm, que añade un parámetro de entrada para controlar el nivel de potencia.
En primer lugar, es importante señalar que no se puede agregar un parámetro a un Mi Bloque
existente, debe empezar de nuevo y crearlo de nuevo. Usted puede reciclar algunos de sus trabajos anteriores, al copiar y pegar bloques del viejo Mi Bloque si es necesario, pero debe pasar por el proceso de creación del Mi Bloque otra vez.

Nota: Una vez que se crea Mi Bloque, puede cambiar el nombre de un parámetro de entrada, pero no se puede agregar o eliminar un parámetro de entrada, ni se puede cambiar el tipo (número, lógica, o texto) de un parámetro. Por lo tanto, es una buena idea pensar un poco en los parámetros que se van a utilizar antes de crear un Mi Bloque complejo. También debe guardar una copia del programa fuente antes de crear el Mi Bloque, de modo que pueda regresar a esta copia y hacer los cambios para modificar los parámetros si necesita un nuevo bloque modificado.


Para crear un Mi Bloque con múltiples parámetros, puede empezar por la creación de un programa que realiza la acción deseada, usando un bloque Constante conectado a cada puerto de datos de los que desea crear un parámetro. La figura 26 muestra un primer intento de hacer esto. Este programa es similar al programa utilizado para crear el bloque Forward cm ( Figura 21a ), con la adición de otro bloque Constante que está conectado al puerto de datos de Potencia del bloque Mover. Sin embargo, este programa no se puede utilizar para crear nuestro deseado mi bloque debido a que los bloques que se necesitan para crear el Mi Bloque (sólo el bloque de Matemáticas y el bloque Mover) no son contiguos (uno al lado del otro en la viga de secuencia). La Figura 27 muestra un programa corregido en que el bloque Constante Power se trasladó a la parte delantera del programa, de modo que los bloques a incluir en el Mi Bloque se puede seleccionar contiguamente.
Figura 26: Una disposición incorrecta para crear un Mi Bloque con dos parámetros.


Figura 27: Dos bloques constantes colocados al principio de la secuencia permiten que

los otros bloques puedan ser seleccionado juntos para la creación de Mi bloque.

Después de crear un Mi bloque desde el programa que se muestra en la Figura 27, y denominar a esta versión del bloque como Forward, el programa de origen se modifica como se muestra en la Figura 28. Se puede ver que el bloque Forward tiene dos parámetros de entrada, y ambos están todavía conectados a los bloques de Constante que hemos utilizado para construirlo.
Figura 28: El Mi Bloque Forward tiene un centro de datos con dos puertos.


Al igual que antes, haga doble clic en el bloque Forward y abrirá sus contenidos, y aquí se puede cambiar el nombre de los parámetros. La Figura 29 muestra los contenidos del bloque Fordward con los nombres de los parámetros modificados y el cableado reordenado.
Figura 29: El contenido de Mi Bloque Forward con parámetros renombrados y un comentario de encabezado del módulo.
Como en los ejemplos anteriores, tendrá que insertar una nueva copia del Mi Bloque Forward para ver los parámetros renombrados. La figura 30 muestra una nueva copia del bloque hacia Forward con sus dos parámetros de entrada.

Figura 30: El delantero Mi Bloque con dos parámetros de entrada.


Hacer un comentario en la cabecera del bloque

También se muestra en la Figura 29 anterior un formato recomendable para un comentario de encabezado del bloque, que es una buena manera de explicar lo que hace un Mi Bloque. Especialmente para mi un Mi Bloque más complejo, es una buena idea incluir un comentario dentro del bloque (utilizando la herramienta de comentario en el editor de NXT-G) que explica lo que hace el bloque, y también incluye una línea para cada parámetro que explica lo que representa y para lo que se utiliza dicho parámetro.
Para los bloques incorporados en NXT-G, si usted tiene una pregunta acerca de lo que el bloque o sus parámetros hacen, puede consultar la página de ayuda para ese bloque, pero para los Mi Bloques no existirá, por supuesto, una página de ayuda, y es normal olvidarse cómo utilizar un bloque que ha creado hace tiempo. Si se incluye un comentario encabezando el bloque en la parte superior de cada Mi Bloque sólo tiene que hacer doble clic en un Mi Bloque para abrir el contenido y leer la explicación.
Si agrega un comentario encabezado del bloque, entonces también puede omitir la descripción del bloque en el primer paso del Mi Generador de Bloques ( Figura 4 ), debido a que un comentario de encabezamiento dentro de Mi Bloque aparecerá en la pantalla y cuando se imprime.

domingo, 17 de marzo de 2013

Bloques personalizados (NXT-G) 1/6

Esta primera entrada surge de la traducción del gran tutorial de Dave Parker que hice para mi equipo de FLL. He dividido el extenso tutorial en seis partes que incluiré en los próximos días esperando que os sirvan de referencia, al menos mientras nos llega el nuevo Mindstorm NXT 3.0 que seguramente deje estas entradas obsoletas. Tengo muchas ganas de que lo pongan a la venta para ver que opciones de programación ha implementado Lego.



¿Qué es un Mi Bloque?


Las paletas común y completa del sistema de programación NXT-G contienen todos los bloques integrados que se pueden utilizar para crear un programa de NXT. El software NXT-G también le permite crear sus propios bloques llamados "Mis Bloques". Estos bloques son de color azul y aparecen en la paleta personalizada en NXT-G. Un Mi Bloque es una secuencia de otros bloques que se ha empaquetado en un solo bloque para que sea más fácil de usar en un programa. Los usuarios de otros lenguajes de programación pueden conocer esto como una "subrutina", "subprograma" o "función".


Figura 1: My Blocks son de color azul, y aparecen en la paleta personalizada en NXT-G. 

¿Por qué utilizar Mis Bloques?


La razón más común para utilizar un Mi Bloque es que permite fácilmente usar una secuencia de bloques una y otra vez, sin necesidad de volver a crear la secuencia cada vez.Usando un Mi Bloque, sólo es necesario para crear la secuencia una vez, y entonces puede utilizarla tantas veces como desee en cualquiera de sus programas con sólo insertar un solo Mi Bloque. Otra ventaja de usar Mis Bloques es que la secuencia del programa que compone el Mi Bloque sólo se almacena en la memoria del NXT una vez para cada programa que lo usa, incluso si el programa utiliza el Mi Bloque varias veces, así que mis bloques pueden ser una buen manera de introducir más programación en la memoria limitada del NXT. Por último, también puede utilizar Mis Bloques simplemente para romper un programa largo en trozos para que sea más fácil trabajar con él, incluso si usted no planea usar un pedazo más de una vez, porque el trabajo con los programas más pequeños es mucho más fácil en NXT -G.

En este tutorial, vamos a ver ejemplos de cómo crear y utilizar Mis Bloques, comenzando con un ejemplo muy sencillo hasta ejemplos más complejos que utilizan características como parámetros de entrada, puertos de salida y variables para que sean más potentes y más flexibles . Un proceso paso a paso para crear y probar un complejo Mi Bloque será presentado como guía para crear sus propios bloques. Por último, vamos a aprender cómo se puede organizar y personalizar tus My Blocks y compartirlos con los demás.



Creación de su primer Mi Bloque


Para nuestro primer ejemplo Mi Bloque, vamos a crear un bloque llamado BeepBeep que emitirá dos tonos por el altavoz NXT, y luego lo vamos a utilizar en un programa junto con otros bloques que hacen que el robot se mueva. Este sencillo ejemplo muestra los pasos básicos necesarios para crear y utilizar cualquier Mi Bloque.

Creación de un Mi Bloque


El primer paso para crear un Mi Bloque consiste en escribir un programa que utiliza la secuencia deseada de bloques. La figura 2 muestra un programa compuesto por cinco de los bloques que hacen el robot se mueva hacia adelante, suenen dos tonos por el altavoz, y luego vuelve a avanzar. Los tres bloques seleccionados en el medio son responsables de los dos tonos de sonido (un bloque de espera se utiliza para separar los tonos en dos sonidos distintos). Vamos a convertir esta secuencia de tres bloques en un bloque llamado BeepBeep, lo que nos permitirá volver a utilizar fácilmente esta secuencia.



Figura 2: Una secuencia de bloques se pueden seleccionar y se convierte en un Mi Bloque para facilitar su reutilización. 

Una vez que usted tiene un programa de trabajo que incluye el comportamiento de su Mi Bloque, seleccione la secuencia de los bloques que componen el Mi Bloque arrastrando un rectángulo de selección sobre ellos, como se muestra en la Figura 2. Cada bloque seleccionado entonces debe mostrar un contorno de selección azul. Para hacer un Mi Bloque de los bloques seleccionados pulse el botón "Crear Mi Bloque" en la barra de herramientas, como se muestra en la Figura 3, que abrirá la ventana del Mi Generador de bloques,como se muestra en la Figura 4


Figura 3: Con una secuencia de bloques seleccionados, haga clic en "Create Mi Bloque" 
barra de herramientas botón para crear un Mi Bloque 

Mi Generador de My bloques consta de dos pasos. El primer paso se muestra en la figura 4 y muestra una vista previa de los contenidos de Mi Bloque en la sección de los bloques seleccionados. En este paso se debe introducir un nombre para mi el Bloque en el cuadro Nombre del bloque (en este caso BeepBeep). Elegir un nombre para el bloque que sea descriptivo pero corto. Aunque los nombres más largos son válidos, se cortará cuando se muestra en el bloque y por lo tanto serán más difíciles de leer en un programa. También puede introducir una descripción opcional del bloque en el cuadro Descripción de Bloque. Esta descripción se imprimirá junto con el diagrama de bloques si se imprime el contenido de su Mi Bloque utilizando el comando Imprimir del menú Archivo. También puede dejar en blanco la descripción y describir su bloque con la herramienta de comentarios dentro de los contenidos del bloque.

Pulse el botón Siguiente para pasar a la segunda etapa de Mi Bloque Builder, que le permitirá elegir un icono para que aparezca en la cara de su Mi Bloque. Al pulsar en Finalizar después de completar el primer paso se saltará la elección de icono y se usará el uso de un icono genérico de Mi Bloque.


Figura 4: En la primera etapa de mi Block Builder, escriba un nombre y una descripción para el Mi Bloque. 

El segundo paso de Mi Generador de Bloques le permite elegir un icono que se mostrará en su Mi Bloque, como se muestra en la Figura 5. Puede seleccionar un icono de la lista que se muestra y arrastrarlo a la casilla blanca en la parte superior del cuadro de diálogo. A continuación, puede colocar el icono en el frente del bloque arrastrando con el ratón o pulsando las teclas de flecha del teclado. También puede cambiar el tamaño del icono, arrastre las esquinas negras del rectángulo de selección. Si lo desea, puede seleccionar más de un icono de la lista y colocarlos como se desee para crear una imagen que es una combinación de iconos. En la Figura 5, dos copias del icono de nota musical (el segundo icono en la lista) se utilizan para crear una imagen que sugiere una función de este bloque de sonar dos tonos. Pulse Finalizar para completar el Mi Generador de Bloques y crear su Mi Bloque.


Figura 5: El paso Generador de icono le permite personalizar el icono de Mi Bloque. 

Después de crear nuestro mi bloque, el programa modificado se muestra en la Figura 6. Los tres bloques que conforman el bloque BeepBeep han sido sustituidos por un solo Mi Bloque azul que muestra el nombre y la imagen que hemos elegido para el bloque BeepBeep. El programa todavía va a hacer lo mismo que hacía antes (ir hacia adelante, emitirá dos tonos, y luego ir de nuevo hacia delante), pero ahora parte del programa está contenido dentro del Mi Bloque. 





Nota: A veces, después de crear un Mi Bloque en un programa, un espacio vacío en el rail de secuencia se quedará en el lugar donde estaban los bloques originales. Para eliminar este espacio adicional puede reducir el tamaño del rail de secuencia colocando el cursor en la ubicación que se muestra en la Figura 6 y arrastrando hacia la izquierda.


Figura 6: Queda espacio adicional en el rail después de crear una secuencia de Mi Bloque 
Se puede reducir arrastrando el rail de secuencia en la ubicación mostrada 

Ver y editar el contenido de un Mi Bloque


Una vez que nuestro bloque BeepBeep ha sido creado, los bloques contenidos en su interior han desaparecido de la vista en el programa original, tal como se muestra en la Figura 7. Para ver el contenido de un Mi Bloque o editar los bloques contenidos en él, puede hacer doble clic en Mi Bloque abriréndose el contenido del Mi Bloque como una nueva pestaña en el editor de programas NXT-G, como se muestra en la Figura 8. Esto es similar a tener otros programas NXT-G abiertos, excepto en que la solapa BeepBeep está marcado con dos barras de color azul para indicar que el contenido es un Mi bloque en lugar de un programa normal.


Figura 7: Para ver o editar el contenido de mi un bloque en un programa, haga doble clic en Mi Bloque. 


Figura 8: Un Mi Bloque abierto para su visualización o edición se abre como otro programa NXT-G en una nueva pestaña, 
con el nombre de Mi Bloque en él y dos barras de color azul para indicar que se trata de un Mi Bloque. 

Para cambiar el contenido de un Mi Bloque, simplemente edite los bloques como en un programa normal. Todos los cambios realizados en el contenido afectarán a todos los usos del My Block en todos los programas que lo utilizan, después de que los programas se vuelven a compilar y a descargar en el NXT. 





Nota: Después de cambiar el contenido de un Mi Bloque, cualquier programa que utilice debe ser vueto a descargar al NXT para incorporar los cambios, de lo contrario el programa se mantendrá sin cambios y utilizará los contenidos originales del Mi Bloque. Un error muy común después de la edición de Mi Bloque es descargar el contenido del mi bloque al NXT en lugar del programa que lo utiliza (porque tienes esa pestaña seleccionada en el editor), lo que no afectará a los programas que utilizan el bloque.

Inserción de un Mi Bloque en un Programa


Después de crear un Mi Bloque, NXT-G modificará automáticamente el programa original para usar el Mi Bloque en lugar de la secuencia de bloques original como se muestra en la Figura 7 arriba. Ahora también puedes volver a utilizar el Mi Bloque mediante otra inserción en el mismo programa o en otros programas. Para insertar un nuevo uso de un Mi bloque en un programa, seleccionar la paleta personalizada como se muestra en la Figura 9. El menú de la parte superior de los bloques de la paleta personalizada contiene los bloques Mis que ha creado. La figura 10 muestra el bloque BeepBeep junto con mis otros siete bloques que he creado. Los bloques se ordenan en el menú alfabéticamente por el nombre del bloque. Si está utilizando varios perfiles de usuario NXT-G, cada perfil de usuario contendrá su propia lista de Mis bloques que fueron creados por ese perfil de usuario.


Figura 9: Para insertar un Mi Bloque en un programa, seleccione la paleta personalizada. 


Figura 10: El menú de la parte superior de la paleta personalizada contiene los Mis bloques que haya creado. 

Mis Bloques elegidos de la paleta personalizada se puede insertar en un programa como bloques regulares. El programa modificado en la Figura 11 utiliza ahora el bloque BeepBeep dos veces. En comparación con la alternativa de introducir la secuencia de 3 bloques del bloque BeepBeep directamente en el programa principal dos veces, el programa utiliza el bloque BeepBeep es más corto, más fácil de leer, fácil de modificar, y ocupa menos memoria en el NXT.


Figura 11: Mis bloques pueden ser fácilmente reutilizados, lo que ahorra tiempo de programación y memoria en el NXT. 

lunes, 11 de marzo de 2013

El inicio y la razón


Hace tiempo que como otros muchos me rondaba la idea de hacer un blog. Mi duda ha sido siempre ¿de qué? ¿en qué temática puedo aportar algo decente que mejore lo que ya hay? Y al final, aunque se supone que es un error de orientación de principiante, he decidido que de todo lo que me ocurre y lo que veo.

Intentaré que la dispersión no sea excesiva pero seguro que colocaré desde cuestiones de cocina hasta de navajas barberas, pasando obligatoriamente por cuestiones de desarrollo de aplicaciones o enseñanza de robótica a niños. Un cajón de sastre que puede, o puede que no, se vaya ajustando en función de lo que haga en el futuro.

La otra cuestión es ¿por qué ahora? pues por que he terminado mi segunda participación en la FLL  como entrenador y participando en el foro de entrenadores me he dado cuenta que hay algunas cosas que he aprendido y que pueden ser útil para otros locos como yo.

Así que bienvenidos a esta nueva aventura. Muchas gracias.