Недавно здесь была новость об открытии исходного кода ядра ОС для роботов — 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