URBI ( ing. interfață universală de comportament în timp real - platformă software multiplatformă, în limbajul de programare C++ [ clarifica ] utilizat pentru dezvoltarea de aplicații, robotică și sisteme complexe. Platforma include un limbaj de scripting paralel și bazat pe evenimente - UrbiScript .
URBI este distribuit sub licența BSD , disponibilă pe GitHub .
UObject multiplatformă poate fi utilizat în scripturi pentru interacțiune și schimb de date. Se conectează la UrbiScript și sunt tratați ca nativi.
Componentele pot fi conectate la interpretul urbiscript sau pot rula ca proces independent în modul „la distanță”.
Urbiscript este un limbaj de scripting folosit în jocurile video. Poate fi folosit cu limbajul de programare C++ pentru a crea componente într-o singură structură funcțională.
CreareLimbajul urbiScript a fost dezvoltat din 2003 de Jean-Christophe Bailey la Laboratorul de Robotică Cognitivă ENSTA din Paris .
Scenariul este în prezent dezvoltat în mod activ în cooperare cu Gostai.
Exemplele arată modul în care ciclul de urmărire a „mingii” este implementat în urbiscript - obiecte motorii capului, obiecte pentru detectarea „bilei” (x și y în intervalul de la -1/2 la 1/2):
oricând (minge.vizibil) { headYaw.val += camera.xfov * ball.x & headPitch.val += camera.yfov * ball.y };Ori de câte ori este o buclă care este folosită pentru a executa codul asociat, atâta timp cât valoarea condițiilor este adevărată. De asemenea, folosit pentru a indica faptul că ambele comenzi ar trebui să înceapă în același timp și să ruleze în paralel .
„&” - o indicație pentru ambele comenzi, care trebuie să înceapă în același timp, în timp ce se execută în paralel .
la(vorbire.auzi(„bună ziua”)) { voce.spune ("Ce mai faci?") & robot.standup(); }at este un construct de eveniment care execută codul asociat o dată, când condiția devine adevărată:
myTag: în timp ce (adevărat) echo ("Aceasta este o buclă fără sfârșit"), la (buton.apăsat) myTag.stop;myTag este o etichetă care face posibilă întreruperea acestui cod dacă este necesar:
În exemplul de mai sus, există o virgulă la sfârșitul comenzii - indică execuția comenzii anterioare în fundal , permițând programului să continue să ruleze, în special, execuția următoarei la comandă .
Arhitectura componentelor UObject se bazează în prezent pe biblioteca C++ UObject permite dezvoltatorilor să interacționeze cu orice obiect C++ din Urbi, oferind o mapare în limbaj de scripting a metodelor și parametrilor selectați , rămânând în același timp codul C++. O alertă C++ poate fi setată pe oricare dintre atributele unui obiect pentru a notifica codul cu privire la orice modificări aduse acestor atribute prin urbiscript/Urbi.
UObject folosește șabloane C++ pentru a mapa în mod transparent orice metodă necesară la un motor de interfață.
C++ UObject poate fi folosit fie în modul plugin dacă este legat direct la nucleul Urbi în timpul compilării, fie în modul de încărcare dinamică. În primul caz, obiectul C++ are acces la memoria de bază a lui Urbi ca urmare a integrării. Acesta este utilizat în mod obișnuit pentru componentele critice în timp, cum ar fi driverele pentru motor sau senzori . Același UObject C++ poate fi, de asemenea, utilizat neschimbat ca componentă la distanță. În acest caz, va deveni un program independent care va fi executat cu adresa IP a serverului Urbi ca parametru. În ambele cazuri, obiectul va apărea transparent în urbiscript ca obiect nativ.