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

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

Подключение UObject кросс-платформы можно использовать в сценариях для взаимодействия и обмена данными. Они подключаются к 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 основана на библиотеке UObject C++, которая позволяет разработчикам взаимодействовать с любым объектом C++ в Urbi путем сопоставления выбранных методов и параметров с языком сценариев, сохраняя при этом код C++, который способен устанавливать оповещения C++ для определенных атрибутов объектов уведомлять код о любых изменениях в этих атрибутах UrbiScript/Urbi.

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

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

Существующие UObject Распознавание речи Синтез речи Распознавание лиц SLAM Распознавание цветов SIFT распознавание объектов

Поддерживаемые скрипты Segway Aibo iRobot Create Lego Mindstorms NXT HRP-2 Nao Robotis Bioloid Mobile Robots Pioneer Симулятор Webots

Ссылки gostai.com urbiforge.com Исследования URBI командой RoboCraft.ru Проект на github

Категория:Инструменты для робототехники