Microsoft Robotics Studio първо запознанство

Във всеки случай се надявам, че моят собствен опит от опознаването и работата с Robotics Studio, описан по-долу, ще бъде не по-малко полезен.

Първо, нека изясним какво представлява. Както може би се досещате, Microsoft Robotics Studio е система, специално създадена за разработване на софтуер за роботи. И най-вече за "конструктори" на роботи (т.е. заготовки от модули, които можете да сглобите у дома и да препрограмирате по ваш вкус) - като iRobot Create, LEGO Mindstorm и др.

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

Като цяло разработчиците на Robotics Studio са страхотни. Те правилно идентифицираха съвременните проблеми на роботиката и поеха по пътя на популяризирането на тази прекрасна област на науката и технологиите. Сега много неща, които преди бяха достъпни само за професионални създатели на роботи, които посвещават огромно количество лично време на роботиката, са достъпни дори за аматьори. И тъй като дори Microsoft активно води линията на роботиката (помнете например робота WiMo, за който писах в статията „Роботи и PDA“), тогава препоръчвам на скъпи читатели да не напускат тази линия!

Обратно към нашите овце: в допълнение към факта, че компонентите на 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 лесно реши този проблем, като въведе концепцията за активност, така да се каже, сложно действие или, по-просто, блок. Дейността е отделна диаграма, която има "входове" и "изходи" и се показва на родителската диаграма като единичен елемент, с подходящия брой входни и изходни точки, към които могат да бъдат прикрепени свързващи линии. Идеята е проста и логична.

По отношение на 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. С други думи, дали първият сензор (вляво) или вторият (вдясно) работи. Броят на сензорите и съответствието на номерата на сензорите с тяхната позиция се определя в зависимост от избрания манифест, за робота, който ще използваме.

Иначе няма нищо сложно. Тези, които са поне малко запознати с алгоритмизацията, много бързо ще могат да приложат логиката на нашия прост робот, който просто заобикаля препятствията.

Крайният изглед на диаграмата:

studio

За съжаление не успях да стартирам симулацията на създадения проект, възникнаха някои грешки при отваряне на манифестите. Ще публикувам резултатите веднага щом разбера.

Но от друга страна хвърлих един поглед на "вътрешностите" на получената диаграма. Това, разбира се, е XML файл. Беше много интересно да сравним практическия и работещ XML за описание на роботи от Microsoft – с теоретичните и непрактичните имплементации на RoboML. Представям фрагмент от XML код от Microsoft:

Това е само описание на две връзки.

Боклукът, разбира се, е много повече, отколкото в RoboML. Но в практическите реализации - без него навсякъде. Преценете сами, компилаторите, колкото и оптимизиращи да са, генерират неоптимален код. В асемблерБих написал много по-практично решение от всички гледни точки за почти всяка задача. Но отнема много време да се пише на асемблер - и бързо на език за програмиране от високо ниво.

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

Обобщавайки първото запознанство с Robotics Studio, признавам, че, честно казано, съм много впечатлен от идеята на Microsoft. Отдавна трябваше да се създаде специална среда за разработка на роботи, да се надяваме, че това ще улесни много ентусиасти по роботика да реализират своите проекти.