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
- Распознавание речи
- Синтез речи
- Распознавание лиц
- SLAM
- Распознавание цветов
- SIFT распознавание объектов
Поддерживаемые скрипты
- Segway
- Aibo
- iRobot Create
- Lego Mindstorms NXT
- HRP-2
- Nao
- Robotis Bioloid
- Mobile Robots Pioneer
- Симулятор Webots