WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

URBI (англ. universal real-time behavior interface — «универсальный интерфейс поведения реального времени») — кросс-платформенная открытая программная платформа на C++, используемая для разработки приложений для робототехники и сложных систем. Urbi основывается на распределенной компонентной архитектуре UObject. Она также включает urbiscript — параллельный и событийный скриптовый язык. Компоненты UObject могут подключаться к urbiscript и появляются в нём, как родные объекты, которые можно использовать в сценариях для взаимодействия и обмена данными. Компоненты UObject могут быть связаны с интерпретатором urbiscript, либо работать, как автономный процесс в «удаленном» режиме.

urbiScript

Язык urbiscript разрабатывается с 2003 года Жан-Кристофом Бейли (Jean-Christophe Baillie) в когнитивной Лаборатория робототехники ENSTA в Париже. В настоящее время он активно развивается компанией Gostai, основанной в 2006 году.

Urbiscript — это скриптовый язык; как Lua в видеоиграх, urbiScript может использоваться для склеивания C++ компонентов в единую функциональную структуру; алгоритмы, требующие высокой производительности реализуются на C++, а взаимодействие и поведение системы описывается сценарим на скриптовом языке, что является более гибким и простым в обслуживании, а также позволяет динамическое взаимодействие во время выполнения программы. Urbiscript также привносит некоторую полезную абстракцию для программистов: параллельность и программирования на основе событий в рамках семантики языка. Сценарии параллельного поведения и реакций на события, являются основными требованиями для большинства робототехнических приложений и приложений ИИ, поэтому urbiscript (и вся платформа Urbi) хорошо подходит для этих целей.

Основные возможности Urbi

  • Параллельность и программирования на основе событий
  • Прототипное программирование (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, но он дорого стоит (990 € Pro, 190 € Edu).
  • Программное обеспечение для визуального управления роботом Gostai Studio и Gostai Lab являются проприетарным и стоит дорого.

Примеры

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

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

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

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

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

Каждую команду или группу команд можно обозначить тегом, что дает возможность остановить этот код в случае необходимости:

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

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

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

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

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

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

Существующие объекты UObject для роботов

Поддерживает симулятор роботов Webots (англ.).

Поддерживаемые роботы

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии