Diario de DIA4RA: la máquina de estados

robot aida proyecto dia4ra máquina de estados

Retomamos los progresos del robot AIDA, donde lo habíamos dejado el año pasado: en la máquina de estados.

Ya han sido varios los post en los que se menciona el desarrollo de algún modelo concreto: el de reconocimiento de objetos basado en la TensorFlow Object Detection API, el de reconocimiento de caras, Speech2Text…A estas alturas está clara la necesidad de utilizar ROS como plataforma para operar con los sensores del robot (cámaras y micrófonos por el momento). Esto es debido a que, entre otras ventajas, nos proporciona la posibilidad de utilizar aquellos buffers (que, recordemos, se llaman topics) sobre los cuales se pueden leer los datos que en ellos se publican o publicarlos, de manera que un determinado modelo pueda volcar su salida en un determinado topic, de tal modo que otro esté a la escucha y, si lee un determinado mensaje, actúe de cierta manera. Con todo esto, parece que la comunicación entre los modelos se puede afrontar gracias a los topics.

Orquestando modelos

Pero ¿cómo se orquestan los modelos? Es decir, ¿de qué manera se determina cuándo se tiene que activar el modelo de Speech2Text o el modelo de reconocimiento de caras? No se puede pensar en tener constantemente todos los modelos cargados y listos para predecir cualquier entrada que reciban. Esto es porque, por un lado, puede ser que no siempre nos interese que un modelo esté activo y, por otro lado, el tiempo que un modelo está prediciendo cuesta dinero (no olvidemos que cada modelo ha de correr en una GPU y únicamente disponemos de tres físicas, con lo que sí o sí hay que recurrir al Cloud).

La arquitectura BICA

Aquí es donde entra la arquitectura BICA, que nos permite modelar el comportamiento de AIDA a través de una FSM (máquina de estados finita, más información sobre esto en el anterior post sobre AIDA). Supongamos un escenario en el que tengamos tres posibles estados: INICIO, TRÁNSITO y TERAPIA y que las transiciones posibles sean:

  • INICIO -> TRÁNSITO
  • TRÁNSITO -> INICIO
  • TRÁNSITO -> TERAPIA
  • TERAPIA -> TRÁNSITO

La máquina de estados que modelaría esta situación sería justo la que se muestra a continuación. Lo mejor de todo es que los compañeros de la URJC han desarrollado un plugin integrado con la interfaz gráfica de usuario de ROS. Con él, se puede dibujar directamente el grafo, definiendo los estados y las transiciones posibles entre ellos:

robot aida proyecto dia4ra máquina de estados

A la par que definimos la máquina de estados gráficamente, por debajo se generan un conjunto de ficheros en C++ que nos permitirán, entre otras funcionalidades: ejecutar la máquina de estados, definir qué condiciones se tienen que dar para que se produzca la transición de un estado a otro y también gestionar qué ocurre cuando se produce la transición de un estado a otro y de qué modo ocurre (por ejemplo, iterativamente, o, por el contrario, solo una vez al entrar en el nuevo estado).

Es en este último apartado donde la arquitectura BICA nos permitirá activar y desactivar modelos, tratandolos como dependencias de cada estado. Supongamos por ejemplo que se quisiera activar el modelo actual de detección de voz desde el estado INICIO y también que, cuando se llegue al estado TERAPIA, se active el modelo de reconocimiento de caras:

robot aida proyecto dia4ra máquina de estados

Cómo conseguirlo

Para conseguir esto habría modificar el código generado de tal manera que, en el momento de arrancar el estado INICIO, se vincule a él sound_detector

robot aida proyecto dia4ra máquina de estados

En el caso del modelo de reconocimiento facial, se activará cuando se llegue al modo TERAPIA

robot aida proyecto dia4ra máquina de estadosSe puede ver cómo los modelos se gestionan como si fueran dependencias asociadas a los distintos estados y que se pueden añadir (addDependency) o quitar (removeDependency) para ajustarlas al diseño.

¿Te has dado cuenta del cambio?

Seguro que los que lleváis más tiempo siguiendo el blog, os habréis dado cuenta de que el modelo de reconocimiento facial (re_fr) ahora se le ha añadido el sufijo “_bica”, la razón de esto es que los modelos que en un primer momento se implementaron como nodos de ROS, ahora se han tenido que reimplementar como componentes BICA. Con todo, uno de los melones más grandes que queda por abrir es el de definir las condiciones que se tienen que dar para que se produzca la transición de un estado a otro…veremos cómo se aborda esto.

¡Permaneced atentos!

dia4ra cdtiEl proyecto empresarial de DATAHACK CONSULTING SL., denominado “DESARROLLO DE INTELIGENCIA ARTIFICIAL EN ROBOTS APLICADOS AL TRATAMIENTO DEL ALZHEIMER Y LA DEMENCIA” y número de expediente 00104725 / SNEO-20171211 ha sido subvencionado por el CENTRO PARA EL DESARROLLO TECNOLÓGICO INDUSTRIAL (CDTI)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *