Mellanvara för robotapplikationer

MIRA
Utvecklare
MetraLabs GmbH , Ilmenau tekniska universitet
Initial release 27 april 2012 ; 10 år sedan ( 2012-04-27 )
Stabil frisättning
2020-04-26 / 26 april 2020 ; för 2 år sedan ( 2020-04-26 )
Skrivet i C++
Operativ system Linux , Windows
Typ Robotsvit , Middleware
Licens

Dubbellicens : GPL Version 3 , Professional Edition-licens
Hemsida www .mira-project .org

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
Skärmdump av MIRACenter

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:

Applikationer som använder MIRA

MIRA används inom följande applikationer:

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.

externa länkar