Блог посвящен роботам и робототехнике, а в первую очередь - моему собственному проекту "Самодельный робот", и сайтам по робототехнике, в создании которых я принимаю участие. Здесь публикуются ссылки на полезные ресурсы по робототехнике, мои успехи и поражения, и просто мои мысли.
Итак, напомню, что Wiimote, или Wii Remote - это пульт дистанционного управления для приставки Wii фирмы Nintendo, обладающий широкими возможностями обратной связи (акселерометр + инфракрасная камера достаточно высокого разрешения). Вообще, о Wiimote я уже писал. Например, переводил статью Альберто Биетти об использовании Wiimote для управления роботом Lego NXT - с помощью Microsoft Robotics Studio.
И, если честно, на этом я остановился. Хотя девайс действительно очень классный, но на мой взгляд в робототехнике его особенно не поиспользуешь, особенно в любительской (а вот в 3D-игрушках - у этого пульта огромное будущее, как мне кажется). Ведь, по большому счету, это обычный дистанционный пульт управления с обратной связью, и все, что из него можно выжать - это какое-нибудь продвинутое управление манипулятором. Причем, скорее всего, более стандартные средства ДУ не будут сильно уступать творению фирмы Nintendo...
Впрочем, не все такие пессимисты, как я. Господин remrumвысказал на Робофоруме другую идею переворота Wiimote «с ног на голову», и даже попытался воплотить эту идею в жизнь.
Вкратце: идея состоит в том, чтобы использовать Wiimote в качестве управляющего устройства для робота, при этом контакты от одиннадцати кнопок пульта будут служить датчиками данного робота, совместно с акселерометром и инфракрасной камерой. В качестве выходов устройства, для совершения управляющих воздействий, существуют контакты от 4х светодиодов и одного вибромотора. Конечно, запрограммировать пульт невозможно - однако логику можно реализовать на компьютере, ноутбуке или КПК, и соединяться с пультом по Bluetooth (такое соединение также уже предусмотрено возможностями пульта).
В принципе, достаточно простенький робот из всего этого вполне может получиться. И самое главное, управлять такой машиной можно с компьютера, с использованием всех самых современных средств программирования. Низкоуровневые драйвера для Wiimote уже давным давно написаны, и представлены в виде, например, библиотеки WiimoteLib, доступной в двух видах: на C# и на VB.Net (именно эту библиотеку использовал Альберто Биетти, ее подключение и использование описаны в упомянутой уже статье Wiimote и Robotics Studio).
Напомню, стоимость пульта составляет около 1500-2000 рублей, если покупать отдельно от приставки. Безусловно, это для многих покажется дороговатым приобретением. Спешу вас уверить - насколько мне известно, собрать подобную систему, оснащенную инфракрасной камерой и акселерометром, да еще и управляемую по Bluetooth, дешевле не получится точно.
Вообще, как я уже не раз говорил, роботы - удовольствие не только отнимающее много времени, но еще и очень дорогое...
Впрочем, речь сейчас не об этом. Библиотека для Wiimote действительно создана, однако управляться с ней еще нужно научиться. И если буржуям доступна справка на их родном языке, то нам, русским, такую справку читать не всегда удобно. Тем более, имеющаяся справка совершенно не является сколько-нибудь подробной.
Поэтому, в рамках помощи проекту remrum'а, я начал перевод справочного файла, поставляемого вместе с библиотекой. Переводить буду еще долго, и постепенно опубликую весь chm-файл, как в онлайн-варианте, так и для скачивания. Подписывайтесь на мой блог - и обязательно узнаете новости.
А пока что - обзорные сведения по библиотеке:
Библиотека WiimoteLib содержит одноименный нэймспэйс, основным классом которого является класс Wiimote. По сути, любая работа с пультом начинается с создания экземпляра этого класса:
Wiimote wm = new Wiimote();
После создания класса нужно подключиться к пульту с помощью метода без параметров Connect (после окончания работы с пультом, нужно разъединиться с ним, используя обратный метод Disconnect):
wm.Connect();
Очень просто с помощью библиотеки управлять светодиодами и вибромотором. Это важно, поскольку через светодиоды и вибромотор мы договорились осуществлять управление моторами робота:
Нетрудно догадаться, что приведенный код зажигает два средних светодиода и включает вибромотор пульта.
Что касается получения данных о состоянии кнопок, акселерометра и инфракрасной камеры - для этого у класса Wiimote существуют события, на которые можно поставить собственные обработчики. Делается это так:
wm.WiimoteChanged += new
WiimoteChangedEventHandler(wm_WiimoteChanged);
wm.WiimoteExtensionChanged += new
WiimoteExtensionChangedEventHandler(
wm_WiimoteExtensionChanged);
На этом пока все, подробное описание класса, его свойств, методов и событий - будет, надеюсь, скоро готово.
P.S. Да, кстати, со следующего понедельника ухожу в отпуск, кто знает, может быть за отпуск удастся продвинуться в моих проектах роботов... Следите за новостями - подписывайтесь на RSS! (те, кто еще не подписан)
Microsoft проводит соревнования симуляций. Онлайн это видно через SilverLight, на сайте RoboChamps. Симуляция пишется, естественно, с помощью Robotics Studio. Кстати, господа, кто программировать умеет! Ведь Microsoft может запросто предложить победителю работу, так что, мимо ушей такие вещи пропускать не стоит! Я - так вообще, всегда был любителем таких вот вещей. Эх, было бы времени немножко - обязательно забацал бы симуляцию своего марсоходика!
Идея, кстати, не нова. Вот, например, был проект когда-то - Арена роботов. Смысл абсолютно такой же: пишем программу, используя специальный редактор, программа наша должна управлять виртуальным роботом. Отправляем программу организатору соревнований, он запускает чемпионат, и победитель получает приз. Все, собственно, просто. Сайт, надо заметить, существует с 2005го года :)
Если уж перечислять, то позволю себе также упомянуть еще разок RoboBrawl, замечательную онлайн флэш-игру, где можно поучавствовать в битвах роботов друг с другом. Весьма интересно, я в свое время полдня рабочего времени убил, играясь в нее :)
Сегодня я хочу рассказать еще немного о замечательном устройстве ввода информации с обратной связью от компании Nintendo - Wii Remote. Для тех, кто забыл, или не знал (я уже о Wii Remote писал) - вот какие, например, возможности дает это устройство:
Этот прекрасный демонстрационный ролик от Джонни Ли (я был просто поражен, когда увидел это видео впервые...), конечно, больше относится к игровой индустрии, однако и для роботов Wii Remote может пригодиться. Например, вот в таком виде:
Это видео сделано французом по имени Альберто Биэтти (Alberti Bietti), который на своем блоге разместил целое руководство по подключению Wii Remote к Microsoft Robotics Studio, и использованию этой связки для управления роботом Lego Nxt. Достаточно вольный и немного укороченный перевод данного руководства я постараюсь привести здесь.
К сожалению, я сам в данный момент не могу себе позволить приобрести Wii Remote, чтобы проверить все, о чем сейчас напишу - на практике, хотя недавно видел этот прекрасный «девайс» в свободной продаже (отдельно от приставки), и обязательно куплю его позже, когда позволят финансовые возможности...
Помимо устройства WiiRemote, для создания описываемой программы, необходимо установить на Вашем компьютере .Net Framework, Microsoft Visual Studio, Microsoft Robotics Studio. Речь будет идти о программировании на C#, и подразумевается, что Вы уже имеете какие-то базовые знания о .Net и C#.
Итак, задача: совместить мощную среду разработки ПО для роботов - Microsoft Robotics Studio - с устройством Wii Remote (обычно его сокращают - до Wiimote).
Задача эта, на самом деле, уже решена на низком уровне совместимости. Так что драйвер мы писать не будем - ведь существует специальная библиотека для этих целей, Managed Library for Nintendo's Wiimote, которую можно свободно скачать с CodePlex.
Создание сервиса
Прежде всего, необходимо создать собственный веб-сервис, с которым будет взаимодействовать остальная часть программы робота. С помощью веб-сервиса будет подключена та самая библиотека, которую вы наверное уже скачали...
Вообще говоря, веб-сервисы - это корень идеологии Robotics Studio, любая программа, созданная в MSRS, собственно, состоит из множества веб-сервисов. Использование веб-сервисов позволяет реализовать распределенные модели управления роботами - когда программа расположена сразу на нескольких серверах, возможно, значительно удаленных друг от друга.
Кроме того, веб-сервисы реализуют принцип создания "reusable" компонентов. Подробнее об этом можно почитать, например, в соответствующей статье на MSDN (по-английски).
Для создания заготовки для веб-сервиса, вам потребуется выполнить следующую команду (из командной строки, которая, кстати сказать, используется в MSRS очень часто):
dssnewservice /s:wiimoteNxt
Здесь параметр /s задает имя создаваемого сервиса.
Теперь перейдите в каталог (созданный при создании веб-сервиса) 'wiimoteNxt' в папке C:\Microsoft Robotics Studio (1.5)\ (или в другой, куда Вы установили MSRS 1.5). Откройте файл wiimoteNxt.sln (конечно, для этого у вас должна быть установлена среда разработки Visual Studio). Это и есть проект нашего веб-сервиса.
Добавление связей
Теперь, собственно, давайте добавим в проект связь с библиотекой WiimoteLib. Первая проблема, с которой придется столкнуться - это несовместимость версий, поскольку библиотека WiimoteLib была написана под использование с MSRS 1.0, а самая свежая версия - 1.5. Проблема решается просто, снова из командной строки:
Параметром задается путь к библиотеке, исправьте, если у вас он другой.
Теперь библиотека совместима с версией 1.5 Robotics Studio, и можно перекомпилировать ее: открываем файл Wiimote.sln из студии, жмем Build, и затем закрываем проект - больше он нам не потребуется.
Вернемся к проекту нашего только что созданного веб-сервиса, и добавим ссылку на библиотеку WiimoteLib.
В появившемся окне выбираем вкладку .NET и ищем «Wiimote.Y2007.M06.Proxy» (каждый раз при создании подобных связей - необходимо выбирать сервисы типа Proxy).
Также следует добавить ссылку на «RoboticsCommon.Proxy».
Наконец, для упрощения записи, в начало файла WiimoteNxt.cs потребуется добавить примерно такие директивы «using»:
using wiimote = WiimoteLib.Proxy;
using drive = Microsoft.Robotics.Services.Drive.Proxy;
Благодаря этим двум нехитрым строчкам, мы сможем обращаться к нашим библиотекам максимально просто, поскольку это - алиасы для namespace-ов (область имен, т.е. все имена идентификаторов уникальны в пределах одной такой области). Drive означает двигатель, через этот namespace мы будем обращаться к моторам; область имен wiimote, как нетрудно догадаться - отвечает за хранение классов для манипуляций с нашим одноименным чудо-пультом.
Подписка на оповещения Wiimote
Для того, чтобы управлять роботом с использованием Wiimote, естественно, нужно как-то получать входные данные. Механизм считывания данных прост и реализуется с помощью подписки на оповещения, которые рассылает библиотека WiimoteLib. Давайте попробуем подписать наш веб-сервис, который будет принимать оповещения библиотеки...
Прежде чем начать, следует учесть, что принятые оповещения нужно где-то хранить - для этого прекрасно подойдут существующий в Robotics Studio специальный класс объектов - «порт».
// порт Wiimote (со специальным атрибутом Partner)
[Partner("wiimote", Contract = wiimote.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.UseExistingOrCreate)]
private wiimote.WiimoteOperations _wiiPort = new wiimote.WiimoteOperations();
// порт для оповещенийprivate wiimote.WiimoteOperations _wiiNotify = new wiimote.WiimoteOperations();
В представленном фрагменте кода использованы так называемые атрибуты. Атрибуты могут быть связаны с классом, переменной, объектом, методом, и др. Атрибуты обрабатываются специальными классами-обработчиками, которые могут написаны любым программистом, и каким-либо образом воздействуют на объект, для которого назначен тот или иной атрибут; либо влияют на способы обработки этого объекта. Вообще, атрибуты и рефлексия - это отдельная тема, о которой можно говорить очень долго.
Вкратце определение рефлексии звучит так: рефлексия (синоним интроспекция, англ. reflection) — механизм языка программирования, позволяющий во время выполнения исследовать и изменять структуру программы. Один из инструментов рефлексии в C# - это как раз атрибуты.
Об атрибутах можно почитать, например, на сайте GotDotNet.ru.
В данном случае с помощью атрибута мы просто указали, что создаваемый порт будет взаимодействовать с веб-сервисом wiimote.
Теперь у нас есть порты, давайте подпишемся на оповещения. Во-первых, в метод Start() после строчки base.Start() следует добавить вот такой код:
_wiiPort.Subscribe(_wiiNotify);
Это означает, что главный порт - _wiiPort - будет пересылать оповещения порту _wiiNotify. Чтобы активировать прием на порту _wiiNotify, добавим еще одну строку:
Все, мы готовы приступить к созданию кода для управления моторами.
Управление моторами
Обращение к моторам осуществляется, как вы помните, через область имен drive. По аналогии с тем, что мы делали для wiimote, создаем порт для управления моторами (для оповещений нам порт не нужен, т.к. наши простые моторы не имеют обратной связи):
// Точно также, создаем порт с атрибутом Partner
[Partner("drive", Contract = drive.Contract.Identifier, CreationPolicy = PartnerCreationPolicy.UseExistingOrCreate)]
private drive.DriveOperations _drivePort = new drive.DriveOperations();
Теперь вставим в обработчик оповещений от wiimote код для отсылки управляющих сигналов нашим моторам. Это достаточно просто:
void wiimoteChangedHandler(wiimote.WiimoteChanged wiimoteChanged)
{
//для простоты дальнейшего горизонтального управления, меняем друг с другом X и Y
float x = -wiimoteChanged.Body.AccelState.Y;
float y = wiimoteChanged.Body.AccelState.X;
//создаем управляющий сигнал для мотора
drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest();
//кстати, есть конструктор, который сразу же позволяет задать скорости, вот так:
//drive.SetDrivePowerRequest request = new drive.SetDrivePowerRequest(leftSpeed, rightSpeed);
// Здесь же мы зададим скорости вручную, вычислив их как разность координат:
request.LeftWheelPower = y + x;
request.RightWheelPower = y - x;
//собственно, отсылаем наш управляющий сигнал!
_drivePort.SetDrivePower(request);
}
Собственно, почти все.
Запускаем наш сервис
Перед тем, как запустить программу, необходимо указать файл манифеста, который определит для Robotics Studio, какого робота будет использовать программа (либо симуляцию какого робота требуется запускать).
Файл манифеста можно указать следующим образом через командную строку:
Не совсем прав был я, говоря, что хороших материалов по Robotics Studio в природе не существует.
Заполняя свой каталог робототехнических сайтов, обнаружил блог Евгения Марченкова, разработчика из Microsoft, и серию статей в нем - о Robotics Studio! Статьи достаточно занимательные, вот собственно ссылки:
Статьи были опубликованы еще летом прошлого года, так что почему я их не нашел раньше - остается большой загадкой. Впрочем, лучше поздно, чем никогда :)
Продолжая тему Microsoft Robotics Studio, и ее симуляционной среды, нашел неплохой инструмент для редактирования мира той самой симуляционной среды - Microsoft Robotics Studio Maze Simulator.
Если вкратце - он может формировать местность симуляционного мира, принимая на вход обычный монохромный графический файлик. Вот что получается в итоге:
По-моему, очень хороший инструмент, который может использоваться, например, для создания некоторых лабиринтов и тестирования в них программной способности робота по исследованию этих лабиринтов.
Более продвинутые пользователи Robotics Studio продолжают создавать своеобразные шедевры, например, вот оцените - виртуальный музей:
Дошло до того, что современные модные деятели культуры стали посвящать роботам свои произведения. Даже фильм "Я, робот" - один он много чего стоит!
Рисунки о роботах - тоже очень популярное направление у современных художников. Например, как вам такой вот (взято с сайта Глеба Андросова) «рыбот»? :)
А вот, например, творение родом из 3DMax-а - «MUROBOT» (подробнее здесь):
А вот например еще один интересный вид искусства - изготовление каких-то нереальных существ, очень напоминающих роботы, из... насекомых... и внутренностей механических часов:
Я недавно писал о мощи 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:
Здесь представлено всего лишь описание двух связей...
Мусора, конечно, гораздо больше, чем в RoboML. Но в практических реализациях - без этого никуда. Судите сами, компиляторы, какими бы они ни были оптимизирующими, генерируют неоптимальный код. На ассемблере я бы написал намного более практичное со всех точек зрения решение для практически любой задачи. Но на ассемблере писать долго - а на языке программирования высокого уровня - быстро.
Анализируя XML, я понял, что сравнивать RoboML и Microsoft Robotics Studio XML сложно, поскольку они описывают, в принципе, одно и то же - но с разных сторон. XML от Microsoft гораздо более практичен, приближен к деталям, к реализации. И весьма ограничен - вся диаграмма записывается в виде заранее жестко предопределенных блоков (их можно создавать самостоятельно, но исключительно). В то же время, RoboML - абстрактен, даже роботов он описывает не алгоритмическими конструкциями (например if-then-else), а математическим языком.
Подводя итог первого знакомства с Robotics Studio, признаю, что мне, честно сказать, идея Microsoft очень сильно импонирует. Давно пора было создать специализированную среду разработки для роботов, надеюсь, это упростит задачу многим любителям робототехники в воплощении их проектов.
Меня зовут Андрей, я профессиональный программист и робототехник-любитель :)
Связаться со мной по любому вопросу Вы сможете, написав мне , или в ICQ 170038573.