URBI

Urbi
Oryginalni autorzy Jean-Christophe Baillie
Deweloperzy Gostai, Aldebaran Robotics
Pierwsze wydanie 2003 ; 20 lat temu ( 2003 )
Wersja stabilna
2.7.4 / 17 listopada 2011 ; 11 lat temu ( 17.11.2011 )
Magazyn
Napisane w urbiscript , C++
System operacyjny WindowsNT , macOS , Linux
Typ Pakiet robotyki , system operacyjny , biblioteka
Licencja BSD

Urbi to wieloplatformowa platforma obliczeniowa typu open source napisana w języku C++ , używana do tworzenia aplikacji dla robotyki i złożonych systemów. Urbi jest oparty na rozproszonej architekturze komponentów C++ UObject. Obejmuje to również orkiestrację urbiscript język, który jest równoległym i sterowanym zdarzeniami językiem skryptowym. Komponenty UObject można podłączyć do urbiscript i pojawiać się jako natywne obiekty, które można napisać w skrypcie, aby określić ich interakcje i wymianę danych. UObjects mogą być połączone z interpreterem urbiscript lub wykonywane jako autonomiczne procesy w trybie „zdalnym”.

Język urbiscript

Język urbiscript został stworzony w 2003 roku przez Jeana-Christophe'a Bailliego w Laboratorium Robotyki Kognitywnej ENSTA w Paryżu. Był aktywnie i dalej rozwijany w branży za pośrednictwem firmy Gostai założonej w 2006 roku. Obecnie jest to projekt typu open source, z licencją BSD, dostępny na GitHub.

Język urbiscript można najlepiej opisać jako język skryptowy orkiestracji: podobnie jak Lua w grach wideo, urbiscript może być używany do sklejania komponentów C++ w zachowanie funkcjonalne, część algorytmiczna intensywnie korzystająca z procesora jest pozostawiona C++, a część dotycząca skryptów behawioralnych pozostawiona do języka skryptowego, który jest bardziej elastyczny, łatwy w utrzymaniu i umożliwia dynamiczną interakcję podczas wykonywania programu. Jako język orkiestracji, urbiscript wnosi również do programu kilka przydatnych abstrakcji dzięki równoległości i programowaniu opartemu na zdarzeniach jako część semantyki języka. Skryptowanie równoległych zachowań i reakcji na zdarzenia to podstawowe wymagania większości zrobotyzowanych i złożonych aplikacji AI, dlatego urbiscript (i cała platforma Urbi) doskonale nadaje się do takich aplikacji.

Atrybuty języka

  • Równoległość i programowanie oparte na zdarzeniach
  • Programowanie oparte na prototypach
  • C++ jak składnia
  • Javie i C++ (UObject) z możliwością łączenia obiektów lub ich zdalnego uruchamiania
  • Architektura modelu klient-serwer
  • Wieloplatformowość: Linux, Macintosh, Windows, inne.
  • Wbudowany Urbi może działać na różnych procesorach: x86, ARM, MIPS, powerPC itp.
  • Kontrola zadań za pomocą „tagów”

Funkcje

Przykłady

Poniższy przykład pokazuje, jak napisać pętlę akcji/percepcji śledzenia piłki w urbiscript: headYaw/headPitch to dwa obiekty motoryczne, a ball to obiekt wykrywający piłkę (zakres x i y od -1/2 do 1/2):

   
  
            
    
          
   kiedykolwiek  (  piłka  .  widoczna  )  {  headYaw  .  val  +=  kamera  .  xfov  *  piłka  .  x  &  headPitch  .  val  +=  kamera  .  yfov  *  piłka  .  y  }; 

when jest używany do wyzwalania fragmentu kodu w pętlach, o ile powiązany warunek jest prawdziwy. Znak & służy do określenia, że ​​oba polecenia powinny być uruchamiane w tym samym czasie, a więc działać równolegle.

Inne godne uwagi konstrukcje sterowane zdarzeniami obejmują at , które wyzwalają powiązany kod raz, gdy zdarzenie jest wyzwalane:

   
  
     
    
   w  (  mowa  .  słyszeć  ?(  "cześć"  ))  {  głos  .  powiedz  (  „Jak się masz?”  )  &  robot  .  wstawanie  ();  } 

Każde polecenie lub grupę poleceń można otagować, co umożliwia późniejsze zatrzymanie go w razie potrzeby:

  
     
      
   
     myTag  :  while  (  true  )  echo  (  "To jest niekończąca się pętla"  ),  at  (  przycisk  .  wciśnięty  )  myTag  .  zatrzymać  ; 

Uwaga w powyższym przykładzie przecinek na końcu polecenia. Umieści poprzednie polecenie w tle, umożliwiając kontynuację wykonywania przepływu, w szczególności wykonanie następnego polecenia „at”.

Architektura komponentu UObject

Architektura komponentów UObject umożliwia programistom łączenie dowolnych obiektów Java/C++ w Urbi, dzięki czemu wybrane metody i atrybuty są widoczne w urbiscript, podczas gdy w rzeczywistości jest to skompilowany kod. Specjalne powiadomienia można ustawić dla dowolnego atrybutu obiektu, aby powiadomić stronę C++ o wszelkich zmianach tych atrybutów po stronie urbiscript/Urbi.

UObject używa szablonów C++ do przejrzystego mapowania dowolnej żądanej metody na maszynę interfejsu, która zajmuje się sprawdzaniem typu.

Obiekt UObject może być używany w trybie podłączonym, jeśli jest bezpośrednio połączony z Urbi w czasie kompilacji lub przy ładowaniu dynamicznym. W takim przypadku obiekt C++ bezpośrednio współdzieli pamięć Urbi, co skutkuje wydajną integracją. Jest to zwykle używane w przypadku komponentów krytycznych czasowo, takich jak sterowniki silników lub czujników. Ten sam UObject może być również używany bez modyfikacji jako komponent zdalny. W takim przypadku stanie się autonomicznym programem do wykonania z adresem IP serwera Urbi jako parametrem. W obu przypadkach obiekt pojawi się w urbiscript jako natywny obiekt urbiscript.

ekosystem

Symulatory robotyki kompatybilne z Urbi

Roboty miejskie

Wydany:

Ogłoszony:

Zobacz też

Linki zewnętrzne