Middleware for Robotic Applications (MIRA) is a cross-platform, open-source software framework written in C++ that provides middleware, base functionalities, and tools for developing distributed software modules. It focuses on creating complex, dynamic applications by reusing modules as plugins, primarily for robotic applications, though it supports type-safe data exchange beyond robotics. Developed collaboratively by MetraLabs GmbH and the Ilmenau University of Technology/Neuroinformatics and Cognitive Robotics Lab, MIRA serves both commercial and educational purposes, making it a versatile solution for distributed software development in robotics and related fields.
Features
General:
- adds introspection/reflection and serialization to C++ with the usage of C++ language-constructs only (a meta-language or metacompilers are not necessary)
- efficient data exchange between software modules
- the used communication technique based on "channels" always allows non-blocking access to the transferred data 2
- for the user the communication is fully transparent no matter if the software modules are located within the same process, different processes or on different machines, the underlying transport layer will choose the fasted method for data transportation automatically3
- beside data exchange via "channels", MIRA supports Remote Procedure Calls (RPC) and Remote Method Invokation.
- MIRA is fully decentralized, hence there is no central server or central communication hub, making its communication more robust and allows its usage in multi-robot applications
Robotic Application specific:
- easy configuration of software modules via configuration files
- parameters of algorithms can be modified live at runtime to speed up the debugging and development process
- huge amounts of robot sensor data can be recorded in Tapes for later playback, here different codecs can be used to compress the data
Platforms
MIRA supports and was successfully tested on the following platforms:
- Linux – Ubuntu and derivates, OpenSuse, CentOS, Red Hat and Fedora4
- Windows – Microsoft Windows XP, Windows Vista, Windows 7 (32bit and 64bit)5
Applications using MIRA
MIRA is used within the following applications:
- Konrad and Suse - Guide Robots, that guide visitors within the Zuse-Building of the Ilmenau University of Technology67
- Monitoring the air quality within clean rooms at Infineon Technologies using several SCITOS G5 robots89
and projects:
- CompanionAble - Integrated Cognitive Assistive & Domotic Companion Robotic System for Ability & Security10
- Robot-Era - Implementation and integration of advanced robotic systems and intelligent environments in real scenarios for the ageing population11
Usability
Reflection/Serialization
class Data { int value; std::map<std::string,std::list<int> > complex; Foo* ptr; template <typename Reflector> void reflect(Reflector& r) { r.member("Value", value, "an int member"); r.member("Complex", complex, "a complex member"); r.member("Pointer", ptr, "a pointer pointer"); } };- arbitrary complex data types can be serialized by adding a simple reflect method to the class as shown above
- after these minor changes, the objects of the class can be transported via inter-process communication, can be used as parameters in configuration files for software modules, can be recorded in "Tape" files, etc.
Remote Procedure Calls
class MyClass { int compute(const std::list<float>& values); template <typename Reflector> void reflect(Reflector& r) { r.method("compute", &MyClass::compute, this, "comment"); } };- arbitrary methods can be turned into RPC methods by adding one line of code within the reflect() method. There is no need to write wrappers around the methods or to use meta description languages.
See also
External links
References
"MIRA Project Website". http://www.mira-project.org ↩
Einhorn, Erik; Langner, Tim; Stricker, Ronny; Martin, Christian; Gross, Horst-Michael (2012). "MIRA - middleware for robotic applications". 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems. pp. 2591–2598. doi:10.1109/IROS.2012.6385959. ISBN 978-1-4673-1736-8. S2CID 16389868. 978-1-4673-1736-8 ↩
Einhorn, Erik; Langner, Tim; Stricker, Ronny; Martin, Christian; Gross, Horst-Michael (2012). "MIRA - middleware for robotic applications". 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems. pp. 2591–2598. doi:10.1109/IROS.2012.6385959. ISBN 978-1-4673-1736-8. S2CID 16389868. 978-1-4673-1736-8 ↩
"MIRA Documentation - Linux Support". http://www.mira-project.org/MIRA-doc/RequirementsLinux.html ↩
"MIRA Documentation - Windows Support". http://www.mira-project.org/MIRA-doc/InstallationPage.html ↩
"TU Ilmenau: Konrad-Zuse-Bau eröffnet". Thüringer Allgemeine Zeitung. http://ilmenau.thueringer-allgemeine.de/web/lokal/leben/detail/-/specific/TU-Ilmenau-Konrad-Zuse-Bau-eroeffnet-2021140944 ↩
Stricker, Ronny; et al. (2012). "Konrad and Suse, Two Robots Guiding Visitors in a University Building". Autonomous Mobile Systems 2012. Informatik aktuell. pp. 49–58. doi:10.1007/978-3-642-32217-4_6. ISBN 978-3-642-32216-7. S2CID 18149753. 978-3-642-32216-7 ↩
"Ilmenauer Oberbürgermeister ließ sich von Roboter den Weg zeigen". Thüringer Allgemeine Zeitung. http://ilmenau.thueringer-allgemeine.de/web/lokal/wirtschaft/detail/-/specific/Ilmenauer-Oberbuergermeister-liess-sich-von-Roboter-den-Weg-zeigen-496313255 ↩
"Der Markt bietet hohe Potenziale für mobile Robotik". TRIA. http://www.tria-online.eu/index.php/news-a-info/highlights/969-metra ↩
"CompanionAble". http://www.companionable.net/ ↩
"Robot-Era". http://www.robot-era.eu/robotera/ ↩