En esta Tesis se presenta Nerve, un middleware para sistemas distribuidos y robótica basado en la librería de comunicaciones multiplataforma ACE y el en estándar the Data Distribution Service (DDS). Nerve garantiza la escalabilidad y las calidades de servico (QoS) necesarias para sistemas de tiempo real, pero también permite a los desarrolladores reutilizar la mayoría del código existente y ofrecerles los mecanismos necesarios para desplegar partes de dicho código en tareas distribuidas. Además, Nerve ofrece una infraestructura de monitorización y adaptación. La infraestructura de monitorización permite tener acceso a las métricas del sistema (CPU, memoria, etc.) y a las métricas de usuario (QoS, variables utilizadas en algoritmos, etc.). Para ello se describe un mecanismo de instrumentación automática de código utilizando las herramientas basadas en los compiladores LLVM. Con respecto a la infraestructura de adaptación, ésta se encarga de modificar las QoS para obtener el mejor comportamiento posible del robot con los recursos disponibles en tiempo de ejecución.
También se describen la implementación e integración en Nerve de un mecanismo de comunicaciones basado en petición/respuesta que, junto al original basado en la publicación/suscripción, permite dar soporte al modelo cliente/servidor. Este modelo clásico de comunicaciones se ha utilizado con éxito para integrar Nerve en otros frameworks existentes para robótica.
Finalmente, los beneficios del uso de Nerve se verán reflejados a través de su aplicación en sistemas robóticos reales.Los robots sociales son robots autónomos que trabajan en entornos sociales reales donde tienen que interactuar con seres humanos e incluso con otros robots. La implementación de estos sistemas robóticos está moviendose hacia el uso de frameworks basados en componentes, los cuales se centran en la reusabilidad y en la evolución del software. De esta manera, el software de un robot está compuesto por entidades binarias (componentes) distribuidos que se comunican entre sí utilizando un middleware de comunicaciones, que permite abstraer al desarrollador de los detalles de bajo nivel y comunicar sistemas heterogéneos. Si embargo, el uso de estos frameworks basados en componentes y middleware para robótica implica una curva de aprendizaje muy pronunciada, además de introducir nuevos desafíos a los desarrolladores para poder satisfacer los requisitos de alto rendimiento y otras calidades de servicio. El análisis y la verificación de esas propiedades no funcionales debe incluir formas de monitorizar los diferentes valores del sistema. Normalmente, las herramientas de monitorización para robótica incluyen sólo información sobre el estado de los componentes y la acción típica a realizar, en caso de detectar que no se satisface algún requisito, es parar el software, lo que suele implicar parar el robot. Obviamente, este escenario no es la mejor opción para los robots sociales, a menos que introduzcamos un mecanismo que garantice que el sistema de control del robot se autoadaptará y reparará él mismo si es necesario (y posible). De esta forma, aparece un nuevo requisito: un sistema de control de un robot debe de ser tolerante a fallos, permitiendo auto-adaptarse, es decir: detectar cambios significativos, decidir cómo reaccionar, y actuar para ejecutar tales decisiones