A medida que los sistemas robóticos se vuelven más funcionales, la necesidad de utilizar medios para obtener una visión general en tiempo real de la conectividad entre las operaciones, así como la necesidad de supervisión, adquisición y manipulación de datos sobre el mismo sistema se hace cada vez más necesaria. Para saciar estas y otras necesidades empleamos las HMI’s (human-machine interface) como medio de interacción entre el usuario final y el sistema.
El diseño de una HMI debe estar centrado en el usuario, debe ser un medio abierto y sencillo que facilite la interacción, además de simplificar la tarea de las actividad que éste realiza. Su objetivo fundamental es ocultar al usuario la complejidad del sistema sobre el que trabaja ofreciéndole una herramienta que mejore su usabilidad. Podemos encontrarlas de diversos tipos y en diversos lugares, desde un simple LED que nos indique el estado de un dispositivo hasta la propia interfaz que utilizamos para realizar transacciones en un cajero.
En robótica las HMI’s pueden llegar a tener tanta importancia como el propio sistema robótico. De poco sirve tener un complejo sistema si el usuario u operario que debe hacerlo funcionar es incapaz de ello. La usabilidad es otro de los factores que hace de ROS[1] una apuesta firme en este campo. Haciendo uso de este framework podemos encontrar dos herramientas que nos facilitan enormemente esta interacción mediante cómodas y editables interfaces gráficas: Rviz[2] y ROS-GUI[3]. Ambas interfaces, además de estar dotadas de un visualizador de entornos 3D, nos permiten la visualización, medición e interacción con el robot así como con todo su entorno. Basadas en una arquitectura de plugins ofrecen la posibilidad de no sólo desarrollar nuestras propias herramientas sino también reutilizar las de otros.
Tal vez para determinados sistemas robóticos estas dos interfaces podrían no suplir las necesidades requeridas. Pese a esto, la sencillez de la que se vale ROS a la hora de leer el estado de sus componentes o interaccionar con ellos nos allana este camino permitiendo la creación de HMI’s personalizables que se adapten a cualquiera de nuestros requisitos.
Mediante la suscripción a ‘topics’[4] podemos hacer una lectura de los valores actuales de un determinado componente sin necesidad de programar a bajo nivel, permitiendo así que el desarrollador de la HMI no requiera conocimientos previos del componente sobre el cual trabaja, sólo conocimientos básicos en ROS. De la misma forma, publicando sobre un ‘topic’ podemos ejecutar acciones sobre un componente (por ejemplo, podemos ordenar a un robot móvil que avance X metros en línea recta a una velocidad Y m/s) o bien llamar a un servicio[5] que inicie una determinada acción (por ejemplo, reiniciar el contador de algún componente).
Sin necesidad de conocer detalles sobre el hardware con el que se trabaja, el programador puede desarrollar una HMI capaz de satisfacer las necesidades de cualquier sistema. Por otro lado, gracias a frameworks de programación como wxWidgets[6] o Qt[7], el programador puede ir un poco más allá de las HMI’s creando complejas y vistosas interfaces gráficas de usuario (GUI’s) que hagan más agradable la interacción humano-máquina. Las posibilidades son muchas y muy variadas, desde HMI’s básicas limitadas a mostrar valores de ciertos componentes (sensores de presión, temperatura, luminosidad, proximidad, etc) hasta sofisticadas GUI’s que nos permitan tanto teleoperar un robot como monitorizar el estado de cada uno de sus componentes.
Podemos encontrar muchos ejemplos de estas interfaces en los numerosos paquetes presentes en los repositorios de ROS, algunos como el dashboard[8] del robot PR2[9] proporciona información detallada acerca de la ‘salud’ del robot. Cada vez que el PR2 no se comporte como se supone que debería hacerlo, inspeccionar su dashboard sería la práctica correcta. Existen también otros robots que emplean un dashboard, por ejemplo el dashboard[10] del Care-O-Bot3[11] es un panel de control para mover el robot. A través de él, puedes mover diferentes partes de su cuerpo a posiciones predefinidas. Otro tipo de interfaces como la interfaz de usuario srs_ui_pro[12] desarrollada por Robotnik para el proyecto SRS[13], está pensada para ser el intermediario entre el robot Care-O-Bot3 y un teleoperador. Por otro lado, en la última distribución de ROS (llamada Groovy[14]) podemos encontrar la herramienta rqt[15] la cual es un framework que implementa en forma de plugins varias herramientas GUI que en versiones anteriores de ROS funcionaban de forma independiente. Es posible ejecutar todas las herramientas GUI existentes como ventanas acopladas dentro de rqt (incluso la nombrada Rviz). Evidentemente, cada herramienta puede lanzarse de forma independiente, sin embargo rqt hace más cómodo la gestión de todas herramientas al compactarlas en una.
Interfaz de usuario srs_ui_pro desarrollada mediante wxWidgets.
ROS pretende ser y es una apuesta firme en el desarrollo de sistemas robóticos, por ello, no ha escatimado en algo tan importante como la usabilidad. Como ya hemos comprobado, disponemos de medios más que suficientes para la creación de HMI’s, bien utilizando las interfaces estándar ofrecidas (Rviz y ROS-GUI) o bien desarrollando desde cero las nuestras propias.
—
[1] http://www.ros.org
[2] http://ros.org/wiki/rviz
[3] http://www.willowgarage.com/blog/2012/10/21/ros-gui
[4] http://www.ros.org/wiki/Topics
[5] http://www.ros.org/wiki/Services
[6] http://www.wxwidgets.org/
[8] http://pr2support.willowgarage.com/wiki/Tutorials/Dashboard
[9] http://www.willowgarage.com/pages/pr2/overview
[10] http://www.ros.org/wiki/Robots/Care-O-bot/Tutorials/Dashboard
[11] http://www.care-o-bot.de/english/
[12] http://www.ros.org/wiki/srs_ui_pro
[13] http://srs-project.eu/
[14] http://www.ros.org/wiki/groovy
[15] http://ros.org/wiki/rqt