URBI

URBI (англ. universal real-time behavior interface — кросс-платформенное приложение, на языке программирования C++ [прояснить], используемое для разработки приложений, робототехники и сложных вычислений и задач. Платформа включает в себя параллельный и событийный скриптовый языкUrbiScript.

Лицензия править

URBI распространяется под лицензией BSD, доступной на GitHub.

Подключение править

UObject кросс-платформы можно использовать в сценариях для взаимодействия и обмена данными. Они подключаются к UrbiScript и взаимодействуют как «родные».

Компоненты могут быть связаны с интерпретатором UrbiScript, либо работать, как автономный процесс в «удаленном» режиме.

UrbiScript править

UrbiScript — это скриптовый язык в видеоиграх. Он может использоваться с языком программирования C++ для создания компонентов в единую функциональную структуру.

Создание править

Язык UrbiScript разрабатывается с 2003 года Жаном-Кристофом Бейли в когнитивной Лаборатории робототехники ENSTA, в Париже.

В настоящее время скрипт активно развивается совместно с компанией Gostai.

Основные возможности править

  • Параллельность и программирования на основе событий
  • Прототипное программирование (Prototype-based programming)
  • Синтаксис в стиле C++
  • C++ архитектура компонентов (UObject) с возможностью линковки объектов или их удалённого запуска
  • Архитектура Клиент-Сервер
  • Клиентские интерфейсы для Java и Matlab (Urbi SDK)
  • Кроссплатфоменность: Linux, Mac, Windows и другие. Являясь встраиваемым, URBI может работать на различных процессорах: x86, ARM, MIPS, PowerPC и т. д.
  • Теговые команды (taggable commands) для контроля выполнения потока
  • С мая 2010 года Urbi является продуктом с открытым исходным кодом (лицензия GNU AGPL v3) .
  • Urbi может взаимодействовать с ROS от компании Willow Garage.
  • Urbi может использоваться в качестве промежуточного слоя C++, без urbiscript. Однако, использование urbiscript требует изучения сравнительно нового языка, не столько с точки зрения синтаксиса (который, похож на С/C++), а в терминах параллельной /событийной парадигмы.
  • Webots — профессиональный симулятор роботов, который может работать с Urbi.
  • Программное обеспечение для визуального управления роботом от Gostai Studio и Gostai Lab, но оно является проприетарным и стоит дорого.

Примеры править

Примеры показывают, как на UrbiScript реализуется цикл отслеживания «мяча» — объекты моторов головы, объекты для детектирования «мяча» (x и y в диапазоне от −1/2 до 1/2):

whenever (ball.visible) 
{
    headYaw.val   += camera.xfov * ball.x
  &
    headPitch.val += camera.yfov * ball.y
};

Whenever — цикл, который используется для выполнения связанного кода до тех пор, пока значение условий истинно.

«&» — указание для обеих команд, которые должны начинаться в одно и то же время, выполняясь тем самым параллельно.

at (speech.hear("hello"))
{
  voice.say("How are you?") &
  robot.standup();
}

at — событийная конструкция, которая приводит в действие связанный код один раз, в случае когда условие становится истинным:

myTag: 
  while(true)
    echo ("This is a never ending loop"),
at (button.pressed)
  myTag.stop;

myTag — тег который даёт возможность приостановить этот код в случае необходимости:

В приведенных примерах в конце команды стоит запятая — обозначает выполнение предыдущей команды в фоновом режиме, позволяя программе выполняться далее, в частности, выполнения следующей команды at.

Компонентная архитектура UObject править

Компонентная архитектура UObject основывается на C++-библиотеке UObject, позволяя разработчикам взаимодействовать с любым C++-объектом в Urbi, предоставляя отображение выбранных методов и параметров в скриптовом языке, оставаясь C++ кодом. Оповещение C++ можно установить на любой из атрибутов объекта для уведомления кода о каких-либо изменениях этих атрибутов со стороны UrbiScript/Urbi.

UObject использует шаблоны C++ для прозрачного отображения любого требуемого метода в механизм интерфейса.

C++ UObject могут быть использованы как в режиме плагина, если он непосредственно слинкован с ядром Urbi во время компиляции, так и в режиме динамической загрузки. В первом случае, объект C++ получает доступ к памяти ядра Urbi в результате интеграции. Это обычно используется для критических ко времени компонентов, таких как двигатель или драйверы сенсоров. Тот же C++ UObject также может быть использован без изменений в качестве удаленного компонента. В этом случае он станет автономной программой, которая будет выполняться с IP-адресом сервера Urbi в качестве параметра. В обоих случаях объект будет появляться прозрачно в UrbiScript в качестве родного объекта.

Существующие UObject править

Поддерживаемые скрипты править

Ссылки править