Robotics
Моделирование мира с помощью Microsoft Robotics Studio
Сара Морган
В этой статье рассматриваются следующие вопросы.
- Анимация роботов
- Моделирование окружающей среды
- Управление роботами или симуляторами
- Создание объектов
|
В данной статье использованы следующие технологии.
C#, Robotics Studio
|

содержания
Не дайте ввести себя в заблуждение громким именем. Microsoft® Robotics Studio (MSRS) — это нечто большее, чем просто способ поиграть с роботами. Набор MSRS, выпущенный почти два года назад центром Microsoft Research и практически не замеченный разработчиками обычных бизнес-приложений, позволяет создавать приложения для широкого спектра устройств на основе служб. Этот набор содержит среду выполнения, которая хорошо известна разработчикам Windows® Communication Framework (WCF). Кроме того, он содержит средство языка визуального программирования Visual Programming Language (VPL) и среду визуализации Visual Simulation Environment (VSE).
MSRS использует среду выполнения, ориентированную на службы, а также программные средства, необходимые для создания и развертывания робототехнических приложений. Он содержит визуальные средства разработки, учебники и документацию, позволяющие новичкам в мире робототехники быстро войти в курс дела. Разработчики-профессионалы должны приобретать этот пакет за отдельную небольшую плату, а программисты-любители и студенты могут загрузить и использовать пакет бесплатно.
Среда выполнения MSRS состоит из двух частей более низкого уровня, которые основаны на CLR 2.0. Две указанные среды выполнения – служба DSS и среда CCR. DSS является облегченным вариантом ориентированной на службы среды выполнения, которая работает на принципах REST (Representation State Transfer), используемых в веб-технологиях. CCR является библиотекой Microsoft .NET Framework, поддерживающей асинхронную обработку процессов. Это особо важно для робототехнических приложений, в которых происходит постоянный обмен данными, поступающими к большому количеству датчиков и исполнительных механизмов и передаваемыми от них.
Наряду со средой исполнения, пакет MSRS содержит программу VPL, позволяющую создавать робототехнические приложения путем простого перетаскивания элементов в рабочую область. MSRS также содержит среду VSE, которая позволяет экспериментировать со сложными моделями, имеющими в своем составе большое количество роботов и объектов. Именно на этой части MSRS я сосредоточу особое внимание в данной статье. Я постараюсь раскрыть, чем является среда визуального моделирования, и покажу все этапы создания имитационной модели с использованием нового робототехнического объекта. Хорошей новостью для вас будет то, что для работы с программой, обсуждаемой в данной статье, робот вам не понадобится. Это как раз то, что делает модели столь привлекательными; они дают возможность изучать объекты, не приобретая дорогостоящее оборудование.
Что такое моделирование?
Если вы не знакомы с моделированием, представьте книжку-«мультик» — маленькую книжечку с рисунком на каждой странице, который «оживает», если быстро перелистывать страницы. Моделирование работает по такому же принципу. Модель содержит один или несколько объектов (сущностей), отображаемых внутри кадра. Кадр эквивалентен бумажной странице в книжке-«мультике». Скорость, с которой эти кадры воспроизводятся, зависит от свойств графического адаптера компьютера.
Главным отличием книжки-«мультика» от модели является то, что книжка статична и предсказуема, а модель таковой не является. Каждый кадр модели формируется динамически, и не всегда известно заранее, какие силы будут действовать на объект внутри каждого кадра. Именно это и делает моделирование столь полезным. Вы можете работать с помощью робота не по плану и наблюдать, как робот будет взаимодействовать с окружающие миром.
Начало работы
Для начала неплохо было бы загрузить и установить пакет MSRS, если вы еще не сделали это (он находится по адресу
go.microsoft.com/fwlink/?LinkId=113902). Веб-узел MSRS постоянно предлагает обновления для своей версии 1.5. Оно содержит полную версию пакета MSRS 1.5, а также ее доступные обновления.
Пакет MSRS содержит шаблоны для Visual Studio® 2005, но даже если на вашем компьютере установлена Visual Studio 2008, вы можете изучать примеры, содержащиеся в данной статье. Ваш компьютер для разработки должен быть оснащен графической картой, совместимой с DirectX® 9.0. Особе условие: карта должна поддерживать вершинное затенение версии VS_2_0 и выше и пиксельное затенение версии PS_2_0 и выше. Большинство мощных настольных компьютеров и ноутбуков, позволяющих играть в современные компьютерные игры, имеют такую поддержку.
Если вы не уверены, что ваша карта поддерживает данные возможности, вы можете посетить страницу
go.microsoft.com/fwlink/?LinkId=113904, где приведен перечень графических карт с указанием поддерживаемых ими режимов. Кроме того, вы можете установить пакет MSRS и воспользоваться меню справки VSE, чтобы посмотреть поддерживаемые вашей картой средства обработки вершин и текстур. Если вы попробовали запустить одну из моделей, включенных в комплект поставки MSRS или приведенных в этой статье, и увидели пустой экран, это означает, что ваша графическая карта не поддерживает указанных режимов.
Пакет MSRS содержит обработчик AGEIA PhysX, позволяющий моделировать физику взаимодействия модели с окружающей средой. Лишенная физической сущности, ваша модель окажется бесполезной, поскольку она не будет отражать реальный мир, который призвана моделировать. Например, лишенные воздействия гравитации, моделируемые объекты станут парить в воздухе. Если вы ознакомитесь с документацией, поставляемой с пакетом MSRS, вы увидите, что там говорится об использовании дополнительной карты-ускорителя, производимой компанией AGEIA (см.
ageia.com). Чтобы работать с моделями, упоминаемыми в данной статье, нет необходимости покупать и устанавливать эту карту; физическая сущность поведения объектов моделируемых процессов будет обеспечиваться программным механизмом PhysX от AGEIA.
Запуск моделирования
Здесь вы, возможно, захотите увидеть работающую модель. Перед тем как создать собственную модель, вы должны попробовать в действии одну из моделей, поставляемых с пакетом MSRS. При установке пакет MSRS создает папку меню, в котором содержится семь моделей. Первая модель в этой папке, Basic Simulation Environment, воспроизводит сцену, подобную той, что показана на рис. 1.
Рис. 1 Basic Simulation Environment (щелкните изображение, чтобы увеличить его)
Вам могло показаться, что основная модель содержит только два объекта: глобус и коробку. На самом же деле модель содержит также объекты, которые представляют собой главную камеру, землю, небо и солнце. Эти объекты можно увидеть, выбрав в VSE пункты меню Mode и затем Edit.
В левой части окна редактирования, показанного на рис. 2, имеется панель инструментов, с помощью которой можно изменять свойства отдельных объектов. Эти свойства управляют всем, начиная от имени объекта до его положения в моделируемой среде. Кроме того, они позволяют точно управлять отображением объектов, влияя на их поведение в модели.
Рис. 2 Режим изменения свойств объектов(щелкните изображение, чтобы увеличить его)
Вернувшись в режим запуска (Run), вы можете пройтись по всей модели, используя мышь или клавиши со стрелками. С их помощью меняется точка обзора главной камеры, которая дает вам заглянуть в модель. Другим важным моментом, который стоит упомянуть, является то, что VSE позволяет отображать моделируемую сцену в разных режимах. Режим визуализации (Visual) устанавливается по умолчанию и дает реалистичную картинку моделируемой сцены. Меню Render позволяет выбирать различные режимы: Wireframe, Physics, Combined или No Rendering.
Режим No Rendering (без визуализации) также включен в список, поскольку визуализация — лишь один аспект моделирования. Наиболее важным при работе модели представляется взаимодействие между объектами. Поскольку визуализация объектов в рамках моделируемой сцены является очень ресурсоемким процессом, режим No Rendering может использоваться в случаях использования большого количества объектов.
Объекты и типы объектов
Тип объекта позволяет определить новое значение объекта определенного типа. Например, глобус в примере основной модели является объектом типа отдельной фигуры. Тип объекта является своеобразным шаблоном для новых объектов, с помощью которого определяются свойства, связанные с конкретным типом объекта. После того как объект создан, значения его свойств могут меняться, но тип объекта будет определять, какие свойства входят в его состав.
При добавлении объекта в модель среда VSE требует указать тип объекта. Например, чтобы добавить робота, такого как Create компании iRobot, вам нужно добавить новый объект с помощью программы VSE, выбрав последовательно в режиме Edit пункты меню Entity и New. Это приведет к появлению на экране диалогового окна New Entity (см. рис. 3).
Рис. 3 Добавление нового объекта в окне New Entity
Робот Create компании iRobot является одним из роботов, для которых в программе MSRS имеется тип объекта. Это означает, что вы можете добавить нового робота Create в свою модель, просто воспользовавшись для этого окном New Entity. Для этого в диалоговом окне New Entity необходимо выбрать в качестве типа iRobotCreate и дать ему уникальное имя, например «Объект Create». После нажатия кнопки OK робот Create появится в сцене моделирования.
Программное добавление нового объекта
MSRS предлагает несколько способов создания моделей и работы с ними. Кроме использования VSE, вы можете добавлять объекты в модель программным способом путем создания проекта службы DSS. MSRS предоставляет шаблон Visual Studio, который можно использовать для создания новой службы DSS. Установив программу MSRS, выберите шаблон Simple Dss Service (1.5), чтобы создать новый проект Visual Studio (см. рис. 4).
Рис. 4 Создание новой службы DSS в шаблоне Visual Studio 2005 (щелкните изображение, чтобы увеличить его)
Создание новой службы DSS с помощью шаблона приведет к созданию файлов двух классов. Класс реализации, который по умолчанию имеет такое же имя, что и проект, является файлом, содержащим текст программы для создания нового объекта. Одновременно создаваемые программно, объекты будут требовать наличия доступа к сборкам, не входящих в состав шаблона Simple DSS Service. Поэтому вам необходимо будет добавить ссылки на сборки, показанные на рис. 5.

Рис. 5 Сборки, включенные в проект модели
| Имя сборки |
Описание |
| PhysicsEngine |
Предоставляет доступ к программе моделирования физических взаимодействий AGEIA. |
| RoboticsCommon |
Предоставляет доступ к пространству имен PhysicalModel, которое используется для задания физических параметров роботов. |
| SimulationCommon |
Предоставляет доступ к определению типов, используемых при работе с моделями и программами обработки физических взаимодействий. |
| SimulationEngine |
Предоставляет доступ к обработчику модели. |
| SimulationEngine.proxy |
Представляет собой прокси для обработчика модели, который используется при загрузке обработчика модели в качестве партнера. |
После добавления ссылок необходимо добавить следующие описания пространства имен в файл класса реализации:
using Microsoft.Robotics.Simulation;
using Microsoft.Robotics.Simulation.Engine;
using engineproxy = Microsoft.Robotics.Simulation.Engine.Proxy;
using Microsoft.Robotics.Simulation.Physics;
using Microsoft.Robotics.PhysicalModel;
Чтобы иметь представление о том, какой код необходим для вашей модели, для начала изучите учебники по моделированию, поставляемые с MSRS. Примеры, содержащиеся в папке учебника \samples\simulation, которая создается при установке MSRS, соответствует моделям, доступным из меню установленного MSRS. Например, основная среда модели будет аналогична проекту SimulationTutorial1.
Если вы откроете проект SimulationTutorial1 с помощью Visual Studio 2005, вы увидите код, который используется для создания среды основной модели. Первое, о чем нужно упомянуть, — это метод Start, который вызывается автоматически при запуске службы:
protected override void Start()
{
base.Start();
// Orient sim camera view point
SetupCamera();
// Add objects (entities) in our simulated world
PopulateWorld();
}
Метод Start — это то место, где вы добавляете код, описывающий среду вашей модели. В проекте SimulationTutorial1 он включает в себя задание камеры и заполнение сцены модели объектами.
Кроме главной камеры, основная среда модели содержит объекты, используемые для отображения неба, земли, коробки и глобуса. Код, вставляющий глобус или текстурованную сферу, представлен на рис. 6.

Рис. 6 Вставка глобуса
void AddTexturedSphere(Vector3 position)
{
SingleShapeEntity entity = new SingleShapeEntity(
new SphereShape(
new SphereShapeProperties(10, // mass in kg
new Pose(), // pose of shape within entity
1)), //default radius
position);
entity.State.Assets.Mesh = "earth.obj";
entity.SphereShape.SphereState.Material =
new MaterialProperties("sphereMaterial", 0.5f, 0.4f, 0.5f);
// Name the entity
entity.State.Name = "detailed sphere";
// Insert entity in simulation.
SimulationEngine.GlobalInstancePort.Insert(entity);
}
Первая строка программы метода AddTexturedSphere создает объект SingleShapeEntity. Этот тип отображает простой геометрический объект, такой как сфера, он используется в тех случаях, когда вам надо добавлять объекты простой геометрической формы. В данном случае я создаю объект массой 10 килограмм или примерно четыре с половиной фунта.
Сетка, назначенная для этого объекта, представляет собой объектный файл, имеющий расширение obj. Объектный файл создается с помощью программы трехмерного моделирования и экспортируется в формат псевдонима объекта. Программа MSRS требует, чтобы файл объектной сетки был в указанном формате. Последнее, что нужно сделать в методе the AddTexturedSphere, — вставить объект сферы в среду модели.
Определение нового объекта в VSE
Давайте теперь создадим новый объект, представляющий робота Boe-Bot производства компании Parallax. Boe-Bot — маленький колесный робот, который имеет систему двухколесного привода с дифференциалом (фото показано на
рис. 7). Дополнительные сведения о роботе Boe-Bot можно найти на веб-узле компании Parallax по адресу:
parallax.com.
Рис. 7 Робот Boe-Bot компании Parallax (щелкните изображение, чтобы увеличить его)
Boe-Bot is — одна из нескольких платформ роботов, поддерживаемых "коробочной" версией программы MSRS. Это означает, что установленная программа MSRS содержит основные службы, используемые для управления системой привода Boe-Bot и встроенными контактными датчиками. Хотя в MSRS имеются основные службы для платформы Boe-Bot, непосредственно объекта типа "Boe-Bot" в ней нет.
Создание класса объектов
Чтобы создать новый тип объектов для робота Boe-Bot, мне нужно добавить класс, который является производным класса DifferentialDriveEntity. Для получения производного класса от DifferentialDriveEntity я могу использовать программу, которая описывает поведение робота Boe-Bot при движении в моделируемой среде. Программа, использованная для создания типа объектов для BoeBot, показана на рис. 8.

Рис. 8 Создание типа объектов BoeBot
[DataContract]
public class BoeBot : DifferentialDriveEntity
{
Port<EntityContactNotification> _notifications =
new Port<EntityContactNotification>();
// Default constructor, used for creating the entity from XML
public BoeBot() { }
// Custom constructor for building model from hardcoded values.
// Used to create entity programmatically
public BoeBot(Vector3 initialPos)
{
MASS = 0.454f; //in kilograms (around 1 pound)
// the default settings approximate the BoeBot chassis
CHASSIS_DIMENSIONS = new Vector3(0.09f, //meters wide
0.09f, //meters high
0.13f); //meters long
FRONT_WHEEL_MASS = 0.01f;
CHASSIS_CLEARANCE = 0.015f;
FRONT_WHEEL_RADIUS = 0.025f;
CASTER_WHEEL_RADIUS = 0.0125f;
FRONT_WHEEL_WIDTH = 0.01f;
CASTER_WHEEL_WIDTH = 0.008f;
FRONT_AXLE_DEPTH_OFFSET = 0.01f; // distance from center of robot
base.State.Name = "BoeBot";
base.State.MassDensity.Mass = MASS;
base.State.Pose.Position = initialPos;
// chassis position
BoxShapeProperties motorBaseDesc =
new BoxShapeProperties("BoeBot Body", MASS,
new Pose(new Vector3(
0, // Use 0 for X axis offset
CHASSIS_CLEARANCE + CHASSIS_DIMENSIONS.Y / 2,
0.03f)), // minor offset in the z/depth axis
CHASSIS_DIMENSIONS);
motorBaseDesc.Material =
new MaterialProperties("high friction", 0.0f, 1.0f, 20.0f);
motorBaseDesc.Name = "Chassis";
ChassisShape = new BoxShape(motorBaseDesc);
// rear wheel is also called the castor
CASTER_WHEEL_POSITION = new Vector3(0, // center of chassis
CASTER_WHEEL_RADIUS, // distance from ground
CHASSIS_DIMENSIONS.Z / 2); // at the rear of the robot
RIGHT_FRONT_WHEEL_POSITION = new Vector3(
+CHASSIS_DIMENSIONS.X / 2,// left of center
FRONT_WHEEL_RADIUS, // distance from ground of axle
FRONT_AXLE_DEPTH_OFFSET); // distance from center, on z-axis
LEFT_FRONT_WHEEL_POSITION = new Vector3(
-CHASSIS_DIMENSIONS.X / 2,// right of center
FRONT_WHEEL_RADIUS, // distance from ground of axle
FRONT_AXLE_DEPTH_OFFSET); // distance from center, on z-axis
MotorTorqueScaling = 30;
// specify a default mesh
State.Assets.Mesh = "boe-bot.bos";
}
Конструктор для класса BoeBot используется для установки значений нескольких переменных, определенных в классе DifferentialDriveEntity. Например, параметру Mass присваивается значение 0,454, что соответствует массе в килограммах. Кроме этого, шасси Boe-Bot определяется в терминах ширины, длины и высоты. Эти параметры были получены путем взвешивания и измерения самого робота, измерения размеров выполняются с помощью метрической рулетки.
Положение робота Boe-Bot определяется с помощью набора координат, которые передаются после того, как объект создан. Эти координаты соответствуют точкам осей координат X, Y и Z. Механизм моделирования MSRS использует правую систему координат, что влияет на направление, в котором указывает ось Z.
Конструктор BoeBot также определяет положение шасси и колес внутри объекта. Класс DifferentialDriveSystem исходит из предположения, что ваш робот имеет два основных колеса и одно маленькое заднее колесо, которое используется для придания устойчивости. Питание подается на левый и правый двигатели, которые управляют главными колесами. Разница в напряжении, подаваемом на каждое из колес, определяет, движется ли робот вперед, назад, влево или вправо. Таким же методом приводится в движение и реальный робот.
Моделирование становится столь важным благодаря тому, что теоретически не имеет значения, виртуален или реален ваш робот: программа, используемая для его управления, и данные, получаемые от его датчиков, будут одинаковы. Некоторые программы, используемые в проекте моделирования, могут быть использованы для работы с реальным роботом. Вы, наверно, обратили внимание, что я сказала "теоретически". Это потому, что модель не может полностью воссоздать действительность. Модель не учитывает шум — различные неожиданности, такие как препятствия в неожиданных местах.
То, что может сделать для вас моделирование — это воссоздать достаточно реалистичную обстановку для экспериментов с новым роботом или для имитации взаимодействия нескольких роботов. Это особенно полезно в системе обучения, когда ресурсы достаточно ограничены, а число учащихся велико.
Создание сетки
Все объекты могут быть ассоциированы с сетчатой структурой, которая придает этому объекту реалистичный облик. Например, в случае глобуса такая сетчатая структура делает его похожим на планету Земля. Строго говоря, необязательно ассоциировать объект с сетчатой структурой, но если вы имеете дело со сложным объектом, таким как робот, предпочтительней иметь сетчатый объект.
Для создания сетчатой структуры можно воспользоваться практически любым трехмерным редактором. При написании этой статьи мне повезло: Стивен Грант, мой коллега, создал для меня сетчатого Boe-Bot с помощью программы трехмерной графики, называемой SoftImage (подробней об этой программе см.
softimage.com). Файлы, связанные с этой сетчатой структурой, включены в состав файла ZIP для загрузки, прилагаемого к статье. Чтобы следовать изложению статьи, загрузите этот файл ZIP, извлеките файлы из архива и скопируйте содержимое папки Boe-Bot в папку /store/media, относящуюся к установленной на вашем компьютере программе MSRS.
Программа позволяет экспортировать изображения в формате obj. Не все программы способны делать это. Например, программа SolidWorks (см.
solidworks.com) — пакет трехмерной графики, рекомендованный MSRS на вики-странице Channel9 (
go.microsoft.com/fwlink/?LinkId=114031). К сожалению, программа SolidWorks не может экспортировать файлы в формате obj, поэтому для выполнения указанного преобразования рекомендуют программу, называемую Blender (
blender.org). Помните об этом, когда будете выбирать графический пакет для создания файлов сеток.
Подробности, связанные с созданием сетки для Boe-Bot, выходят за рамки данной статьи, но вы должны знать, что она была создана путем соединения друг с другом большого количества многоугольных ячеек. Например, металлическое шасси было вначале кубом, который был изменен в соответствии с формой и размерами Boe-Bot. Для отображения колес были добавлены цилиндрические объекты. Были установлены иерархические связи, чтобы связать колеса с шасси и дать возможность всему объекту работать как единое целое. Результатом (как видно на рис. 9) является изображение, представляющее сам робот Boe-Bot.
Рис. 9 Создание файла сетчатой структуры робота Boe-Bot с помощью программы SoftImage (Щелкните изображение, чтобы увеличить его)
Преобразование сеток в двоичный формат
MSRS имеет в своем составе программу командной строки, которая может преобразовывать файлы obj в оптимизированные двоичные файлы с расширением bos. Достоинством данного типа файлов заключается в том, что он загружается гораздо быстрей, чем файл obj. Программа командной строки, называемая Obj2bos.exe, может вызываться с помощью пункта меню "командная строка" в программе MSRS.
При работе с сетками важно помнить, что материалы, которые используются для закраски физических объектов, и все объекты модели должны ассоциироваться с одним или несколькими материалами. Поэтому когда вы создаете файл obj, желательно добавить дополнительный файл материалов с расширением mtl. Он также может содержать файл картинки, которая будет использоваться в качестве текстуры. Перед тем как использовать программу преобразования сетки, эти файлы необходимо скопировать в то же место, где находится файл obj.
Файл obj и все связанные с ним файлы должны располагаться в папке /store/media, относящейся к установленной программе MSRS. Файлы, ассоциированные с сеткой Boe-Bot, которые загружаются вместе с примером программы, следующие: Aluminum.png, Boe-bot.mtl, Boe-bot.obj, BoebotWheel.png и Pcb.png. Поместив файлы в указанную папку, откройте командную строку с помощью программы MSRS и напечатайте:
Obj2bos.exe /i:"store\media\Boe-bot.obj"
Программа конвертирования создаст файл с именем Boe-bot.bos, который будет находиться в упомянутой папке. Оставьте файл здесь, он понадобится нам позже.
Создание службы моделирования
Теперь я создам службу моделирования Boe-Bot. Если вы загрузили код, прилагаемый к данной статье, убедитесь, что программа MSRS установлена, а загруженный код помещен в папку \samples, относящуюся к программе MSRS.
Если вы создаете проект "с нуля", вам необходимо будет создать новую службу DSS, используя для этого шаблон Visual Studio 2005. Вы можете назвать этот проект SimulatedBoeBot. В дополнение к ссылкам сборки, упомянутым выше, вам нужно добавить ссылку на Microsoft.Xna.Framework и добавить следующие имена ссылок в верхнюю часть файла класса SimulatedBoeBot.cs:
using xna = Microsoft.Xna.Framework;
using xnagrfx = Microsoft.Xna.Framework.Graphics;
using xnaprof = Microsoft.Robotics.Simulation.MeshLoader;
Xna framework используется программой MSRS для визуализации объектов. Ссылки Xna будут использоваться в коде, который определяет тип объекта Boe-Bot. Все типы объектов, включенных в MSRS, содержатся в пространстве имен Microsoft.Robotics.Simulation.Engine.
Заполнение сцены моделирования
Одной из основных задач любой службы модели является размещение объектов в сцене моделирования. Это действие должно выполняться при запуске службы, поэтому обычно метод с названием PopulateWorld добавляется к методу Start. Для моделирования Boe-Bot метод PopulateWorld будет выглядеть так:
private void PopulateWorld()
{
AddSky();
AddGround();
AddBoeBot(new Vector3(1, 0, 1));
AddBox(new Vector3(2, 1, 1));
}
Методы AddSky и AddGround используются для задания окружающей среды, в которую BoeBot будет помещен. Для метода AddSky создается и добавляется к модели новый тип SkyDomeEntity. Направленный свет, который подразумевает солнечный свет, также вставляется в модель (код данного метода показан на рис. 10).

Рис. 10 Добавление неба