Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROSOFT ROBOTICS
STUDIO
4.1 - INTRODUCCIÓN AL MODELO DE APLICACIÓN
Microsoft Robotics Studio está basado en un entorno de Windows y su uso está dirigido a
la creación de aplicaciones de robótica de forma sencilla y para una gran variedad de
plataformas de hardware de ámbito académico, de aficionados y para su desarrollo
comercial. La ejecución de Microsoft Robotics Studio desarrolla un entorno que ha sido
diseñado para complacer las necesidades de un amplio rango de aplicaciones de
robótica:
2. Debe ser posible descubrir, crear, poner fin, y reiniciar componentes mientras la
aplicación está siendo ejecutada.
Para cubrir estos requisitos, la ejecución de Microsoft Robotics Studio provee una
arquitectura de servicio orientada que combina los aspectos clave de la arquitectura
tradicional basada en Web con servicios en red para proporcionar un modelo de
aplicación flexible, ligero y muy distribuido.
A pesar del éxito del HTTP, sin embargo, hay aspectos bien conocidos que no capta de
forma eficaz. En particular, las dos limitaciones con las que las aplicaciones Web se
encuentran repetidamente son:
1. Ausencia de soporte para la manipulación de los datos estructurados. Es decir las
únicas operaciones permitidas en un recurso están en el "nivel del recurso", no
en la subestructura de un recurso. Esto hace difícil actualizar el estado de un
servicio, lo que limita cómo pueden interactuar los servicios.
Un aspecto clave del HTTP es que permite que las aplicaciones saquen provecho de un
modelo de aplicación simple y orientada a estado, comúnmente conocido como REST.
La ejecución de Microsoft Robotics Studio está basada en el modelo de REST pero lo
aumenta con fragmentos de servicios Web para permitir la manipulación de datos
estructurada y la notificación de eventos.
La ejecución del Microsoft Robotics Studio ha sido diseñada ser ligera y flexible, y es
posible usarla en una gran variedad de situaciones aplicables a la robótica.
Fig.1
La ejecución de Microsoft Robotics Studio asume la noción de que un recurso puede ser
una entidad estructurada y define un conjunto de operaciones que permiten que un
estado de servicio sea añadido, eliminado, actualizado, y consultado sin requerir un
modelo de datos común para todos los servicios. Manipular un estado de esta manera no
es nuevo pero combinando la visión estructurada de servicios Web con REST el
resultado es una manera mucho más flexible para interactuar con los servicios.
Fig.2
Debido a la relación con el HTTP, el estado de cada servicio puede ser monitoreado y
manipulado directamente a través del HTTP usando un explorador web, o a través de un
simple protocolo basado en SOAP llamado DSSP (protocolo de servicios de software
descentralizado):
1. El HTTP permite el soporte para operaciones tales como GET, PUT, POST, y
DELETE. Esto permite que un servicio sea usado dentro de un abundante
contexto UI como un explorador web que usa infraestructura y formato de datos
existentes.
2. DSSP permite el soporte para la manipulación estructurada de datos del estado
del servicio que soporta órdenes como UPDATE, INSERT, y QUERY. Además,
DSSP proporciona un modelo de notificación de evento que está relacionado con
los cambios en el estado de ese servicio.
Fig.3
Dos servicios importantes accesibles desde la página de inicio son el panel de control y
el directorio de ejemplo. El panel de control proporciona una lista de todos los tipos de
servicio que están presentes sobre un nodo en particular y permite que un usuario
empiece un servicio desde cero (ver Fig. 6).
Fig.6
El directorio de ejemplo del servicio suministra una lista de servicios activos que se han
registrado con el directorio (ver Fig.7). La lista contiene un enlace al ejemplo del
servicio así como una lista de las parejas que son miembro de un servicio. Dado que las
parejas son también servicios, sólo se puede negar e inspeccionar cualquier aspecto de
una aplicación siguiendo los enlaces en un explorador web.
Fig.7
En VPL las actividades conectadas transmiten los datos a través de las conexiones.
Obsérvese a la siguiente figura:
Las actividades se conectan mediante puntos o cuadrados. Nos referimos a ellos como
pines de conexión. Los pines de la izquierda son de entrada, y los pines de la derecha
son de salida. Estos pines representan las conexiones con las actividades de acciones
internas. Cuando se conecta un pin de entrada de una actividad se está seleccionando
una acción a la que llamar. Por ejemplo, cuando conectamos la actividad
GenericDifferentialDrive, podemos seleccionar la acción SetDrivePower. Cuando una
actividad recibe un mensaje de entrada válido se activa, procesa los datos del mensaje y
ejecuta su código. En el caso de la acción SetDrivePower, un mensaje de entrada válido
es un double.
En VPL hay muchas actividades que reciben entradas. Este no es el comportamiento por
defecto de las actividades.
Una actividad puede tener múltiples puertos de conexión a la entrada y cada uno de
ellos con su propio conjunto de puertos de conexión a la salida.
Las actividades tienen dos tipos de pines de salida. Los pines cuadrados son para salidas
de resultado o respuesta. Una salida de respuesta es proporcionada como resultado de
una entrada en particular. Los pines circulares son para las salidas de notificación. Una
notificación es típicamente enviada en respuesta a algún cambio o evento en un estado
interno. De todas formas, una actividad puede también enviar una notificación en
respuesta a un mensaje que entre. En resumen, las salidas de los resultados son
mostradas como puertos de conexión rectangular, mientras que las publicaciones (o
eventos) poseen puertos de conexión circular.
Es importante hacer notar que al contrario que en una salida de resultado, en la cual sólo
se envía una señal cada vez, una salida de notificación puede ser disparada
repetidamente. Así, los puertos de salida de notificación son usados para enviar
mensajes de datos sin tener que solicitar el estado de la actividad.
Este ejemplo pretende ser una primera experiencia con el MSRS. Nos mostrará cómo
usar el lenguaje de programación visual de Microsoft o VPL para conectar sistemas
genéricos de definidos, asociarlos a un robot en particular y usar el robot en un entorno
simulado. Se puede substituir el robot simulado por un robot real sin tener que cambiar
el programa.
Probarlo.
Desde el menú seleccionar run y start, o presionar la tecla F5. La primera vez que se
ejecuta un nuevo diagrama se deberá salvar. VPL iniciará un nuevo nodo DSS y
ejecutará el diagrama. Cuando el diagrama empiece a ejecutarse verá una ventana
llamada desktop joystick.
Pasó dos: añadir un sistema de conducción diferencial genérico.
El servicio de desktop joystick envía notificaciones cuando los ejes del joystick
cambian (en este caso los valores de X e Y), y estos valores oscilan entre -1000 y 1000.
Necesitaremos una transformación de los datos desde el desktop joystick a las ruedas
izquierda y derecha. Para ello, seleccionamos la casilla Edit values directly en la tabla
de conexiones de datos. Luego, introducimos las siguientes expresiones en las celdas de
valores para LeftWheelPower y RightWheelPower:
(-Y + X) / 1000.0
(-Y - X) / 1000.0
Usar un joystick.
Para usar un joystick con este diagrama, debemos arrastrar el servicio GameController
desde la caja de herramientas (toolbox) de servicios. Entonces unir el pin de notificación
(el círculo rojo pequeño de la derecha) con el medio del cable que conecta el desktop
joystick con el servicio GenericDifferentialDrive, como se muestra la figura:
El menú File incluye comandos que permiten abrir y salvar escenas. Cuando se salva
una escena, el simulador salva el estado de cada entidad de la escena. También salva el
manifiesto que puede ser usado para reiniciar la escena y cualquier servicio asociado a
las entidades.
El menú Open incluye comandos que permiten cargar un nuevo escenario. Primero
elimina todas las entidades que estén actualmente en la escena, y luego carga el archivo
de estados y simula las entidades que contiene.
El comando Open Manifest del menú File permite ejecutar un manifiesto. Los
manifiestos de simulación contienen de forma habitual una referencia al estado del
simulador, así como servicios que están asociados con entidades en la escena.
También está disponible la opción Capture Image As del menú File durante la ejecución
de la simulación para salvar la imagen actual en un archivo al uso.
El menú View nos permite habilitar una barra de estado que aparece bajo la imagen.
Esta barra nos muestra tasa de “frames” por segundo así como la posición actual de la
cámara y hacia dónde apunta.
Desde este menú se puede también cambiar la dirección adonde apunta la cámara.
Seleccionando cualquiera de las opciones bajo “Look along” podemos cambiar la
dirección adonde apunta la cámara (recuérdese que la cámara permanecerá en la misma
localización).
Wireframe: las mallas son representadas con las mismas luces y bordes, pero en
forma de bastidor. Esto permite hacerse una idea de cuántos polígonos
constituyen cada malla y dónde están los bordes de los mismos.
Physics: de esta manera se representan las formas físicas asociadas a cada
entidad. Esto nos permite ver cómo ha sido modelada cada entidad en el motor
de física. Sólo se podrá realizar esto si la física ha sido activada desde el menú
Physics.
Los comandos Settings del menú Render permiten especificar los ajustes de la
representación gráfica, y permanecerán así la siguiente vez que se ejecute el simulador.
Muchas tarjetas gráficas soportan sistemas anti-aliasing. Usando el comando
Antialiasing, la tarjeta gráfica se ralentizará. De todas formas, este sistema permite que
los bordes de los objetos queden mucho mejor definidos. Como ejemplo, compárense
los bordes de las siguientes imágenes:
El menú Physics ofrece activar o desactivar el motor de física. También puede usarse F3
para cambiar rápidamente entre la activación y desactivación del motor físico. Cuando
está desactivado, el menú aparecerá con letras rojas y las entidades no se moverán o
actualizarán mediante el motor. Por ejemplo, los servicios de conducción serán
incapaces de mover los robots. Si se está tratando de dirigir a un robot y éste no se
mueve, lo primero que se debe comprobar es si el motor físico está habilitado.
Se pueden modificar los ajustes físicos mediante el comando Settings del menú Physics.
Estas operaciones no permanecerán de una sesión a otra.
La primera de las casillas nos permite especificar cómo será tratada la cámara principal
por el motor físico. Si se activa, una esfera invisible será colocada alrededor de la
cámara de forma que empujará o golpeará a los objetos circundantes. Dicha esfera se
volverá visible si se cambian las opciones a vista Physics.
La otra entrada que se puede ajustar en el cuadro de diálogo nos permite ajustar el valor
de la gravedad. Para simular situaciones de ingravidez, sólo debemos ajustar el valor 0.
El menú Mode permite alternar entre el modo normal (Run) y el modo Edit. También se
puede cambiar de uno a otro mediante F5. En el modo Edit, la ventana tiene el siguiente
aspecto:
El panel de la esquina superior izquierda es la ventana de entidades y el de abajo a la
izquierda, la de propiedades. El tamaño de dichos paneles puede ser ajustado a voluntad
del usuario.
En el modo Edit, la cabecera Entity aparecerá en el menú. Allí podemos salvar y cargar
entidades, así como cortar, copiar y pegar operaciones en entidades.
Si seleccionamos una entidad como el cielo (sky), se nos mostrarán una serie de
propiedades. Para cambiar el mapa de texturas usadas en el cielo, seleccionaríamos la
etiqueta VisualTexture.
Una forma sencilla de visualizar las entidades seleccionadas es hacer clic en ellas con el
botón derecho del ratón desde la venta de simulación. Desde ahí, podemos rotar el
objeto (Rotation) o cambiar su posición en cualquiera de los ejes.
Es posible editar las formas y texturas que usan las entidades. Si deseamos modificar el
tamaño de un objeto (shape), no tenemos más que cambiar los valores de sus
dimensiones en cualquiera de los ejes y presionar OK. En el caso de una esfera,
podemos modificar su radio y, en general, la masa de la entidad también será un valor a
editar bajo el nombre Mass.
Si deseamos cambiar la apariencia que tendrá una entidad, no tenemos más que
seleccionar dentro de la propiedad EntityState y pulsar un pequeño botón que abrirá otro
menú. Allí, podremos elegir un valor para la textura (Mesh) que nos dará la apariencia
de la entidad.
El alumbrado general puede ser ajustado cambiando los parámetros del sol. El sol es
una LightSourceEntity, una entidad especial diseñada iluminar el lugar de maneras
diferentes. Las propiedades propias de una luz están bajo la sección LightProperites de
la celda de propiedades.
Algunas propiedades importantes de la luz son el tipo (Type) y el color (Color). Hay
tres tipos de luz disponibles: Omni, Directional, y Spot. Cada una de ellas alumbra los
objetos de maneras diferentes. Una luz “omni” emite la luz desde punto a todas las
direcciones - por lo tanto, solamente su posición afecta al entorno. Seleccionando el sol
en la cuadrícula de propiedades y poniendo su tipo a Omni podremos cambiarlo de
lugar y notar cómo cambia la iluminación del lugar. También se puede comprobar cómo
girarlo no tiene ningún efecto en el escenario. Las luces direccionales iluminan todos
puntos en la escena desde la misma dirección -en este caso, solamente su rotación afecta
el lugar. Una luz de Spot solamente ilumina puntos dentro de su Umbral, o puntos
dentro del cono. Un valor de umbral más grande quiere decir que el cono de luz es más
amplio. Las luces de Spot usan tanto la posición como la rotación. Poniendo el tipo de
sol a Spot, moviéndolo y girándolo podremos iluminar los puntos que más nos
interesen.
Otra propiedad útil de las luces es la llamada CastsShadows. Poniendo este valor como
verdadero hará que las sombras sean dibujadas para todos objetos con respecto a la luz
correspondiente. Esto puede tener un impacto negativo sobre el rendimiento. Cuando
esta propiedad está activada debe ser llevado a cabo un gran cálculo previo que podría
tomar mucho tiempo dependiendo de las mallas que estén representadas en el entorno.
El modelo de LegoNXT puede tardar hasta varios minutos en prepararse para la versión
de representación de sombras. Sin embargo, esto solamente se hace una vez para cada
malla.
El color de una entidad está determinado por las luces en el entorno y el material de la
malla de la entidad. Las propiedades del material pueden ser cambiadas para mejorar el
contraste o diferenciar entidades entre sí.
Una manera más fácil de editar materiales es usando el editor material. Haciendo clic en
el botón junto a la propiedad RenderingMaterial se abre el editor material que brinda
una interfaz fácil de usar para cambiar las propiedades del material.
Editor material.
Entre dos entidades se puede establecer una relación “padre-hijo”. De esta forma, la
adición de una entidad hijo de otras entidades permite “pegarlas” para tratarlas como
una unidad. Las entidades padre se actualizan siempre antes que sus hijos, y éstas
seguirán siempre los cambios que se provoquen en las entidades padre.
Si es elige la opción Open Manifest para ejecutar un nuevo manifiesto, un mensaje rojo
de error aparecerá en la ventana de la consola DssHost. No es un error importante si el
tipo de servicio que falló al cargar en el motor de simulación. Esto se debe al hecho de
que el motor de simulación está activo cuando el manifiesto trata de empezar una nueva
instancia.
Cuando se salva una escena con el propósito de iniciar los servicios automáticamente al
cargar el manifiesto resultante, se debe especificar siempre un ServiceContract para las
entidades, con objeto de arrancar los servicios adecuados. Esto es particularmente
importante si la entidad está definida en un conjunto que no ha sido cargado por defecto.
En este caso, la entidad debe mencionar el servicio que contiene su definición para ser
creada en el entorno. Las entidades que están definidas en el ensamblaje actual deben
ser definidas en un servicio válido de DLL.
2. Kuka LB320
3. Lego NXT
4. Pioneer 3DX21
4.3.2 - Trabajos de Trevor Taylor en MSRS
El mapa que se usa como modelo del entorno tridimensional debe ser creado con los 16
colores básicos que se usa en Windows Paint por defecto en formato BMP, aunque la
imagen puede estar en formatos BMP, GIF y JPG. Cuando el Maze Simulator lee el
mapa de bits, asume que el píxel de la esquina superior izquierda es parte del suelo y
usa su color para identificar el resto de suelo.
De la misma manera, se pueden variar opciones tales como la textura y masa de los
objetos y la altura de los muros mediante cambios similares en el código.
Análogamente, podemos seleccionar qué tipo de robot queremos controlar en la
simulación. Los robots disponibles con el Pioneer 3DX y el Lego NXT. Obsérvese que
el robot de Pioneer posee una cámara montada en la parte superior, pero el Lego no.
Cuando se inicia la ejecución del Maze Simulator se crean dos ventanas: el simulador y
un teclado direccional.
El motor de simulación nos permite usar simultáneamente varias cámaras. Podemos
cambiar de una a otra presionando la tecla F8 en la ventana de simulación, o
seleccionando desde el menú Camera.
En el teclado direccional debemos introducir localhost como nombre del nodo remoto y
número de puerto 50001. Luego, podremos darle al botón Connect. Aparecerán dos
servicios en la lista. Elegiremos el simulateddifferentialdrive y luego pulsaremos el
botón Drive. A partir de ahí, podremos controlar el robot. También podemos hacer uso
de un joystick o controlador de juego. Debe ser compatible con DirectX, pero casi todos
los modelos modernos lo son.
Este programa es una versión modificada del anteriormente comentado tribot explorador
con ultrasonidos. En este caso, el robot Pioneer explora el entorno usando un medidor
de distancia por láser y construye un mapa sobre la marcha.
Toda la documentación necesaria, así como un breve tutorial para el manejo del
programa se encuentra disponible en la web de Trevor Taylor. Adicionalmente, el
profesor Taylor prestó su ayuda al autor de este proyecto durante varias semanas para
un mejor entendimiento de sus trabajos y solucionar los problemas debidos al uso de
diferentes versiones de MSRS y Windows Vista.
4.3.3 - Resumen
La ejecución de Microsoft Robotics Studio ha sido diseñada para facilitar la creación y
ejecución de aplicaciones de robótica a lo largo de una gran variedad de plataformas de
hardware. Para complacer los escenarios de robótica comunes, la ejecución suministra
una infraestructura basada en mensajes que organiza simultáneamente prototipos de alto
nivel así como un modelo de aplicación con un soporte adicional para la manipulación
de datos estructurada y la notificación de eventos. El resultado es un ambiente flexible
para desarrollar aplicaciones de robótica que se extienden desde las autónomas hasta las
aplicaciones controladas operadas en una gran variedad de escenarios.
El tiempo de ejecución de la simulación se diseñó para ser usados en una gran variedad
de escenarios avanzados con demandas altas de fidelidad, visualización, y
adaptabilidad. Al mismo tiempo, un usuario principiante con poca o ninguna
experiencia de programación puede hacer uso de la simulación, desarrollando
aplicaciones interesantes en un entorno similar al de los videojuegos. La integración del
motor PhysX de Ageia Technologies permite el uso de un producto de simulación de
física muy versátil y que se puede desarrollar constantemente hacia las características
que serán imprescindibles para la robótica. El motor de representación gráfica está
basado en el marco XNA de Microsoft.
Beneficios de la simulación
BENEFICIOS DE LA SIMULACIÓN
Bajos requerimientos
Microsoft Robotics Studio se acerca a la simulación por etapas, permitiendo que los
usuarios se las arreglen con la complejidad de forma gradual. De esta forma se puede
"depurar" un robot simulado empezando con elementos primitivos y requiriendo
solamente conocimientos básicos. Es sumamente conciso para añadir tal robot virtual en
un entorno, además de algunas formas simples con las que interactuar. Esto quiere decir
que depurar, incluso en la simulación, es muy simple.
Creación de prototipos
Los modelos físicos de un robot y los servicios de simulación que los usan pueden ser
desarrollados simultáneamente por muchas personas, exactamente de la misma manera
que muchas comunidades de desarrollo de software crean una "plataforma" que muchos
pueden usar y modificar sin preocuparse por estropear robots costosos y únicos.
Educación
La simulación puede ser una ayuda instructiva sumamente útil. Permite al usuario
escoger en qué se punto va a concentrar, fortalecer la complejidad, y controlar el
entorno. También se pueden introducir componentes que son prácticamente virtuales,
conceptos que no pueden ser fácilmente realizados pero que resultan útiles para el
aprendizaje.
Sistema de aprendizaje.
Otro aspecto muy interesante de la simulación es que puede ser usado mientras el robot
está en movimiento, como una herramienta predictiva o u módulo de aprendizaje
supervisado. Durante bastante tiempo, la simulación se ha usado simultáneamente con
un robot activo para realizar pruebas en el mundo de simulación que es actualizado en
tiempo real con los datos sensoriales. Luego, la simulación puede determinar
(probabilísticamente) si algo es una buena idea, "mirando hacia el futuro" entre varias
posibilidades.
DESVENTAJAS DE LA SIMULACIÓN Y SUS LIMITACIONES
Existe un gran número de efectos en el mundo real que todavía son muy difíciles de
modelar. Esto quiere decir que no siempre se podrá ser capaz de modelar todo con
exactitud, especialmente en tiempo real. Para ciertos casos, como los vehículos con
ruedas, el movimiento a velocidades bajas todavía es un desafío grande para los
mecanismos de simulación. El modelado de sónar es otro de los que presenta
dificultades.
Simulation Engine Service: responsable del progreso del tiempo en el motor físico de
la simulación.
Managed Physics Engine Wrapper: abstrae al programador del nivel bajo del motor
físico.
Native Physics Engine Library: permite la aceleración del hardware a través de AGEIA
PhysX Technology.
La envoltura de motor de física dirigido abstrae al usuario del motor de física de baja
intensidad (API), y provee una interfaz más concisa y adecuada para la simulación de
física.
La biblioteca del motor de física permite la aceleración de hardware a través del PhysX
SDK de AGEIA y el tiempo de ejecución, que soportan la aceleración del hardware a
través del procesador de PhysX de AGEIA.
Se puede decidir interactuar solamente con la API del motor de física dirigida si no se
desea visualización. Sin embargo, es altamente recomendado el uso del servicio del
motor de simulación y definir entidades personalizadas que desactiven la representación
gráfica. Esto simplifica la inspección y depuración del código de simulación
enormemente.
Los desarrolladores también podrán simular las aplicaciones robóticas por medio de
la utilización de modelos realistas en 3-D; Microsoft ha licenciado el buscador PhysX
de AGEIA, un pionero en la física de aceleración de hardware, que permite la
simulación de la física del mundo real a través de los modelos con robots. Las
simulaciones de PhysX también se pueden acelerar utilizando el hardware AGEIA.
-- White Box Robotics Inc. ha mostrado un escenario de telepresencia que cuenta con
914 PC-BOT. El 914 se controló a través de una interfaz web basada en Robotics
Studio, que es accesible de forma remota a través de una red.
Desarrollado por Gostai, una joven empresa francesa, pretende ser una alternativa a
Microsoft Robotics Studio (MRS). La aplicación funciona en Windows, y
próximamente en Mac y GNU/Linux. El SDK es de código abierto, está publicado bajo
licencia GNU GPL, y es independiente del sistema robótico empleado. Actualmente
puede probarse en simulaciones y de forma real en ciertos robots como por ejemplo, en
los nuevos NXT de Lego Mindstorms o en los robots aspiradora Roomba.
URBI es un lenguaje cuyo núcleo es de bajo nivel, diseñado para trabajar con motores y
sensores, aunque permite el desarrollo de comandos complejos de alto nivel. En su
diseño se ha cuidado la simplicidad, por lo que no existen arquitecturas complejas,
logrando que en pocos minutos se puedan realizar fácilmente programas de control
complejos. También permite la interconexión con otros lenguajes de programación,
como C++, Java, Python, Matlab y muchos otros.