13
Instituto Tecnológico de Colima Ingeniería Mecatrónica Programación numérica Unidad 2 Tarea no. 1 “Tutorial para el uso de Robomind®” Catedrático: Ing. Rafael Espinoza Alumno: Alejandro Alcaraz Zamudio No. De Control: 08460616 Fecha de entrega: 18/03/09 Introducción Robomind es un programa que facilita el entendimiento del lenguaje de programación básico, mediante la utilización del software el cual se controla mediante su propio lenguaje. Este programa ayuda a introducir al individuo a la comprensión de las estructuras básicas para la programación de otro tipo de lenguaje, obteniendo conocimientos en campos como robótica e inteligencia artificial. Robomind trata sobre la manipulación de un robot mediante una programación simple de comandos específicos el cual se desarrollara en un ambiente específico. Los comandos dados serán los que controlen dicho robot, las partes del cual consta el software son las siguientes: Panel de mensajes Panel del ambiente Panel de escrito Panel de desarrollo Panel de escrito | En esta parte tú podrás escribir las tareas que el robot realizara, también podrás escribir comentarios para la fácil interpretación de los comandos. | Panel del ambiente | En este panel tú podrás observar las funciones que realiza el robot, y las diferentes características del ambiente donde se encuentra. | Panel de desarrollo | Una vez que se han dado las ordenes tu podrás manipular la forma en que se desarrollan las ordenas, pudiendo empezar, adelantar o detener la corrida. | Panel de mensajes | En esta parte se darán a conocer los resultados de la

Instituto Tecnológico de Colima USO DEL ROBOMINDS

Embed Size (px)

Citation preview

Page 1: Instituto Tecnológico de Colima USO DEL ROBOMINDS

Instituto Tecnológico de ColimaIngeniería Mecatrónica

Programación numérica

Unidad 2

Tarea no. 1

“Tutorial para el uso de Robomind®”

Catedrático: Ing. Rafael Espinoza

Alumno: Alejandro Alcaraz ZamudioNo. De Control: 08460616

Fecha de entrega: 18/03/09Introducción

Robomind es un programa que facilita el entendimiento del lenguaje de programación básico, mediante la utilización del   software el cual se controla mediante su propio lenguaje. Este programa ayuda a introducir al individuo a la comprensión de las estructuras básicas para la programación de otro tipo de lenguaje, obteniendo conocimientos en campos como robótica e inteligencia artificial.Robomind trata sobre la manipulación de un robot mediante una programación simple de comandos específicos el cual se desarrollara en un ambiente específico. Los comandos dados serán los que controlen dicho robot, las partes del cual consta el software son las siguientes:

Panel de mensajesPanel del ambientePanel de escritoPanel de desarrollo

Panel de escrito | En esta parte tú podrás escribir las tareas que el robot realizara, también podrás escribir comentarios para la fácil interpretación de los comandos. |Panel del ambiente | En este panel tú podrás observar las funciones que realiza el robot, y las diferentes características del ambiente donde se encuentra. |Panel de desarrollo | Una vez que se han dado las ordenes tu podrás manipular la forma en que se desarrollan las ordenas, pudiendo empezar, adelantar o detener la corrida. |Panel de mensajes | En esta parte se darán a conocer los resultados de la compilación de los comandos, así como el estado del desarrollo y los comandos que se encuentran en ejecución. |

DocumentaciónEn esta parte aprenderemos como podemos programar el robot para que realice las tareas que deseamos, aprenderemos los tipos de comandos y ciclos que tiene habilitado este programa.Instrucciones básicasSon los tipos de instrucciones que el robot tiene permitido realizar, este tipo de acciones se pueden introducir directamente o se pueden realizar mediante ciclos, los cuales veremos posteriormente:El robot solo puede realizar las siguientes acciones mediante sus componentes:

VerPintarMovimientoAgarrar

Page 2: Instituto Tecnológico de Colima USO DEL ROBOMINDS

Movimiento | forward(n) | Moverse n número de veces hacia adelante. || backward(n) | Moverse n número de veces hacia atrás. || left() | Voltearse 90° hacia la izquierda. || right() | Voltearse 90° hacia la derecha. || north(n) | Voltear la cabeza hacia el norte y moverse n número de veces hacia enfrente. || south(n) | Voltear la cabeza hacia el sur y moverse n número de veces hacia adelante. || east(n) | Voltear la cabeza hacia el este y moverse n número de veces hacia enfrente. || west(n) | Voltear la cabeza hacia el oeste y moverse n número de veces hacia adelante. |Pintar | paintWhite() | Empezar a pintar de color blanco los lugares por los cuales pasa el robot. || paintBlack() | Empezar a pintar de color negro los lugares por los cuales pasa el robot. || stopPainting() | Terminar de pintar y guardar la brocha. |Agarrar | pickUp() | Coger la guía que se encuentra delante del robot. || putDown() | Dejar la guía delante del robot. |Azar | coinFlip() | Crea una respuesta al azar, también puede dar comandos de falso o verdadero. |Ver | Izquierda | Enfrente | Derecha || leftIsObstacle() | frontIsObstacle() | rightIsObstacle() || leftIsClear() | frontIsClear() | rightIsClear() || leftIsBeacon() | frontIsBeacon() | rightIsBeacon() || leftIsWhite() | frontIsWhite() | rightIsWhite() || leftIsBlack() | frontIsBlack() | rightIsBlack() |

Estructuras de programación

Permite definir el orden de ejecución de las instrucciones dadas mediante la programación de una estructura a seguir.En este punto veremos los diferentes tipos de estructura de datos que son aceptados por el software, los cuales podemos definirlos como:Comentarios:Permite la adjunción de escritos en forma de comentarios que no serán evaluados a la hora de correr el programa, este tipo de datos sirven para esclarecer o identificar dudas sobre lo que se pretende realizar en ciertos puntos del programa. La sintaxis de este tipo de datos siempre tendrá que empezar con el signo de “#” seguido del comentario, este tomara como comentario todo lo que se encuentra en la misma línea después del mismo signo.“#Comentario”  

Ciclos:repeat(n){instrucciones}Este ciclo permite repetir un número determinado de veces n ciertas instrucciones. Las instrucciones pueden abarcar cualquier número de líneas siempre y cuando se encentren entre llaves, en la sintaxis se debe de dar primero el comando, después entre paréntesis el numero enésimo de veces a seguir las instrucciones entre paréntesis, y seguido las instrucciones entre llaves.“repeat(4){forward()}”Para repetir cuatro veces el movimiento hacia delante de uno en uno.repeat(){instrucciones}Este tipo de ciclo se usa para repetir ciertas instrucciones un número infinito de veces, el cual provocara que el programa sea infinito de no poner un criterio de determinación, el cual su comando es “break”, mas eso lo veremos más adelante. Este ciclo normalmente es usado para que el robot repita ciertas instrucciones hasta que cumpla el criterio de determinación y siendo así, romperá el ciclo y seguirá con los siguientes comandos. La sintaxis igual al anterior más en este ciclo no se determina el número de veces a repetir las instrucciones.“repeat(){forward()}”El robot avanzará hacia adelante hasta que algo se lo impida y seguirá tratando de ir hacia adelante, mas no podrá.repeatWhile(condición){instrucciones}El ciclo es muy específico esta vez, este ciclo también es de repetición mas este ciclo solo se repetirá siempre y cuando se cumpla la condición que le hemos dado. Dado el tipo de software que se utiliza las condiciones solo pueden ser se percepción o de vista, una vez que la condición base no se cumpla el ciclo romperá y seguirá con los

Page 3: Instituto Tecnológico de Colima USO DEL ROBOMINDS

siguientes comandos en la lista. “repeatWhile(frontIsClear()){forward()}”El robot seguirá hacia adelante solo cuando enfrente se encuentre un espacio vacío, ya que se encuentre con un obstáculo, el ciclo se romperá y seguirá con las siguientes instrucciones.breakEste es el comando que permite terminar cualquier ciclo, más normalmente es usado para el ciclo de repetición infinita, una vez ejecutado romperá el ciclo y seguirá con las demás instrucciones fuera del mismo por lo que toda instrucción dentro del ciclo no serán habilitadas. Para su sintaxis comúnmente se utiliza un criterio de condición, el cual veremos en la siguiente sección, para que solo pueda ser ejecutado cuando se cumpla dicha condición. La sintaxis mas común es la siguiente:“repeat(){if(frontIsObstacule()){break}else{forward()}}”Este ciclo nos indica que se repetirá la acción de ir hacia adelante hasta que el robot se encuentre con un obstáculo, una vez encontrado el obstáculo el ciclo se romperá y seguirá con los comandos anexos posteriormente.

Condicionantes:Este tipo de comandos   nos permite realizar ciertas acciones solo cuando se cumpla cierta condición. En la programación es muy utilizado este tipo de comandos y son básicamente la misma sintaxis, aquí nos permite definir un aspecto en específico de las variables y evaluarlas para comprobar su veracidad, y ejecutar ciertas acciones cuando se cumpla la condición base. if(condición){instrucciones}Esta condicional nos permite realizar una o varias instrucciones cuando la condición se cumple. A este tipo de condicionante se le llama condicionante simple, ya que solo evalúa un aspecto en especifico, y conforme a este hace sus acciones. Su sintaxis es muy simple, solo que debe aclarar la condición específica para su ejecución.“if(frontIsWhite()){paintBlack()forward(1)stopPainting()backward(1)}”En esta condicionante nos indica que se debe de avaluar si enfrente es color blanco, en dado caso de que se cumpla dicha condición, el robot deberá de ir un paso enfrente pintarla de color negro y retroceder, de no ser así, no hará nada el robot.If(condición){instrucciones}else{instrucciones}En este tipo de condicionantes se engloba todos los aspectos de las variables, ya que se divide en dos partes, la primera es donde nos da la condición base, la cual de cumplirse se realizaran ciertas acciones, y la segunda es la parte que nos indica que de no cumplirse la condicione se deberán de realizar otras acciones. Por lo tanto, en esta condicionante siempre se ejecutaran unas acciones, más dependiendo del parámetro se cumplirán especificas acciones.La sintaxis de esta condicionante es igual que la condicionante simple más en esta se le agrega la parte donde no se cumple la condición.“if(frontIsObstacule()){ right()forward(1)}else{forward(1)}”En estas instrucciones se nos indica que si enfrente se encuentra un obstáculo se deberá girar a la derecha y dar un paso al frente, mas si no se cumple, tendrá que dar un paso al frente sin girar.

Expresiones lógicas:Las condicionales if y repeatWhile también son conocidos como expresiones lógicas, ya que estos dependen de la

Page 4: Instituto Tecnológico de Colima USO DEL ROBOMINDS

evaluación de una condicional, sea cierta o falsa, para poder definir que parte del comando deberán de ejecutar. Este tipo de condicionales también se pueden conjugar con operadores booleanos not, and, or para hacer mas especificas las condiciones.Siempre que utilicemos operadores necesitamos el tipo de resultado que pretendemos obtener por eso tomaremos en cuenta la siguiente tabla de verdad:Operador | Anotación sintética | Número de argumentos | Explicación |not | ~ | 1 | Niega el argumento, por lo tanto nos dará como resultado lo contrario.not verdadero=falsonot falso= verdadero“if(not frontIsClear())”Este comando solo se ejecutara cuando se encuentre un obstáculo enfrente. |and | & | 2 | Este operador evalúa los dos y solo dará resultado positivo cuando los dos sean verdaderos.Verdadero & verdadero= verdaderoVerdadero & falso= falsoFalso & verdadero= falsoFalso & falso= falso“if(frontIsClear()&frontIsWhite())”Este comando solo se ejecutará cuando enfrente sea de color blanco y no tenga obstáculos, de no cumplir alguna de las dos no ejecutará el comando. |or | | | 2 | Este operador igual que el and evalúa los dos argumentos, mas este solo necesita que mínimo sea uno verdadero para ejecutarse.Verdadero & verdadero= verdaderoVerdadero & falso= verdaderoFalso & verdadero= verdaderoFalso & falso= falso“if(frontIsBeacon()|frontIsObstacule())”Este comando solo se ejecutara cuando enfrente tenga un objeto, independientemente si es una guía o un obstáculo. |  Este es el tipo de valores que nos arrogaran los diferentes tipos de comandos adjuntos con sus operadores, siendo así la forma en que debemos evaluar las características de cada condicionante que deseamos aplica r en cada situación. También es importante mencionar que se pueden utilizar diferentes combinaciones de los mismos operadores en una misma condicionante.“repeatWhile(not frontIsClear() and (leftIsWhite() or rightIsWhite())){  forward(1)}”Este ciclo nos indica textualmente, que se ejecutara siempre y cuando que enfrente no esté despejado (halla un obstáculo) y además que la izquierda o la derecha sean blancas, cual quiera que sea, dando un paso hacia enfrente. Por lo tanto en este caso, el robot topara con un obstáculo siempre que se ejecute.

ProductoresLos productores son un grupo de comandos que se pueden agrupar de forma independiente al programa para poder ser utilizados en determinadas ocasiones. En el lenguaje de programación normalmente son llamados funciones, su objetivo es sintetizar los programas cuando un grupo de operaciones es utilizado constantemente haciendo que en lugar de estar repitiendo las operaciones enésima número de veces, solo tenga que utilizarse la función las veces deseadas.Los productores como las funciones son declaradas independientemente del programa, lo que quiere decir que no tiene que estar dentro de los comandos a seguir del programa, se le da su sintaxis donde se tiene que declarar el nombre de la función y la cantidad de variables que utilizara también dándole nombre a esas variables. Puesto que la función trabajara con las variables que se ingresen cada vez que es llamada entonces se utiliza variables arbitrarias especificadas anteriormente para la ejecución de los comandos. La sintaxis es muy simple, mas es importante entender y recordar que variable perteneces a cada lugar y qué tipo de operaciones realizará.“producer nombre(variable 1, variable 2,…,variable n){instrucciones}”

“producer rectángulo(base, largo){paintWhite()forward(base)left()forward(largo)left()forward(base)left()forward(largo)stopPainting()}”

Page 5: Instituto Tecnológico de Colima USO DEL ROBOMINDS

Lo que se pretende hacer con esta función es que se creé un rectángulo dando solo los valores la cantidad de cuadros que se quiere de base y de largo, una vez obtenida las cantidades, se ejecutarán las comandos creando el rectángulo.

Una vez que se declare la función (productor) está lista para ser usada, lo único que tenemos que hacer es llamarla; la forma de llamarla es ingresando los valores que deben de tomar cada variable, es importante remarcar que en el lugar donde se pongan los valores será el valor de la variable que pertenezca a ese lugar. Dando un ejemplo, si se pone el valor de 5 en el segundo espacio, en la función llegara el valor de 5 para la segunda variable, y todos los comandos que contengan esa variable ejecutaran su orden con el valor de 5.“rectángulo(5,4)left()forward()rectángulo(2,2)”Puesto que tomamos en cuenta de que el productor ya se había declarado en la parte anterior a esta, podemos llamarlo dándole los valores exactos de las variables. Como podemos apreciar aquí se pretende que el robot pinte dos rectángulos, uno que tenga base de 5 y una altura de 4, mientras que el otro será un cuadrado con valores de 2x2 adjunto al primero.

Como último dato es importante resaltar que siempre que se creé una función (productor) todas las variables declaradas tendrán que ser usadas dentro de las acciones de la misma función (productor). Y siempre que se llama a la función (productor) todas las variables tendrán que tener un valor específico, ya que si no se dan todos los valores, el programa no reconocerá la función, puesto que no tendrán la misma cantidad de variables.

Termino de un programaComo todo tipo de proceso, el programa debe de terminar, más tendrá que ser en un momento en específico, es por ello que este comando es utilizado. Se utiliza este comando puesto que de no ser así, el programa seguiría ejecutando comandos repetitivamente, en caso de que haya, y de no ser así, no hará ninguna acción más el programa no ejecutaría ninguna acción más no terminaría de procesar.La sintaxis en este tipo de software si varía notablemente al que corresponde a otro tipo de programación. La sintaxis requerida en este software es muy simple:“end”

“repeat(){If(frontIsObstacule()){end}else{froward(1)}}”Este programa se ejecutara siempre y cuando delante de él no se encuentre ningún obstáculo, al momento de detectar un obstáculo enfrente del mismo se parará el robot y el programa se terminara de ejecutar.

MapasComo sabemos el robot se desarrollará en un ambiente determina y específico con diferentes características, lo cual le da al robot la posibilidad de desarrollar diferentes tareas. Más este software nos da la posibilidad de alterar dicho ambiento o hasta incluso crear un nuevo ambiente, dándole nosotros las especificaciones que caracterizarán el ambiente, para tener la posibilidad de hacer nuevas tareas. La forma de crear o modificar dicho ambiente es muy fácil, simplemente se necesita un procesador de textos, en este caso el predeterminado es el Wordpad. Todo mapa consta de dos partes principalmente, donde declaramos las marcas (líneas y puntos) que estarán predeterminados en el ambiente, y donde literalmente dibujamos el mapa.Cada parte tiene que ser especifica en sus características. Una vez descrito el mapa se tendrá que guardar en el formato específico para que el software lo lea, esto es simplemente guardarlo con la terminación “.map”, para después poderlo abrir desde el software buscándolo en la carpeta donde lo hemos guardado.A continuación se explicaran los tipos de características que se le pueden dar al mapa:

Bloques

Page 6: Instituto Tecnológico de Colima USO DEL ROBOMINDS

Los bloques son muy importantes ya que son obstáculos que no se pueden mover   y sirven para delimitar el área que abarcará el mapa, existen diferentes tipos de bloques y cada uno tiene un comando específico para que sea implementado, es importante remarcar que todos los comandos que son implementados en la construcción del mapa solo necesitan que se ponga la letra especifica que los identifica. Los diferentes tipos de bloques que hay, junto con su denotación, son los siguientes:

Una vez insertados en nuestro código de mapa, aparecerá el bloque correspondiente a la letra que hemos puesto.

PinturaComo hemos podido observar, en algunos casos los mapas ya vienen con algunas marcas de pintura predeterminada, esto es posible gracias a que el software nos da esa facilidad. La forma en que se puede pedir que aparezcan dichas marcas es fácil, mas estas deben de ser solicitadas en la parte anterior a la descripción del mapa, el formato para llamarlas es: (color, tipo, x, y)  * Color: nos define de qué color se desea que sea la pintura, esta solo puede ser ya sea de blanco o negro, con los comandos de “w” o “b”, respectivamente.  * Tipo: Esto nos indica el tipo de forma que tendrá la pintura, ya que pueden tomar diferentes formas, los comandos son:      * .   = el punto nos indica, que la pintura solo será un punto en el lugar.      * | = este comando nos indica que la forma será de una línea vertical, es importante resaltar esta por default nos abarcara solamente dos espacios, y será de su punto de origen hacia abajo      * - = este es referente a una línea horizontal, que igual que al anterior solo abarcara dos espacio iniciando en el origen y terminando en el cuadro contigua hacia la derecha.  * X: Ya que como se puede apreciar el mapa de Robomind esta cuadriculado, lo que nos quiere decir que todo se basa en coordenadas, por lo tanto en esta parte debemos de dar la coordenada donde queremos dicha pintura empecé referente a la línea horizontal, contando de derecha a izquierda.  * Y: En esta parte indicaremos la coordenada de inicio en la parte vertical, empezando a contar de arriba hacia abajo.

FormatoAhora que sabemos los tipos de comandos que podemos ingresar en el mapa, solo falta conocer el formato general para la creación del mismo. Este se basa solo en las partes previamente vistas. Lo primero que se tiene que declarar son las pinturas y posteriormente el mapa. El comando para la pintura es: “paint:”; mientras que el del mapa es: “map:”.

Aquí podemos apreciar cómo se puede estructurar un mapa y como seria su resultado final, es importante remarcar que para una mayor facilidad a la hora de producir un mapa se puede utilizar una fuente en la que el espacio que abarca cada carácter no varié conforme a la letra. También hay que tomar en cuenta las tabulaciones son tomadas en cuentas como espacios simples, así que si se ingresa un espacio tabulado, lo tomara como un solo espacio envés de los siete espacios que abarca cada tabulación. Ejemplos

A continuación presentaremos unos ejemplos de cómo es utilizado el software.Ejemplo 1:El fin de este programa es que el robot pinte todos los cuadros que existen en un lugar abierto vacio de color blanco sin pasar por la misma línea y terminando cuando todos estén pintados.

Mapa:

Código:repeat(){paintWhite()

Page 7: Instituto Tecnológico de Colima USO DEL ROBOMINDS

if(frontIsWhite() & (leftIsWhite() & rightIsWhite())){end}repeatWhile(not frontIsObstacle() & not frontIsWhite()){forward (1)}right()}Este programa es muy sencillo, ya que trataremos de pintar todo en forma de espiral, simplemente lo único que tenemos que hacer que cada vez que nos topemos con   un obstáculo o con una raya blanca girar a la derecha, hasta que terminemos rodeados de blanco. Por lo tanto damos que primero se evalúa si el lado derecho, izquierdo y enfrente son de color blanco, de no ser así, entonces daremos pasos enfrente hasta que nos topemos con un obstáculo o con una línea blanca, ya que nos topemos con ella solo giraremos hacia la derecha y volvemos a empezar este ciclo hasta que terminemos teniendo rodeados de color blanco donde se ejecutara el comando “end”.

Ejemplo 2:Complicando más el problema anterior lo que trataremos de hacer ahora es pintar líneas paralelas alternando de color y terminar en la última esquina.

Mapa:

Código:repeat(){paintWhite()repeatWhile (not frontIsObstacle()){forward(1)}if((leftIsBlack() or leftIsWhite()) & (frontIsObstacle() & rightIsObstacle())){end}east(1)right()paintBlack()repeatWhile(not frontIsObstacle()){forward(1)}east(1)left()}Aquí utilizamos la herramienta de “east” para indicar al robot hacia qué lado debe de girar, y ponemos el criterio de terminación, para que termine cuando ya esté todo pintado y se encuentre en la última fila.

Ejemplo 3:

Este programa se trata sobre un robot acomodador, lo que hace es acomodar las guías según su color en las “cajas” con el mismo color, ya sean blancas o negras.

   

Page 8: Instituto Tecnológico de Colima USO DEL ROBOMINDS

Mapa:

Código:repeat(4){right()repeatWhile((leftIsObstacle() or not leftIsBeacon()) & not (leftIsBeacon() & leftIsBlack())){if(frontIsObstacle()){right()}forward(1)}left()pickUp()left()repeatWhile(not frontIsBlack()){if(frontIsObstacle()){left()}forward(1)}forward(1)repeatWhile(not frontIsClear()){left()forward(1)right()}putDown()right()}right()right()forward(2)right()repeat(4){left()repeatWhile((rightIsObstacle() or not rightIsBeacon()) & not (rightIsBeacon() & rightIsWhite())){if(frontIsObstacle() or frontIsWhite()){left()}forward(1)}right()pickUp()right()repeatWhile(not frontIsWhite())

Page 9: Instituto Tecnológico de Colima USO DEL ROBOMINDS

{if(frontIsObstacle()){right()}forward(1)}forward(1)repeatWhile(not frontIsClear()){right()forward(1)left()}putDown()left()}

En resumidas cuentas lo que hace es repetir cuatro veces, dado que es la cantidad de guía por color que hay, el ciclo de recoger, ir a la caga respectiva y depositar la guía en una espacio vacío. Para simplificar esto se creó un ciclo para cada color,   avaluando básicamente lo contrario al otro.