3 Моделирование рабочего пространства средствами mrds
Создание рабочей сцены средствами MRDS
Для создания сцены MRDS необходимо запустить Visual Simulation Enviroment (VSE) и перейти в режим Edit, т. е. в режим редактора симулятора. Редактор симулятора открывается при выборе пункта Mode → Edit главного меню окна. После запуска редактора окно будет содержать отображение сцены, список объектов сцены и свойства выделенного объекта (рис. 3.1).
Рисунок 3.1 – Пустое окно Microsoft Visual Simulation Enviroment
Далее необходимо создать основные объекты сцены, такие как небо (sky) и землю (ground). Элемент MainCamera тоже является основным объектом, который является активным по умолчанию.
Для создания объекта sky необходимо выбрать пункт меню Entity → New. В появившемся окне, в списке Entity Type выберите элемент SkyEntity и нажать ok (рис. 3.2).
Рисунок 3.2 – Вставка элемента Sky в сцену
В появившемся окне все настройки оставляем без изменений и нажимаем ok (рис 3.3).
Рисунок 3.3 – Параметры элемента
Затем необходимо повторить процедуру для создания объекта ground. в списке Entity Type выберите элемент HightFialdEntity и нажать ok (рис. 3.4).
Рисунок 3.4 – Вставка элемента Ground в сцену
В появившемся окне также не изменяем настройки и нажимаем ок. Затем необходимо выделить появившийся объект HightFieldEntity и нажать кнопку Edit Entity для изменения свойств этого объекта (рис. 3.5).
Рисунок 3.5 – Панель свойств объекта симулятора в режиме Edit
В появившемся окне (рис. 3.6) в свойстве Flags устанавлиеваем флаг Grround, затем в свойстве EntityState нажимаем на клавишу «…».
Рисунок 3.6 – Параметры элемнта Ground
В появившемся окне (рис. 3.7) в свойстве Default Texture нажимаем на клавишу (…) и выбираем файл с необходимой нам структурой. Файл должен иметь разрешение .jpg или .dds. После этого в свойстве Name пишем имя объекта: Ground и нажимаем кнопку ок.
Рисунок 3.7 – Свойства объекта Ground
В результате проделанных действий появится готовая сцена с начальными объектами (рис. 3.8).
Рисунок 3.8 – Рабочая сцена
По завершению необходимо сохранить созданную сцену. Сцена, находящаяся в симуляторе, может быть сохранена в XML-файл и затем загружена. При загрузке сцены все объекты получают то же местоположение и скорость, которые они имели при сохранении сцены. Для сохранения сцены используется пункт меню File → Save Scene, для загрузки – File → Load Scene.
3.2 Создание объекта пространства
Создание объектов в среде Microsoft Robotic Studio не представляется возможным, поэтому объекты необходимо разрабатывать в другой среде. Для этого будет использована программная среда Autodesk 3ds Max (рис. 3.9).
В качестве контрольного примера будет создан стол. Для этого необходимо создать стандартный объект Box и задать его размеры в поле Parameters (рис. 3.10). Этот объект будет служить поверхностью стола.
Рисунок 3.9 – Программная среда Autodesk 3ds Max
Рисунок 3.10 – Создание объекта Box c заданием его параметров
Для создания ножек стола необходимо преобразовать объект Box. Для этого в поле Modifier List необходимо выбрать пункт Edit Poly и подпункт Polygon (рис. 3.11).
Рисунок 3.11 – Поле Modifier List
Затем на объекте необходимо выбрать полигоны которые будут служить ножками стола (рис. 3.12).
Рисунок 3.12 – Выбор полигонов
Далее для преобразования полигонов необходимо в свойстве Extude задать длину, а затем в поле Beve – коэффициент сужения ножек. Так как стол создавался перевернутым нужно задать его правильное положение. Для этого необходимо на панели инструментов нажать правой клавишей мыши на инструмент Select and Rotate и в поле Y задать значение 180о (рис. 3.13).
Рисунок 3.13 – Создание ножек стола
Для использования этого объекта в программной среде Microsoft Robotic Studio необходимо экспортировать его в формате .obj.
3.3 Размещение элементов (объектов) в рабочем пространстве робота
Для размещения объектов в рабочем пространстве запускаем созданную рабочую сцену (рис. 3.8). После чего для добавления элемента необходимо выбрать пункт меню Entity → New. В появившемся окне, в списке Entity Type выберите элемент SimplyTriangleMeshEnvironmentEntity и нажать ok (рис. 3.14). В появившемся окне задаем начальные координаты объекта и нажимаем ок (рис. 3.15).
.
Рисунок 3.14 – Выбор элемента SimplyTriangleMeshEnvironmentEntity
Рисунок 3.15 – Параметры объекта SimplyTriangleMeshEnvironmentEntity
Далее выбираем объект SimplyTriangleMeshEnvironmentEntity и нажимаем кнопку Edit Entity для изменения свойств этого объекта. В появившемся окне в поле EntityState нажимаем кнопку (…) . В следующем окне (рис. 3.16) в поле Name задаем имя объекта: Table. Затем в поле Mesh нажимаем кнопку (…) и выбираем необходимый нам объект рабочей среды робота в месте его размещения. В данном случае это будет 3D модель стола, созданного в программной среде Autodesk 3ds Max с названием Table.obj. Объект должен иметь разрешение .obj, .bos или .x. По завершению этих действий нажимаем кнопку ок. В результате получаем объект Konveer в рабочей сцене (рис. 3.17). После чего задаются необходимые координаты объекта.
Рисунок 3.16 – Параметры объекта Table
Рисунок 3.17 – Объект Konveer в рабочей сцене
Все последующие объекты загружаются в рабочую среду подобным образом. Робот является стандартным элементом среды разработки MRDS.
3.4 Описание программного обеспечения
3.3.1 Описание программы управления робота джойстиком
Для создания программы в Microsoft Robotic Developer необходимо запустить пустой проект в программе Visual Programming Language (рис. 3.18).
Рисунок 3.18 – Пустой проект Visual Programming Language
Для создания программы управления роботом с помощью джойстика в диаграмму добавляется сервис DesktopJoystick (рис. 3.19).
Рисунок 3.19 - Сервис DesktopJoystick
Далее к нему необходимо подключить сервис GenericDifferentialDrive. После создания связи появится диалоговое окно Connections. В нем перечислены уведомления, которые генерирует DesktopJoystick, и действия GenericDifferentialDrive, на вход которых можно отправить эти уведомления. Необходимо выбрать UpdateAxes в левой колонке и SetDrivePower в правой. Параметры связи данных сервисов показаны на рисунке 3.20 и в таблице 3.1.
Рисунок 3.20 - Связь между DesktopJoystick и GenericDifferentialDrive
Таблица 3.1 - Связь между UpdateAxes и SetDrivePower
Connections: | |
From: |
To: |
UpdateAxes |
SetDrivePower |
Data Connections: | |
Value |
Target |
(-Y + X) / 1000.0 |
LeftWheelPower |
(-Y - X) / 1000.0 |
RightWheelPower |
Для ввода указанных значений в диалоговом окне Data Connections отметьте пункт Edit values directly.
Затем в свойствах сервиса GenericDifferentialDrive (рис. 3.21) в списке поля Set Configuration выбираем пункт Use a manifest, далее нажимаем кнопку Import Manifest и выбираем созданную рабочую сцену.
Рисунок 3.21 – Свойства сервиса GenericDifferentialDrive
После запуска диаграммы откроется окно симулятора (рис. 3.22). Установив фокус ввода на окне Desktop Joystick, с помощью клавиш W, A (вперед - назад), S, D (влево - вправо) можно управлять перемещением робота.
Рисунок 3.22 – Окно симулятора с джойстиком
3.3.2 Описание программы движения робота по кругу
Программа движения робота по кругу предполагает создание блока, который будет определять количество мощности, подаваемое на левое и правое колесо. Для этого необходимо добавить на диаграмму блок Activity, установить имя TurningRadiusToWheelPowers. В состав блока TurningRadiusToWheelPowers включить действие CalculateWheelPowers. Затем указать для действия два входных параметра TurningRadius (тип double) и TurnRight (тип bool) и два выходных параметра Left и Right (тип double) (рис. 3.23). Параметр TurnRight определяет направление поворота (вправо или влево), TurningRadius – радиус поворота.
Рисунок 3.23 – Редактирование параметров блока
Рисунок 3.24 – Вычисление энергии, подаваемой на колеса
На диаграмму CalculateWheelPowers необходимо добавить два блока Calculate и блок Data. Первый блок Calculate извлекает значение TurnRight из входящего сообщения. Блок Data устанавливаетмощность, подаваемую на левое колесо. Второй блок Calculate вычисляет величину мощности, которая будет подана на правое колесо. Значения, поступающие с блоков Data и Calculate, объединяются с помощью Join (рис. 3.24). Блок If, соединенный с блоком Join, используется для проверки значения величины TurnRight (рис. 3.25):
если TurnRight = True, то значения, хранящиеся в Left и Right, отправляются на левое и правое колеса, в результате робот поворачивает вправо;
если TurnRight = False, тогда значение, хранящееся в Left, отправляется на правое колесо, а значение, хранящееся в Right, – на левое, в результате робот поворачивает влево.
Рисунок 3.25 – Вычисление энергии, подаваемой на колеса
Далее на основную диаграмму необходимо добавить сервис GenericDifferentialDrive и соедините выход блока TurningRadiusToWheelPowers и вход блока GenericDiff erentialDrive (Left с Left WheelPower и Right с RightWheelPower), разместим на диаграмме два блока Data, установить значение первого блока в true (тип bool), а второго – в 1 (тип double). Значения, хранящиеся в блоках, отправляются на вход TurningRadiusToWheelPowers (рис. 3.26).
Рисунок 3.26 – Диаграмма организации движения робота по кругу
Для запуска робота по команде пользователя, необходимо разместить на диаграмме блоки Data и SimpleDialog и соединить их (рис. 3.27). Блок Data содержит текст «Press OK when the robot is ready». После запуска диаграммы появится диалоговое окно с сообщением «Press OK when the robot is ready», и выполнение диаграммы приостановится до нажатия кнопки OK.
Рисунок 3.27 – Задержка запуска диаграммы