Показаны сообщения с ярлыком roboml. Показать все сообщения
Показаны сообщения с ярлыком roboml. Показать все сообщения

понедельник, 30 августа 2010 г.

Пара слов про RoboML

Когда-то давно я писал статью на моем сайте "Самодельный робот", про RoboML. Перспективный, базирующийся на XML язык для описания роботов, разработанный в свое время нашим соотечественником, Максимом Макачёвым, совместно с S. K. Tso. Язык этот позволяет задавать как трехмерный внешний вид робота, так и описывать его внутреннюю структуру, и даже определять логику его поведения, в виде математического описания в виде MathML-вставки. Подробнее - написано в самой статье, "RoboML - язык описания структуры робота".

Дак вот, совсем недавно, с удивлением обнаружил ссылку на свою статью в сборнике материалов всероссийской научно-технической конференции Информатика и вычислительная техника - 2010, в списке использованной литературы проекта "Автоматизированная система конструирования моделей мобильных роботов". Проект, по правде говоря, не очень серьезный. Ребята пытаются создать очередной аналог симуляционной среды Microsoft Robotics Studio на Java, с использованием RoboML в качестве языка для хранения собственно моделей. Причем, в качестве одной из причин создания собственной симуляционной среды указывается, что мол, физика недостаточно хорошо симулируется в существующих средах. Ну даете, ребята! А то, что в RoboML физика вообще не учитывается, это нормально, да? :)

Ведь понимаете, что обидно... Разобраться с этой темой - всегда полезно. 3D-моделирование, робототехника, да и вообще проектирование и польза проектирования. Это очень важные, нужные и полезные темы, на каждой из которых можно "во взрослой жизни" здорово заработать. Но настолько явные ляпы свидетельствуют, во-первых, о том, что системы еще нет даже в зачаточном виде. Во-вторых, о несерьезном подходе и невнимательном чтении материала. И это обидно. Да даже не обидно, просто грустно.

Что же касается RoboML, то, если бы передо мной сейчас встала задача создать подобный язык, или доработать собственно RoboML, я бы самым первым делом поставил бы из схемы ссылку на VRML или подобный ему язык, вместо использования своих средств для описания внешнего вида робота. Потому что, руками, в XML-виде, описать трехмерную модель среднего по сложности робота - это, наверное, пара лет :). И писать конвертер форматов тоже смешно. Зачем делать лишнюю работу? Конвертеры уже написаны - для VRML.

Кроме того, насчет математического представления поведенческой модели, тоже, ну не очень мне это нравится. Вот здесь, как раз, можно было бы ссылку-то и не ставить. Потому что робот будет программироваться, а значит сведения о его поведении будут представлены в алгоритмическом виде. А записывать алгоритмы в математическом представлении - как минимум непривычно, хотя это и выглядит более научным.

Да, и еще. На будущее. RoboML - хороший язык. С хорошей идеей. Но этот язык - теоретический. Хотите увидеть, как выглядит практический язык, который реально можно применять? Нет ничего проще. Загляните в Microsoft Robotics Studio  :)

пятница, 14 марта 2008 г.

Язык VRML

Язык VRML предназначен для описания векторных 3D-моделей. Почему я заговорил об этом? Все очень просто, я постепенно движусь в направлении создания генератора RoboML-файлов. Генератор будет использоваться мной для создания раздела Модели роботов моего каталога Robotics.Ru, а также для кое-каких еще целей (об этом позже). И часть RoboML-файла, ответственная за описание геометрии робота - очевидно, должна с легкостью импортироваться и экспортироваться в наиболее распространенные форматы файлов. VRML - первый кандидат.

Вообще на VRML модели я впервые наткнулся на практике совсем недавно - когда искал схемы или хорошие фотографии первого марсохода ПрОП-М - на страницах Виртуального Музея Космонавтики (именно эта модель представлена на рисунке вверху).

Из браузеров я предпочитаю Opera, поэтому не сразу удалось посмотреть эту модель. А вот Internet Explorer 7 открыл файлик без проблем, самостоятельно установив нужный плагин. На экране я увидел вот такую 3D-модель, которую можно вращать и осматривать с любого ракурса:

Другие космические роботы также доступны - как на страницах Виртуального Музея Космонавтики, так и, например, на сайте NASA. Очень интересно посмотреть, тем более что некоторые модели там - интерактивные!

Вернемся к VRML. Язык не XML-серии, несмотря на характерное "ML"-окончание. Спецификация мне показалась не самой доступной, однако возможностей у языка немало. Например, очень интересная возможность - интеграция с Java и JavaScript, что позволяет создавать интерактивные и презентационные модели. Примеры VRML-кода можно посмотреть на том же сайте.

Вообще, следует сказать, что главное преимущество VRML - в том, что этот формат открытый, и существует много наработок для него. Например, есть веб-интерфейс генератора VRML, хотя он мне очень не понравился, т.к. там все наполовину на японском. Есть обычные оффлайн-редакторы, например, RenderSoft (бесплатный) и Spazz3D (30-ти дневный Trial). Есть также библиотеки для работы с VRML, которые я обязательно буду использовать при создании конвертера.

среда, 9 января 2008 г.

Microsoft Robotics Studio: первое знакомство

На сайте Microsoft информация о Robotics Studio очень поверхностна, а страничка на русском языке - вообще, изобилует неработоспособными ссылками (на сегодняшний день).
Полезный материал о Robotics Studio - мне удалось найти в виде видеозаписи 9го канала, где Павел Хижняк, один из разработчиков Robotics Studio, по-русски и очень доступно демонстрирует возможности Robotics Studio.
Видеозапись весит 69Мб, и доступна для скачивания на сайте GotDotNet.Ru - очень рекомендую ознакомиться, если, конечно, Ваш интернет-канал позволит это сделать.
Также, существует еще видеозапись + презентация в формате PowerPoint 2007 на сайте Платформа 2008, общим весом 8Мб, правда, информации там гораздо меньше...

В любом случае, надеюсь, не менее полезным будет мой собственный опыт знакомства и работы с Robotics Studio, изложенный ниже.

Для начала, проясним, что это вообще такое. Как не трудно догадаться, Microsoft Robotics Studio - это система, специально созданная для разработки программного обеспечения для роботов. Причем, в основном, для «конструкторов» роботов (т.е. заготовок из модулей, которые Вы можете собирать в домашних условиях и перепрограммировать на свой вкус) - таких как iRobot Create, LEGO Mindstorm, и т.д.

Инсталляционный пакет представляет из себя exe-файл, который весит всего 82Мб. Его можно преспокойно скачать с microsoft.com. Процесс установки прошел очень гладко. Замечу, что, желательно, кроме Robotics Studio установить еще .NET 2 и DirectX, иначе система будет работать не в полную силу. В частности, DirectX требуется для симуляционной 3D-среды, которую я подробно опишу позже.

Вообще, разработчики Robotics Studio - молодцы. Они правильно выделили современные проблемы роботостроения и пошли по пути популяризации этого прекрасного направления науки и техники. Теперь многие вещи, ранее доступные лишь профессиональным роботостроителям, отдающим робототехнике огромное количество личного времени - доступны даже любителям. А раз уж даже Microsoft активно ведет линию робототехники (вспомните еще, например, робота WiMo, о котором я писал в статье «Роботы и КПК»), то и уважаемым читателям рекомендую эту линию не оставлять!

Возвращаясь к нашим баранам: помимо того, что компоненты Robotics Studio прекрасно и автоматически интегрируются в среду разработки Visual Studio, этот продукт содержит два основных модуля, призванных помочь робототехникам-любителям, таким как я, например. Это модули - Visual Programming Language (VPL, визуальный язык программирования) и симуляционная среда.

Язык VPL обеспечивает возможность программирования роботов визуальными методами. Диаграммы VPL кодируются с помощью XML-схем и представляют, на мой взгляд, одну из очень немногих удачных попыток создания полностью визуального языка программирования. Конечно, базовые навыки алгоритмического мышления все равно потребуются, но зато совсем необязательно знать синтаксис C#, или, например, что такое анонимные делегаты. Согласитесь, это очень важный шаг! Ведь многие робототехники - очень посредственные программисты, и облегчить их труд - прекрасная идея.

Второй важный модуль Robotics Studio - симуляционная среда. Она реализует поистине классную идею, а именно - о том, что для программирования роботов Вам сами роботы, в принципе, и не нужны! Симуляционная среда является графической 3D-моделью, отображающей действия роботов, и объекты, которые роботов окружают. Например, если в модели присутствует шарик, то Вы можете подогнать робота к шарику и откатить этот шарик куда-нибудь. Физические моменты настолько глубоко продуманы, что становится возможным даже моделирование переворотов роботов, отрыва роботов от земли, столкновения объектов - все что угодно. Одним из примеров использования симуляционной среды является моделирование ринга сумо-роботов (которые стараются вытолкнуть друг друга за пределы ринга). Эта симуляция поставляется в виде аддона, который можно скачать там же, где и саму Robotics Studio.

Поскольку сам я являюсь профессиональным программистом, мне захотелось проверить, насколько простым будет использование Robotics Studio. Честно сказать, поначалу столкнулся с некоторыми трудностями. Первая диаграмма получилась неверной, из-за неправильного понимания самой концепции VPL. Попробую описать ее для уважаемых читателей, чтобы они не натолкнулись на те же грабли...

VPL описывает в основном некоторые модули робота, и их связи друг с другом. Модулями робота могут быть разнообразные датчики (расстояния, касания, света и т.д.), веб-камера, устройство GPS-навигации (кстати говоря, производимое компанией Microsoft, что еще раз говорит о серьезности намерений мирового софтверного гиганта в отношении робототехники), моторы и сервоприводы, динамики, светодиоды, различные индикаторы, дисплеи и тому подобные устройства. Кроме того, модулями в Robotic Studio могут выступать специальные диалоговые окошки, например, для ручного дистанционного управления роботом.

Связи между модулями являются некоторыми алгоритмическими конструкциями, иногда со сложной структурой. Они могут включать разнообразные ветвления, условия, даже циклы, а также работу с данными, работу с переменными и т.д. Наиболее часто основанием для создания связи служит «нотификация» (оповещение о событии) в каком-либо из модулей датчиков. Обработка связей результируется в подаче напряжения на тот или иной двигатель, проигрывании звукового сообщения, световой сигнализации - в общем, все довольно стандартно и соответствует логике работы любого робота.

Здесь, кстати, возникает естественный вопрос: «Если связей и модулей много, то как же все это поместится на диаграмме?» Microsoft с легкостью решила этот вопрос, введя понятия Activity, так сказать составного действия, а проще - блока. Activity - это отдельная диаграмма, которая имеет «входы» и «выходы», и отображается на родительской диаграмме единственным элементом, с соответствующим количеством входных и выходных точек, к которым можно присоединять линии связей. Идея простая и логичная.

Применительно к VPL также обязательно необходимо сказать о манифестах. Манифесты - это своеобразные драйверы низкого уровня, или, с другой стороны - конфигурации той или иной программы VPL. Идея состоит в том, что одна и та же программа, в принципе, может выполняться на различных роботах, несмотря на то, что на низком уровне управление реализуется неодинаково. Благодаря манифестам, чтобы перенести программу VPL с одного железа робота на другое - нужно всего-то выбрать манифесты соответствующего робота для основных модулей диаграммы. Тем же самым образом - с помощью специальных «Simulation»-манифестов - реализуется перенос программы в среду симуляции. Несколько манифестов - для наиболее популярных существующих конструкторов роботов - присутствует в базовой поставке Robotic Studio. Также есть все возможности для создания собственных манифестов.

Перейдем, наконец, к примерам. В качестве задачи я выбрал создание простейшего робота, способного объезжать препятствия. У этого робота - два датчика касания, и два мотора: мотор поворота и мотор движения. Этого же самого робота я описывал в своей статье о RoboML.

Давайте попробуем запрограммировать такого робота с помощью Microsoft Robotics Studio, и запустить его симуляцию в какой-нибудь подходящей симуляционной среде.

Открываем среду VPL, видим слева список модулей робота. Добавляем на диаграмму два модуля GenericMotor, один модуль GenericContactSensors и один модуль Timer - он потребуется для реализации отъезда назад на небольшое расстояние при объезде препятствий.

Теперь нам нужно определиться, что будет происходить при смене показаний датчиков. Для этого добавляем модуль условия (if-then-else) на диаграмму, и создаем нотификацию на Replace от датчиков касания. Нотификация (оповещение о событии) создается очень просто. На любом модуле в диаграмме есть квадратики слева, и кружочек с квадратиком - справа. Это своеобразные входы и выходы данного модуля (выход для события обозначается кружочком). Если перетащить выход одного модуля ко входу другого, между ними образуется связь.

Уточню еще один неочевидный момент - содержимое блока if-then-else. Здесь Вам очень помогут раскрывающиеся списки с подсказками, которые появляются при попытке набрать что-либо в поле условия. У меня условий было два, и записывались они так: Sensors[0].Pressed и Sensors[1].Pressed. Иными словами, сработал ли первый датчик (левый), или второй (правый). Количество датчиков и соответствие номеров датчиков их положению - определяется в зависимости от выбранного манифеста, для робота, которого мы будем использовать.

В остальном, сложного ничего нет. Те, кто знаком хоть немного с алгоритмизацией, очень быстро смогут реализовать логику нашего простого робота, который просто объезжает препятствия.

Итоговый вид диаграммы:

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

Но зато, я бросил взгляд на «внутренности» получившейся диаграммы. Это, конечно же, XML-файл. Было очень интересно сравнить практический и работающий XML для описания роботов от Microsoft - с теоретическим и не имеющим практических реализаций RoboML.
Представляю фрагмент XML-кода от Microsoft:

<Connections>
  <Connection>
    <Name>link</Name> 
    <To>program.activity.Start.__use__0.snippet.snippet.join.TargetPower.sink</To> 
    <From>program.activity.Start.__use__0.snippet.snippet.expr.source</From> 
  </Connection>
  <Connection>
    <Name>link0</Name> 
    <To>program.activity.Start.__use__0.snippet.snippet.expr.sink</To> 
    <From>program.activity.Start.__use__0.snippet.snippet.noop.source</From> 
  </Connection>
</Connections>

Здесь представлено всего лишь описание двух связей...

Мусора, конечно, гораздо больше, чем в RoboML. Но в практических реализациях - без этого никуда. Судите сами, компиляторы, какими бы они ни были оптимизирующими, генерируют неоптимальный код. На ассемблере я бы написал намного более практичное со всех точек зрения решение для практически любой задачи. Но на ассемблере писать долго - а на языке программирования высокого уровня - быстро.

Анализируя XML, я понял, что сравнивать RoboML и Microsoft Robotics Studio XML сложно, поскольку они описывают, в принципе, одно и то же - но с разных сторон. XML от Microsoft гораздо более практичен, приближен к деталям, к реализации. И весьма ограничен - вся диаграмма записывается в виде заранее жестко предопределенных блоков (их можно создавать самостоятельно, но исключительно). В то же время, RoboML - абстрактен, даже роботов он описывает не алгоритмическими конструкциями (например if-then-else), а математическим языком.

Подводя итог первого знакомства с Robotics Studio, признаю, что мне, честно сказать, идея Microsoft очень сильно импонирует. Давно пора было создать специализированную среду разработки для роботов, надеюсь, это упростит задачу многим любителям робототехники в воплощении их проектов.

Продолжение следует...

понедельник, 10 декабря 2007 г.

Про мои сайты, и про RoboML

Выложил на сайте "Самодельный робот" одну из самых серьезных и больших моих статей по робототехнике, на подготовку которой ушло аж целых 3 дня.
Статья посвящена описанию языка RoboML - это основанный на XML язык, призванный стандартизировать хранение данных о роботах.
Замечу также, что на сегодняшний день эта статья является единственным описанием RoboML в Рунете. Касательно RoboML, причем, есть еще достаточно материалов - для перевода и представления. В частности, хочу попробовать реализовать на RoboML схему моего робота в функционале, который есть сейчас (без ИИ).
Язык очень интересный, и полезный, хотя и громоздкий в некоторых местах - советую ознакомиться.

Также могу порекомендовать по этой теме почитать очень хорошую, правда старенькую (2004 года) и весьма поверхностную, обзорную статью по стандартам в робототехнике.

Также хочется сказать несколько слов о данном блоге, перспективах его развития и т.д.

Во-первых, как я уже упоминал в статье о будущем проекта «Самодельный робот», существует огромное множество невыложенного еще пока материала, материала этого хватит при еженедельном обновлении на год - точно... И каждый день количество материала растет.
Дело в том, что я постоянно интересуюсь робототехникой, подписан на кучу новостных каналов - прежде всего зарубежных, постоянно ищу в Интернете материалы для новых тем, общаюсь на форумах, в ICQ и IRC с интересными и образованными в области робототехники и мехатроники людьми. Каждая тема готовится достаточно серьезно - в среднем, подготовка обычного сообщения занимает 1-3 часа непосредственно перед печатью - причем к тому моменту уже готова значительная часть материала и ссылок. Я никогда не стану здесь говорить о том, о чем сам не имею представления.

Могу сказать, что в настоящее время в папке, где лежат "предварительные" материалы, есть заготовки для 17 новых сообщений. Наиболее интересными - и наиболее проработанными, естественно, являются статьи серии "Интересное о роботах", где я излагаю результаты своих исследований в определенных тематиках. Планируемая регулярность их выхода - 1 раз в 1-2 недели.

Так что, уважаемые читатели, могу заверить, что работа над блогом не будет прекращаться еще долго, и есть еще огромное количество тем, плохо освещенных в Рунете, которые я буду пытаться здесь проработать и представить на всеобщее обозрение.

Теперь немного о продвижении блога. Честно говоря, с трудом представляю, по каким конкретным ключевым фразам можно продвигать данный блог. Да, он проиндексировался сразу на первое место в Google по запросу "блог о роботах", но цена такому запросу - ноль... Что интересно, запрос "робот кпк" в Google показывает мой сайт на втором месте. Хотя тоже запрос не слишком популярный. Остаются, видимо, общие запросы, такие как "роботы" и "робототехника" - однако быстрого успеха на таких конкурентных запросах врядли стоит ждать. Так что, пока будем довольствоваться малым, а жаль, очень хочется уже сейчас быть полезным людям :)...

Возвращаясь к RoboML: буквально только что получил ответ от одного из создателей RoboML - Максима Макачёва, на вопрос «Есть ли будущее у RoboML?». По его словам, в данный момент он не занимается проектом RoboML, да и сам этот проект был чем-то вроде «пробы пера». Он предлагает мне усовершенствовать проект, как я считаю нужным, для целей описания собственных роботов.
И вот что я придумал на сегодня:
В каталоге сайтов по робототехнике я планировал создать целый раздел, посвященный описанию различных моделей роботов. Естественно, хорошо, если бы эти модели могли быть хорошо структурированы и единообразно описаны. Прекрасный тест для RoboML, как мне кажется!

За сим прощаюсь, иду заканчивать новогодний робототехнический пост и новогоднее оформление своих сайтов...