URBI

Urbi
Originalförfattare Jean-Christophe Baillie
Utvecklare Gostai, Aldebaran Robotics
Initial release 2003 ; 20 år sedan ( 2003 )
Stabil frisättning
2.7.4 / 17 november 2011 ; för 11 år sedan ( 2011-11-17 )
Förvar
Skrivet i urbiscript , C++
Operativ system Windows NT , macOS , Linux
Typ Robotsvit , operativsystem , bibliotek
Licens BSD

Urbi är en plattformsoberoende mjukvaruplattform med öppen källkod skriven i C++ som används för att utveckla applikationer för robotik och komplexa system. Urbi är baserad på UObject-distribuerade C++-komponentarkitekturen. Det inkluderar också urbiscript- orkestreringsspråket som är ett parallellt och händelsestyrt manusspråk. UObject-komponenter kan kopplas in i urbiscript och visas som inbyggda objekt som kan skriptas för att specificera deras interaktioner och datautbyten. UObjects kan länkas till urbiscript-tolken eller exekveras som autonoma processer i "fjärrläge".

Det urbana språket

Urbiscript-språket skapades 2003 av Jean-Christophe Baillie i Cognitive Robotics Lab i ENSTA , Paris. Det har aktivt och vidareutvecklats i branschen genom företaget Gostai som grundades 2006. Det är nu ett projekt med öppen källkod, med en BSD-licens, tillgängligt på GitHub.

Urbiscript-språket kan bäst beskrivas som ett orkestreringsskriptspråk: precis som Lua i videospel kan urbiscript användas för att limma ihop C++-komponenter till ett funktionellt beteende, den CPU-intensiva algoritmdelen lämnas till C++ och beteendeskriptdelen lämnas till skriptspråket som är mer flexibelt, lätt att underhålla och tillåter dynamisk interaktion under programkörning. Som ett orkestreringsspråk tillför urbiscript också några användbara abstraktioner till ett program genom att ha parallellism och händelsebaserad programmering som en del av språksemantiken. Skriptering av parallella beteenden och reaktioner på händelser är kärnkraven för de flesta robotbaserade och komplexa AI-applikationer, därför är urbiscript (och hela Urbi-plattformen) väl lämpad för sådana applikationer.

Språkattribut

  • Parallellism och händelsebaserad programmering
  • Prototypbaserad programmering
  • C++ som syntax
  • Java- och C++-baserad komponentarkitektur (UObject) med möjlighet att länka objekt eller köra dem på distans
  • Klient–server modellarkitektur
  • Cross-platform: Linux, Macintosh, Windows, andra.
  • Urbi kan bäddas in på olika processorer: x86, ARM, MIPS, powerPC, etc.
  • Jobbkontroll via "taggar"

Funktioner

Exempel

Exemplet nedan visar hur man skriver en bollspårningshandling/perceptionsslinga i urbiscript: headYaw/headPitch är två motoriska objekt och bollen är bolldetekteringsobjektet (x och y sträcker sig från -1/2 till 1/2):

   
  
            
    
          
   när som helst  (  boll  .  synlig  )  {  headYaw  .  val  +=  kamera  .  xfov  *  boll  .  x  &  headPitch  .  val  +=  kamera  .  yfov  *  boll  .  y  }; 

när som helst används för att trigga en kodbit i loopar så länge det associerade villkoret är sant. Tecknet & används för att specificera att båda kommandona ska starta samtidigt och därmed köras parallellt.

Andra anmärkningsvärda händelsedrivna konstruktioner inkluderar at , som utlöser den associerade koden en gång när händelsen utlöses:

   
  
     
    
   at  (  tal  .  höra  ?(  "hej"  ))  {  röst  .  säga  (  "Hur mår du?"  )  &  robot  .  standup  ();  } 

Varje kommando eller grupp av kommandon kan märkas, vilket ger ett sätt att stoppa det senare om det behövs:

  
     
      
   
     myTag  :  medan  (  true  )  echo  (  "Detta är en slinga som aldrig tar slut"  ),  vid  (  knapp  .  nedtryckt  )  myTag  .  stoppa  ; 

Notera i exemplet ovan kommatecken i slutet av kommandot. Det kommer att placera det föregående kommandot i bakgrunden, vilket gör att flödesexekveringen kan fortsätta, i synnerhet nästa "at"-kommando som ska utföras.

UObject komponent arkitektur

UObject-komponentarkitekturen tillåter utvecklare att gränssnitta alla Java/C++-objekt inom Urbi, vilket gör utvalda metoder och attribut synliga i urbiscript, samtidigt som de i själva verket kompileras kod. Särskilda meddelanden kan ställas in på något av objektets attribut för att meddela C++-sidan om eventuella ändringar på dessa attribut på urbiscript/Urbi-sidan.

UObject använder C++-mallar för att transparent mappa alla begärda metoder till ett gränssnittsmaskineri som tar hand om typkontrollen.

Ett UObject kan användas i pluggat läge om det är direkt länkat till Urbi vid kompilering eller med dynamisk laddning. I så fall delar C++-objektet Urbi-minnet direkt, vilket resulterar i effektiv integration. Detta används vanligtvis för tidskritiska komponenter som motor- eller sensordrivrutiner. Samma UObject kan även användas utan ändringar som en fjärrkomponent. I så fall kommer det att bli ett autonomt program som ska köras med Urbi-serverns IP-adress som parameter. I båda fallen kommer objektet transparent att visas i urbiscript som ett inbyggt urbiscript-objekt.

Ekosystem

Robotsimulatorer kompatibla med Urbi

  • Webots är den officiella robotsimulatorn som är kompatibel med Urbi.
  • Player/Stage- integration har rapporterats, även om den inte är släppt för närvarande.

Urbi-fied robotar

Släppte:

Meddelat:

Se även

externa länkar