URBI

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 27 augusti 2019; kontroller kräver 11 redigeringar .

URBI ( eng.  universellt realtidsbeteendegränssnitt  - plattformsoberoende mjukvaruplattform, på programmeringsspråket C ++ [ förtydliga ] används för applikationsutveckling, robotteknik och komplexa system. Plattformen inkluderar ett parallellt och händelsebaserat skriptspråk - UrbiScript .

Licens

URBI distribueras under BSD-licensen , tillgänglig på GitHub .

Anslutning

Cross-platform UObject kan användas i skript för interaktion och datautbyte. De ansluter till UrbiScript och behandlas som infödda.

Komponenter kan länkas till urbiscript- tolken eller köras som en fristående process i "fjärrläge".

urbiScript

Urbiscript är ett skriptspråk som används i videospel. Det kan användas med programmeringsspråket C++ för att skapa komponenter till en enda funktionell struktur.

Skapande

Språket urbiScript har utvecklats sedan 2003 av Jean-Christophe Bailey vid ENSTA Cognitive Robotics Laboratory i Paris .

Manuset utvecklas för närvarande aktivt i samarbete med Gostai.

Nyckelfunktioner

  • Samtidighets- och händelsebaserad programmering
  • Prototypprogrammering (Prototypbaserad programmering)
  • C++ stil syntax
  • C++ komponentarkitektur (UObject) med möjlighet att länka objekt eller köra dem på distans
  • klient-server- arkitektur
  • Klientgränssnitt för Java och Matlab (Urbi SDK)
  • Plattformsövergripande : Linux , Mac , Windows och andra. Inbäddad, URBI kan köras på en mängd olika processorer: x86 , ARM , MIPS , PowerPC , etc.
  • Taggbara kommandon för att kontrollera flödesexekveringen
  • sedan maj 2010 har Urbi varit en produkt med öppen källkod ( GNU AGPL v3-licens).
  • Urbi kan samverka med ROS från Willow Garage .
  • Urbi kan enkelt användas som en C++-mellanvara, utan urbiscript. Att använda urbiscript kräver dock att man lär sig ett relativt nytt språk, inte så mycket när det gäller syntax (som liknar C/C++), utan i termer av parallell-/händelseparadigmet.
  • Webots  är en professionell robotsimulator som kan fungera med Urbi.
  • Robot visuell kontrollmjukvara, från Gostai Studio och Gostai Lab , men den är proprietär och dyr.

Exempel

Exemplen visar hur "boll"-spårningscykeln implementeras i urbiscript - huvudmotorobjekt, objekt för att detektera "bollen" (x och y i intervallet från -1/2 till 1/2):

när som helst (ball.visible) { headYaw.val += camera.xfov * ball.x & headPitch.val += camera.yfov * ball.y };

Whenever  är en loop som används för att exekvera den associerade koden så länge som värdet på villkoren är sant. Används även för att indikera att båda kommandona ska starta samtidigt och köras parallellt .

"&" - en indikation för båda kommandona, som måste börja samtidigt, medan de körs parallellt .

at(speech.hear("hej")) { voice.say("Hur mår du?") & robot.standup(); }

at  är en händelsekonstruktion som exekverar den associerade koden en gång, när villkoret blir sant:

myTag: medan (sant) echo("Detta är en aldrig sinande loop"), vid (knapp.tryckt) myTag.stop;

myTag är en tagg som gör det möjligt att pausa den här koden vid behov:

I exemplet ovan finns det ett kommatecken i slutet av kommandot - indikerar exekveringen av det föregående kommandot i bakgrunden , vilket gör att programmet kan fortsätta att köra, i synnerhet exekveringen av nästa kommando .

Komponentarkitektur för UObject

UObject- komponentarkitekturen är för närvarande baserad på C++-biblioteket UObject tillåter utvecklare att interagera med vilket C++-objekt som helst i Urbi genom att tillhandahålla en skriptspråksmappning av valda metoder och parametrar samtidigt som C++-kod finns kvar. En C++-varning kan ställas in på något av ett objekts attribut för att meddela kod om eventuella ändringar av dessa attribut av urbiscript/Urbi.

UObject använder C++-mallar för att transparent mappa alla nödvändiga metoder till en gränssnittsmotor.

C++ UObject kan användas antingen i plugin -läge om det är direkt länkat till Urbi-kärnan vid kompilering eller i dynamiskt laddningsläge. I det första fallet får C++-objektet tillgång till Urbis kärnminne som ett resultat av integrationen. Detta används vanligtvis för tidskritiska komponenter som motor- eller sensordrivrutiner . Samma C++ UObject kan också användas oförändrat som en fjärrkomponent. I det här fallet kommer det att bli ett fristående program som kommer att köras med Urbi-serverns IP-adress som parameter. I båda fallen kommer objektet transparent att visas i urbiscript som dess ursprungliga objekt.

Befintliga UObjects

Skrip som stöds

Länkar