URBI


Недавно здесь была новость об открытии исходного кода ядра ОС для роботов — URBI. Так почему бы не познакомиться с этим продуктом поближе?
Вообще, уже давно пора как следует изучить, рынок существующих программ для роботов 😉
Итак, URBI….
URBI — Universal Real-time Behavior Interface (Универсальный Интерфейс Поведения Реального времени)

хотя где-то натолкнулся на версию про Universal Robotic Body Interface (Универсальный Интерфейс Робототехнического Тела)

Urbi — кросс-платформенная открытая программная платформа на 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 для роботов:
* распознавания речи
* синтезирование голоса
* Распознавания лиц (в том числе, шлюз с OpenCV)
* SLAM
* распознавание цветов
* основанное на SIFT, распознавание объектов

Поддерживаемые симуляторы роботов:
* Webots

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

* Segway
* Aibo ERS7/ERS2xx (Urbi 1.x only)
* iRobot Create
* Lego Mindstorms NXT
* HRP-2 (restricted release to members of JRL)
* Nao от Aldebaran
* Robotis Bioloid
* Mobile Robots Pioneer

Читать далее: URBI — архитектура URBI

Ссылки
http://en.wikipedia.org/wiki/URBI
http://www.gostai.com
http://www.urbiforge.com


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение