domingo, 12 de abril de 2015

5.6 Lenguajes de robots P.N.03


Cuando se programa un manipulador lo que se necesita usualmente es situar su punto terminal en una localización determinada del espacio, haciendo además que la dirección de aproximación a la misma esté también definida. Pero no sólo es importante que el manipulador alcance determinados puntos del espacio, sino que lo haga en el momento adecuado. Así, es preciso distinguir entre:
  • Camino, sucesión de puntos del espacio.
  • Trayectoria, camino sujeto a condiciones temporales.
Generalmente, es necesario diseñar y programar trayectorias, rectas o curvas arbitrarias en el espacio cartesiano, para lo cual es importante conocer la relación entre la trayectoria cartesiana del punto terminal y la de las articulaciones. En el diseño de las trayectorias hay que tener en cuenta factores como:
  • La prevención de posibles colisiones con objetos del entorno.
  • El mantenimiento de una orientación fija del elemento terminal (transporte de líquidos, soldadura, etc.).
  • La utilización de aceleraciones moderadas, de forma que se eviten fuerzas de inercia elevadas que resulten inadecuadas para los motores.
Existen determinadas circunstancias que hacen que los lenguajes de programación de robots resulten relativamente diferentes al resto:
  • El entorno en el que actúa el robot no puede describirse normalmente en términos puramente cuantitativos.
  • Se necesitan incluir condiciones no usuales, como la comentada prevención de colisiones.
  • Las acciones del robot están sujetas a imprecisiones que pueden dar lugar a incidentes que el programa debe ser capaz de procesar.
  • Ciertas informaciones de los sensores del sistema pueden ser no sólo difíciles de procesar en tiempo real, sino también ambiguas.

1. Características de los lenguajes
Habitualmente, la programación de un robot resulta un proceso continuo de ensayo y error. Por ello, la mayoría de los entornos de programación son interpretados, pudiéndose realizar un seguimiento paso a paso de lo programado y evitar el ciclo editar-compilar-ejecutar-reprogramar, costoso en tiempo. Es deseable una buena capacidad de depuración y ejecución paso a paso. Un lenguaje de programación de robots se podría considerar ideal o universal si cumpliese los siguientes requisitos:
  • Proporcionar tipos de datos convencionales (enteros, reales ...) pero también otros específicos para:
    • El posicionamiento y orientación espacial de los elementos actuadores.
    • La comprobación de sucesos, es decir, la recogida puntual o continua de la información de las señales generadas por los sensores y su almacenamiento en variables sensoriales. Estas variables son de alcance global y no se inicializan explícitamente en el programa, como las variables convencionales. Asimismo, debe incorporar elementos de priorización de sucesos en caso de activación simultánea de varios sensores.
  • Incorporar órdenes de movimiento de los actuadores en el espacio cartesiano, sencillas y con posibilidad de elegir la trayectoria del punto terminal entre la posición actual y la final. Asimismo, debe ser posible memorizar la posición actual para continuar un movimiento en caso de interrupción anormal. También, debe contar con órdenes específicas para la realización de retardos (esperas hasta que se concluya la ejecución de un movimiento).
  • Proporcionar mecanismos específicos de inicialización y terminación de las acciones del robot, como pueden ser el auto-test y el calibrado inicial, o el posicionamiento en algunas coordenadas específicas al principio o al final de la operación.
  • Incorporar medios de sincronización de sucesos, que modifiquen la tarea normal en función de la ocurrencia de ciertos hechos o la llegada de ciertas señales. Las acciones de un robot se sincronizan normalmente para atender a cuatro tipos de sucesos:
    • Activación. Comenzar la acción al recibir una señal.
    • Terminación. Finalizar la acción al recibir una señal.
    • Error. Comenzar una secuencia de recuperación ante una señal de error.
    • Anulación. Finalizar una acción ante la ausencia de señal de terminación en un tiempo establecido.
  • Proporcionar concurrencia o paralelismo, de modo que se puedan controlar simultáneamente todas sus articulaciones y permitir el funcionamiento simultáneo con otros robots. Esto se puede conseguir mediante:
    • Un lenguaje que permita concurrencia.
    • Un software que simule paralelismo mediante el reparto del tiempo del procesador.
    • Usando varios elementos de computación (varios microcontroladores)
  • Posibilitar la comunicación entre procesos cuando varios coexisten simultáneamente. Esto se puede llevar a cabo mediante:
    • El uso de la memoria compartida.
    • La llamada remota a procedimientos.
    • El envío de mensajes.
  • Gozar de portabilidad a cualquier tipo de equipamiento del que se disponga, con independencia del tipo de robot, de sensores, de actuadores y de elementos terminales.
Puesto que estos lenguajes deben poder modificar en tiempo real el flujo del programa dependiendo del estado de las señales de los sensores, el sistema operativo que soporte tales  lenguajes debe ser de tiempo real, entendiendo por tal aquél que pueda responder a cualquier suceso externo, es decir, a la petición de un programa, en un tiempo acotado –suficientemente breve-, sin posibilidad de que dicha petición pueda quedar bloqueada indefinidamente. Por ejemplo, el mantenimiento de la estabilidad en el movimiento de las articulaciones del robot exige el muestreo de los sensores de posición con un período definido y corto, y el envío de la acción de control calculada en ese mismo período.
Los lenguajes de programación actuales no verifican estrictamente todos los requisitos detallados, pero existen varios que resultan de utilidad dependiendo de la tarea específica a la que se les destina.
 
2. Clasificación de los lenguajes. Métodos de programación
En función de la sintaxis del lenguaje y de su complejidad se pueden distinguir tres tipos:
  1. Secuenciadores de instrucciones. Almacenan una secuencia de posiciones y de acciones (por ejemplo, la apertura o cierre de la pinza de un manipulador), para repetirla posteriormente en un orden prácticamente fijo. El robot aprende dichas posiciones y acciones mediante:
    • El movimiento del robot gracias a un teclado especial denominado teach pendant, a un ratón o a un joystic.
    • El movimiento  manual del mismo y el almacenamiento de las posiciones de los encoders.
  2. Lenguajes específicos para robots. Diseñados normalmente por cada firma comercial para sus robots, teniendo en cuenta únicamente sus propios sensores y actuadores. Generalmente incorporan, además, descripción y razonamiento en términos geométricos e interfaces a sistemas de CAD/CAM.
  3. Extensiones de lenguajes clásicos. Se trata de módulos de ampliación específicos para el manejo de sensores y actuadores, desarrollados para lenguajes de propósito general como C, PASCAL o BASIC, que conservan la sintaxis general y los métodos de control de flujo de los mismos.
Por otra parte, en función del nivel de abstracción que permiten a la hora de especificar la tarea, los lenguajes pueden ser:
  • Orientados al robot.
  • Orientados a la tarea.
Las instrucciones de los lenguajes orientados al robot son órdenes para la lectura del estado de los sensores y para el movimiento de los actuadores. El programador debe establecer de modo secuencial cuál será el comportamiento de los actuadores en función de las señales de los sensores. Estos lenguajes se pueden subdividir en tres niveles:
  • De aprendizaje. Se trata de secuenciadores de instrucciones ampliados. Permiten la lectura automática de variables de posición y su modificación en modo texto. Cuentan con estructuras de control simples e instrucciones de comprobación de sensores que son insertables en la secuencia de movimientos aprendida mediante interfaces con menús. Ejemplos de este tipo de lenguajes son APT (Automatically Programmed Tools) y MCL (Macintosh Common LISP).
  • Estructurados. Con estructuras flexibles para la definición de posiciones, orientaciones y manipulación. Permiten la comprobación puntual o continua de las señales sensoriales, y la realización de movimientos de aproximación en cualquier dirección del espacio cartesiano. Ejemplos de este tipo de lenguajes son los denominados KAREL (lenguaje para el robot Karel), SRL (Structured Robot Language), AL (Assembly Language), AML (A manufacturing Language), VAL (Variable Assembly Language) y VAL-II.
  • Experimentales o prototipos de investigación. Se trata de lenguajes similares a los de aprendizaje:
    • Cuyo resultado no es una mera repetición de las acciones, sino la generación de programas con instrucciones de movimiento y variables libres, que puede ser editado con posterioridad para modificar las posiciones absolutas y añadir instrucciones de comprobación de las señales sensoriales; un ejemplo es el lenguaje LM (Language Model).
    • O bien, enseñan al robot estrategias sensoriales mediante la extracción de valores clave de entre todos los valores sensoriales almacenados –gracias a la detección de las situaciones en las que se ha modificado o interrumpido el movimiento-. Un ejemplo de ello lo constituye el lenguaje XPROBE.
En los lenguajes orientados a la tarea el programador debe establecer cuáles son las acciones que debe ejecutar el robot pero no tiene necesariamente que detallar cómo hacerlo. Es el sistema el que decide qué movimientos y comprobaciones sensoriales debe realizar, y en qué orden. Las decisiones se toman en función de:
  • Los objetivos propuestos.
  • El estado en cada momento del mundo del robot.
Lo anterior exime al programador de la realización de un buen número de tareas laboriosas que son obligatorias en los lenguajes orientados al robot.
La tarea se describe en lenguaje de alto nivel, mediante instrucciones en forma textual o utilizando una interfaz gráfica (un simulador del mundo del robot). Un módulo planificador consulta una base de datos, denominada el modelo del mundo, y transforma las especificaciones de la tarea en un programa orientado al robot. Esto está directamente relacionado con las técnicas de Inteligencia Artificial para la generación automática de programas.
Como ejemplo, supón que se debe coger un bloque de una determinada posición y apilarlo sobre un segundo bloque situado en otra posición diferente. Esta tarea podría descomponerse en varias subtareas:
  • Situar la pinza sobre el primer bloque.
  • Sujetar el bloque.
  • Llevar el primer bloque sobre el segundo.
  • Soltar el primer bloque sobre el segundo.
A su vez, cada subtarea podría ser divida en otras. Por ejemplo, la primera subtarea podría ser fraccionada en las siguientes:
  • Determinar dónde se hallan actualmente el robot y el primer bloque.
  • Determinar dónde se encuentran el resto de objetos del mundo, para no tropezar con ellos.
  • Calcular una trayectoria de desplazamiento libre de colisión.
Para determinar dónde se encuentra el robot, únicamente hay que leer los sensores internos (normalmente codificadores ópticos). Sin embargo, determinar dónde se encuentra el segundo bloque resulta una cuestión más compleja. La respuesta más usual a este problema consiste en almacenar modelos geométricos de objetos, y tratar de obtener mediante los sensores externos descripciones geométricas de los objetos reales que encajen con los objetos almacenados. Son los sistemas de CAD los que permiten el modelado geométrico, almacenamiento y posterior consulta de los modelos. Ejemplos de lenguajes orientados a la tarea son AUTOPASS (Automatic Programming System for Computer- Controlled Mechanical Assembly), RAPT (Robot Automatically Programmed Tool) y LAMA (Language For AutomaticMechanical Assembly).

No hay comentarios:

Publicar un comentario