Mellanvara för robotapplikationer
Utvecklare |
MetraLabs GmbH , Ilmenau tekniska universitet |
---|---|
Initial release | 27 april 2012 |
Stabil frisättning | 2020-04-26 / 26 april 2020
|
Skrivet i | C++ |
Operativ system | Linux , Windows |
Typ | Robotsvit , Middleware |
Licens |
Dubbellicens : GPL Version 3 , Professional Edition-licens |
Hemsida |
Middleware for Robotic Applications ( MIRA ) är ett plattformsoberoende, öppen källkodsramverk skrivet i C++ som tillhandahåller en middleware , flera basfunktioner och många verktyg för att utveckla och testa distribuerade programvarumoduler. Den fokuserar också på att enkelt skapa komplexa, dynamiska applikationer, samtidigt som dessa moduler återanvänds som plugins. Huvudsyftet med MIRA är utvecklingen av robotapplikationer , men eftersom det är designat för att möjliggöra typsäkert datautbyte mellan programvarumoduler som använder intra- och interprocesskommunikation är det inte begränsat till dessa typer av applikationer.
MIRA är utvecklat i ett samarbete mellan MetraLabs GmbH och Ilmenau University of Technology / Neuroinformatics and Cognitive Robotics Lab . Därför utformades MIRA för att uppfylla kraven för både kommersiella och utbildningsmässiga ändamål.
Funktioner
Allmän:
- lägger till introspektion / reflektion och serialisering till C++ med användning av endast C++ språkkonstruktioner (ett metaspråk eller metakompilatorer är inte nödvändiga)
- effektivt datautbyte mellan mjukvarumoduler
- den använda kommunikationstekniken baserad på "kanaler" tillåter alltid icke-blockerande åtkomst till överförd data
- för användaren är kommunikationen helt transparent, oavsett om mjukvarumodulerna är placerade inom samma process, olika processer eller på olika maskiner, kommer det underliggande transportskiktet att välja den snabba metoden för datatransport automatiskt
- förutom datautbyte via "kanaler" stöder MIRA Remote Procedure Calls (RPC) och Remote Method Invokation.
- MIRA är helt decentraliserat, därför finns det ingen central server eller central kommunikationshubb, vilket gör dess kommunikation mer robust och tillåter dess användning i multirobotapplikationer
Robotapplikationsspecifik:
- enkel konfiguration av mjukvarumoduler via konfigurationsfiler
- Parametrar för algoritmer kan modifieras live under körning för att påskynda felsöknings- och utvecklingsprocessen
- enorma mängder robotsensordata kan spelas in på band för senare uppspelning, här kan olika codecs användas för att komprimera data
Plattformar
MIRA stöder och testades framgångsrikt på följande plattformar:
- Linux – Ubuntu och derivat, OpenSuse , CentOS , Red Hat och Fedora
- Windows – Microsoft Windows XP , Windows Vista , Windows 7 (32bit och 64bit)
Applikationer som använder MIRA
MIRA används inom följande applikationer:
- Konrad och Suse - Guide Robots, som guidar besökare inom Zuse-byggnaden vid Ilmenau University of Technology
- Övervakning av luftkvaliteten i renrum på Infineon Technologies med hjälp av flera SCITOS G5-robotar
och projekt:
- CompanionAble - Integrated Cognitive Assistive & Domotic Companion Robotic System for Ability & Security
- Robot-Era - Implementering och integration av avancerade robotsystem och intelligenta miljöer i verkliga scenarier för den åldrande befolkningen
Användbarhet
Reflektion/Serialisering
class Data { int värde ; std :: karta < std :: sträng , std :: lista < int > > komplex ; Foo * ptr ; mall < typnamn Reflektor > void reflect ( Reflector & r ) { r . medlem ( "Värde" , värde , "en int-medlem" ) ; r . medlem ( "Komplex" , komplex , "en komplex medlem" ) ; r . member ( "Pekare" , ptr , "en pekare" ) ; } };
- godtyckliga komplexa datatyper kan serialiseras genom att lägga till en enkel reflektionsmetod till klassen som visas ovan
- efter dessa mindre ändringar kan objekten i klassen transporteras via interprocesskommunikation, kan användas som parametrar i konfigurationsfiler för mjukvarumoduler, kan spelas in i "Tape"-filer, etc.
Fjärrprocedursamtal
class MyClass { int compute ( const std :: list < float >& values ); mall < typnamn Reflektor > void reflect ( Reflector & r ) { r . metod ( "beräkna" , & MyClass :: beräkna , detta , "kommentar" ); } };
- godtyckliga metoder kan omvandlas till RPC-metoder genom att lägga till en rad kod inom reflect()-metoden. Det finns inget behov av att skriva omslag runt metoderna eller att använda metabeskrivningsspråk.