Физико-математический факультет
Кафедра информатики и методики преподавания информатики
Выпускная квалификационная работа
РАЗРАБОТКА МЕТОДИЧЕСКОГО КОМПЛЕКСА ПО ПРОГРАММИРОВАНИЮ РОБОТОВ В СРЕДЕ MS ROBOTICS DEVELOPER STUDIO
Оглавление
Введение
Глава 1. Анализ состояния проблемы внедрения MRDS в образовательный процесс
1. 1. Программирование робота Lego Mindstorms NXT
1. 2. Анализ литературы по программированию роботов в Microsoft Robotics Developer Studio
1. 3. Интерфейс и возможности Microsoft Robotics Developer Studio
Глава 2. Методические рекомендации по основам использования виртуальной среды Microsoft Robotics Developer Studi
2. 1. Установка программы Microsoft Robotics Developer Studio
2. 2. Лабораторный практикум «Основы программирования роботов Lego Mindstorms NXT в Microsoft Robotics Developer Studio»
Заключение
Список литературы
Введение
Мы живем в эпоху информационных технологий. Сегодня компьютер является неотъемлемым атрибутом многих профессий. В этой связи выпускники школ должны уметь использовать информационные технологии в своей дальнейшей деятельности. Поэтому изучению информатики в школе должно уделяться больше внимания.
В последнее время в школах появилась и начала развитие робототехника. Учеников обучают программированию роботов и сбору собственных моделей роботов. Наиболее подходящим для этих целей роботом является Lego Mindstorms NXT. На занятиях с образовательными конструкторами LEGO дети строят действующие модели реальных механизмов, живых организмов и машин, проводят естественнонаучные эксперименты, осваивают основы информатики, алгоритмики и робототехники, попутно укрепляя свои знания по математике и физике и приобретая навыки работы в творческом коллективе.
Однако в России не все школы способны купить необходимое оборудование в достаточном объеме, поэтому нужны альтернативные варианты. Одной из таких альтернатив является программа Microsoft Robotics Developer Studio (MRDS) — новая среда программирования роботов, позволяющая школьникам создавать программы для различных моделей роботов, и что особенно важно, тестировать эти программы в виртуальной среде на манифестах.
Существуют проблемы, связанные с внедрением MRDS в школы.
Во-первых, в России MRDS малоизвестен и многие педагоги не знают об этой программе и её возможностях.
Во-вторых, нет необходимой методической литературы, которая могла бы помочь самостоятельно изучить все возможности и функции программы.
Целью данной работы является разработка методических материалов по основам использования виртуальной среды MRDS в учебном процессе образовательного учреждения.
Объект исследования: MRDS — средство разработки программ для роботов и тестирование этих программ на виртуальных роботах.
Предмет исследования: методика использования виртуальной среды MRDS в учебном процессе и внеурочной деятельности школьников.
Задачи исследования:
1. Провести сравнительный анализ сред программирования робота Lego Mindstorms NXT;
2. Провести анализ научно-методической литературы по программированию роботов в MS Robotics Developer Studio;
3. Изучить интерфейс и возможности MRDS;
4. Разработать методические рекомендации по основам использования виртуальной среды MRDS в учебном процессе и внеурочной деятельности школьников.
Глава 1. Анализ состояния проблемы внедрения MRDS в образовательный процесс
1. 1. Программирование робота Lego Mindstorms NXT
Существует много языков и сред программирования робота Lego Mindstorms NXT. Множество этих инструментальных средств делится на две группы: графические (NXT-G, Robolab, LabVIEW) и текстовые, основанные на существующих языках программирования (RobotC, leJOS, NXC). Самыми распространенными являются NXT-G, Robolab и RobotC [7].
NXT-G — бесплатная графическая среда программирования, разработанная National Instruments для Lego, которая предоставляется в стандартном наборе конструктора. Написание программы с помощью NXT-G похоже на создание блок-схемы. Программист задает схему управления роботом, используя существующие блоки, описывающие характеристики его поведения. Данный способ создания программ является наглядным и подходит для людей с разными уровнями подготовки. Так же к преимуществам данной среды программирования можно отнести то, что она является case-редактором от Lego на базе LabView и может использовать LabView для создания «My Block». «My Block» — возможность создания собственного блока, который можно использовать в написании любой программы. Однако у NXT-G существует ряд недостатков, например, медленный редактор, возможность работы только с NXT, а так же отсутствие виртуального робота и виртуальной среды для робота [7].
Robolab — графический CASE-инструмент на базе LabView от компании National Instruments, наиболее часто используемый в школах и вузах для обучения кибернетике. В отличие от NXT-G, Robolab позволяет создавать более сложные программы с нетривиальными математическими вычислениями и использовать как числа целого типа, так и числа с плавающей точкой. Так же данный инструмент имеет довольно продвинутый механизм логирования информации. Однако в Robolab отсутствует пошаговая отладка, так же как в NXT-G — нет виртуального робота и значительная стоимость с точки зрения российского потребителя [7].
RobotC — текстовая среда программирования, основанная на стандартном языке C. RobotC имеет два режима: для новичков (часть функциональности языка скрыта) и для людей, имеющих опыт в программировании. Одной из возможностей среды является управление роботами с помощью джойстика. Так же данный инструмент позволяет отлаживать программу и получать обновления показаний с датчиков в режиме реального времени. Текстовое представление можно отнести как к преимуществам, поскольку позволяет полностью контролировать написание кода, так и к недостаткам, поскольку оно является не столь наглядным как графическое представление и требует умения программировать на языке С [7]. Имеется возможность для наблюдения за поведением робота в виртуальном мире. Однако для использования RobotC в учебном процессе нужно покупать отдельно две лицензии — для Lego Mindstorms и для виртуальных миров. Бессрочная лицензия на класс стоит 500 $ и 600 $ соответственно.
QReal: Robots — среда графического программирования роботов Lego Mindstorms NXT 2. 0. Система позволяет создавать графические программы для роботов Lego Mindstorms NXT 2. 0 и исполнять эти программы прямо на компьютере, посылая команды роботу через Bluetooth-интерфейс. Программа представляется в виде последовательности блоков, соединённых потоком управления. Также возможно выполнение программы с помощью двухмерной модели робота на экране. К недостаткам этой среды можно отнести отсутствие пошаговой отладки [7].
BrixCC — бесплатная текстовая среда программирования роботов, возможно программирование на nxc (Not eXactly C — не совсем С), nbc. В этой среде программирования нет виртуального симулятора. Существуют другие программы на основе языка nxc — nxcEditor и nxcSimulator. В nxcEditor пользователь пишет программы для робота. NxcSimulator запускает окно предварительного просмотра, предназначенное для постоянного контроля над проектом. В этом окне можно проследить реакцию и изменить настройки конфигурации работа. К минусам этой программы можно отнести то, что она работает только в операционной системе Linux.
1. 2. Анализ литературы по программированию роботов в Microsoft Robotics Developer Studio
Существует достаточное количество статей по программированию роботов в MRDS. В них в основном описываются возможности, интерфейс MRDS и рассматривается, как правило, одна простая задача, в качестве примера.
Среди русскоязычной методической литературы по MRDS можно отметить только книгу Гая Василия Евгеньевича [42]. Книга посвящена описанию возможностей Visual Programming Language для программирования алгоритмов управления роботами (версия программного обеспечения — Microsot Robotics Developer Studio 2008 R3). Рассматриваются простейшие конструкции языка, способы управления движением роботов в симуляторе, методы обработки сенсорных данных. В книге освещается управление роботами только в симуляторе. Для закрепления теоретического материала приводятся практические задания. Однако автор при изложении материала использует традиционный подход — изучение языка через чисто математические задачи.
Среда рекомендуется студентам младших курсов, а также всем, кто интересуется робототехникой и программированием. Может использоваться при организации спецкурса для школьников старших классов со специализацией по информационным технологиям.
1. 3. Интерфейс и возможности Microsoft Robotics Developer Studio
Microsoft Robotics Developer Studio состоит из четырех компонентов:
1. Concurrent and Coordination Runtime (CCR) — среда организации параллельной обработки данных.
2. Decentralized Soft ware Services (DSS) — среда, которая позволяет запускать алгоритмы обработки данных на разных ЭВМ, организовывать асинхронное взаимодействие процессов управления различными подсистемами робота.
3. Visual Simulation Environment (VSE) — среда визуализации, которая позволяет экспериментировать с моделями роботов, тестировать алгоритмы управления.
4. Visual Programming Language (VPL) — язык, предназначенный для разработки программ управления роботами. Программа на таком языке представляется в виде последовательности блоков, которые выполняют обработку данных, и связей между ними. VPL рассчитан на управление как реальными роботами, так и моделями роботов в симуляторе.
Программа на языке VPL называется диаграммой. Диаграмма состоит из блоков. Блоки могут быть двух типов: «Basic Activities» — базовые активности и «Services» — сервисы. В отличие от сервисов у базовых блоков нет уникального имени. Сервисы представляют собой интерфейс к аппаратному или программному обеспечению манифеста или робота. Базовые блоки позволяют управлять процессом выполнения сервисов. На основе базовых блоков выполняется работа с переменными, организация циклов, определение констант, осуществляется передача сообщений между блоками и т. п.
В главном окне программирования роботов (Рис. 1. Главное окно MRDS) слева находятся базовые активности и сервисы, справа - структура проекта и «Properties» — свойства, а в центре — рабочая область для построения диаграммы. В состав базовых активностей входят основные блоки для управления и организации потоков данных на диаграмме. Например, «Data» — блок данных, отправляет данные разных типов на другие блоки. В списке сервисов находятся блоки, входящие в MRDS (см. каталог MRDS \ bin). Данная панель инструментов позволяет выполнять поиск сервиса по имени. Project — отображает диаграммы проекта и файлы конфигурации проекта. Properties — отображает свойства выбранного элемента диаграммы (сервиса, встроенного блока или связи между блоками).
Рис. 1. Главное окно MRDS
Visual Simulation Environment включает в себя две программы: графическая, основной задачей которой является визуализация (рендеринг) двухмерной или трехмерной компьютерной графики (работает в режиме реального времени) и физическая программа, производящая симуляцию физических законов реального мира в виртуальном мире с той или иной степенью точности. Физическая программа позволяет создавать виртуальное пространство, в которое можно добавить виртуальные статические и динамические объекты. Расчет взаимодействия тел выполняется самой программой. Рассчитывая взаимодействие тел между собой и средой, она приближает физическую модель получаемой системы к реальной, передавая уточненные геометрические данные графической программе.
Объекты в симуляторе могут создавать иерархию, реализуя отношение предок/потомок. Например, манипулятор и сенсор являются дочерними объектами робота.
Для тестирования разработанных в VPL программ был разработан симулятор Visual Simulation Environment. Это значит, что необязательно иметь реальную модель робота, чтобы протестировать созданное приложение. Достаточно воспользоваться названной программой. Программа симулятор — это некая имитационная визуальная 3D среда высокого разрешения с интегрированным физическим движком PhysX (ускорителя расчетов физики в играх) от компании Ageia Technologies. Ускоритель позволяет имитировать реалистичное физическое поведение моделей. Благодаря виртуальному миру можно:
• устраивать различные ситуации;
• добавлять предметы, препятствия;
• просматривать результат в разных перспективах;
• запускать несколько моделей роботов одновременно, причем модели могут быть различны;
• сохранять и запускать повторно «сцены мира»;
• управлять визуализацией мира.
Сценический подход позволяет моделировать окружающий мир, создавая предметы и расставляя их в нужных местах. При этом трехмерная графика точно моделирует окружение, симуляция физики поддерживается в полном объеме. Однако, есть некоторые ограничения и даже недостатки у этого симулятора. Мир симулятора идеализирован, т. е. отсутствуют искажения, имеющие место в реальном мире. Попытка же создать более точную модель требует больших усилий и затрат времени.
Для запуска реального робота Lego Mindstorms NXT в MRDS разработана возможность передачи программы через Bluetooth-адаптер. Однако в ходе тестирования этой возможности была обнаружена проблема — не все адаптеры
подходят для реализации этой задачи. Нам не удалось передать программу через встроенный Bluetooth нетбука на блок NXT.
Выводы по главе
Существует множество сред программирования роботов Lego Mindstorms NXT. Среди них мы выделяем MRDS как бесплатно распространяемую графическую среду, в состав которой входит виртуальный симулятор.
Имеющиеся на сегодняшний день методические материалы по пользованию MRDS представляют традиционный подход к изучению языков программирования высокого уровня через математические задачи. Возникает необходимость в разработке методических рекомендаций, включающих лабораторный практикум по основам программирования в этой среде, в основе которого лежат задачи на движение и изменение поведения робота.
Глава 2. Методические рекомендации по основам использования виртуальной среды Microsoft Robotics Developer Studio
2. 1.Установка программы Microsoft Robotics Developer Studio
Таблица 2. 1
План внеурочных занятий на четверть
№ |
Название |
Изучаемые элементы |
1 |
Движение вперед |
Диалоговое окно, Date, мощность моторов, блок Join и GenericDifferentialDrive, манифесты, запуск программы, Bluetooht-соединение |
2 |
Движение с поворотом |
Повторение, закрепление, Veriable, Calculate, If, Switch, тип данных (int) |
3 |
Движение по квадрату |
Повторение, закрепление, Switch, Merge, тип данных (bool) |
4 |
Движение по окружности |
Activity, тип данных (double) |
5 |
Движение по дуге |
Activity, Timer, тип данных (double) |
6 |
Движение по восьмерке |
Повторение, закрепление. |
7 |
Сенсор касания |
Generic Contact Sensors, Dashboard |
8, 9 |
Разработка проектов |
Самостоятельная разработка проектов |
Перед установкой программы убедитесь, что у вас установлен Visual C #. Поддерживаются все редакции Visual Studio 2008 и 2010 года, включающие в себя C #. В случае отсутствия Visual C # мастер создания новых служб установлен не будет.
Запустите файл Microsoft Robotics Developer Studio 2008 R3. exe. После этого появится окно установки (Рис. 2. Окно установки).
Рис. 2. Окно установки
Нажмите кнопку Install, далее начнется извлечение файлов из архива (Рис. 3).
Рис. 3. Окно извлечения файлов
Появится окно установки MRDS (Рис. 4). Нажмите на кнопку Next.
Рис. 4. Окно установки
В дальнейшем окне (Рис. 5) прочитайте условия лицензионного соглашения и установите флажок на согласие с условиями. Нажмите кнопку Next.
Рис. 5. Окно лицензионного соглашения
Следующим этапом необходимо выбрать хотите ли вы присоединиться к программе обратной связи и хотите ли автоматическую проверку обновлений? (Рис. 6)
Рис. 6. Обратная связь и проверка обновлений
Далее выберите полную комплектацию установки и нажмите Next. В следующем окне нажмите Install, ачнется установка всех необходимых подпрограмм. В последнем окне установки нажмите Finish.
Рис. Ошибка! Текст указанного стиля в документе отсутствует. 7. Выбор комплектации
Задания для самостоятельного решения
1. Просмотрите и запустите все службы программы.
2. Найдите подпрограмму создания диаграмм.
2. 2. Лабораторный практикум «Основы программирования роботов Lego Mindstorms NXT в Microsoft Robotics Developer Studio»
Лабораторная работа 1. Движение вперед
Создайте простую программу для робота. Необходимо что бы он проехал вперед один метр, с мощностью 70 процентов и остановился.
Перетащите из списка сервисов в рабочую область элемент Simple Dialog, а из базовых активностей — Data (блок данных). С него будут отправляться данные на следующий блок. Simple Dialog будет выводить на экран сообщение с кнопкой OK, по нажатию которой начнет выполняться программа. В выпадающем списке блока Data измените значение int на string и в текстовом поле напишите «старт» (Рис. 8).
Рис. 8. Блок данных и диалоговое окно
Далее необходимо соединить выход блока Data — Outgoing Response и вход Incoming Request блока Simple Dialog. В появившемся окне Connections слева выберите событие, которое будет обрабатываться, — DataValue, а справа следствие — AlertDialog. В следующем окне Data Connections значение Alert Text установите как Value.
Добавьте на диаграмму еще два блока данных. Один блок будет отвечать за мощность, а другой за расстояние, которое нужно проехать. Настройте блок мощности - тип данных Double, значение 0. 7 и блок расстояния — тип данных int, значение 1. Далее соедините Simple Dialog с блоками так, что бы они выполнялись параллельно. В появившемся окне Connections выберите AlertDialog Success — Create (Рис. 9).
Рис. 9. Мощность и расстояние
Перетащите на диаграмму блоки join и GenericDifferentialDrive. В полях join впишите значения — DrivePower и DriveDistance. Соедините выходы блоков данных с соответствующими полями. Далее соедините блоки join и GenericDifferentialDrive. В окне Connection выберите DriveDistans, а в следующем окне соответственно устанавите: Distanse — DriveDistans, Power — DrivePower, DriveDistansStage — null (Рис. 10).
Рис. 10. Отправление данных на мотор
Далее необходимо выбрать манифест для элемента GenericDifferentialDrive.
Манифесты — это своеобразные драйверы низкого уровня, или, с другой стороны — конфигурации той или иной программы VPL. Идея состоит в том, что одна и та же программа, в принципе, может выполняться на различных роботах, несмотря на то, что на низком уровне управление реализуется неодинаково. Благодаря манифестам, чтобы перенести программу VPL с одного железа робота на другое, нужно выбрать манифесты соответствующего робота для основных модулей диаграммы. Таким же образом — с помощью специальных «Simulation»-манифестов — реализуется перенос программы в среду симуляции.
В контекстном меню GenericDifferentialDrive выберите Set Configuration. После этого, выберите в разделе Set Configuration — Use a manifest (Рис.11 ).
Рис. 11. Создание манифеста
В результате в нижней части появится выпадающий список «Use existing or create a new manifest» и кнопка «Import manifest» (Рис. 12).
Рис. 12. Загрузка манифеста
С помощью кнопки импортируйте манифест «LEGO. NXT. Tribot. Simulation. Manifest. xml» и выберите его. Можно выбрать манифест другого робота, но в данном примере мы протестируем именно LEGO. NXT. Tribot. Главное преимущество этой программы в том, что можно научиться программировать без реального робота, используя среду с виртуальным роботом.
Рис. 13. Выбор манифеста
В результате, у нас должна быть такая диаграмма (рис. 14)
Рис. Ошибка! Текст указанного стиля в документе отсутствует. 14. Диаграмма
Теперь запустите нашу программу на выполнение. Нажмите F5 или в меню «Run» — пункт «Start». В результате появится окно Run, в котором отображаются сообщения о состоянии выполнения (рис. 15).
Рис. 15. Окно запуска «Run»
После загрузки манифеста и запуска всех необходимых сервисов появляется окно, в котором видим виртуальную среду и робота и окно Alert Dialog с кнопкой (Рис. 16). Активируйте кнопку, и робот начнет движение. По окончании выполнения программы закройте окна симуляции и запуска.
Рис. 16. Виртуальная среда
Проверьте, как приложение будет управлять реальным роботом. Предварительно выполните соединение модуля NXT с компьютером через Bluetooth. Для этого убедитесь, что комплект Bluetooth включен на NXT и объявлен видимым (Visible). Проверьте работу Bluetooth на компьютере.
Далее необходимо на компьютере добавить новое устройство через программу Bluetooth. Найдите программу на панели управления, кликните «Добавить устройство». Компьютер начнет автоматический поиск устройств с поддержкой Bluetooth. Через некоторое время на экране в рабочем окне появится список доступных устройств. Выберите устройство, к которому хотите подключиться и кликните по кнопке «подключиться».
При первом подключении к устройству, отобразится окно ввода пароля. Введите пароль, используемый для связи с устройством (по умолчанию это 1234), подтвердите нажатием OK.
Введите пароль на NXT и подтвердите соединение нажатием оранжевой кнопки (Ввод, Enter). Если набрали пароль по умолчанию, просто нажмите оранжевую кнопку.
Внесите в диаграмму изменения. Добавьте сервис LegoNXTBrick, выделите его и в правом окне выберите Set initial configuration, в списке Settings укажите следующие параметры:
SerialPort — укажите номер порта который определил компьютер при соединении, это можно проверить в панели управления в настройках Bluetooth;
BaudeRate — частота передачи данных, можно ввести 9600;
ConnectionType — укажите Bluetooth.
Данный сервис не надо соединять с другими блоками, он будет отвечать за соединение с микрокомпьютером NXT. Добавьте сервис LegoNXTDrive, выделите его и в разделе Set initial configuration укажите следующие параметры:
Partners — выберите LegoNXTBrick;
RightWheel — в разделе Port выберите тот порт, к которому подключен правый привод;
LeftWheel — в разделе Port выбираем тот порт, к которому подключен левый привод.
Данный сервис отвечает за взаимодействие с приводами робота. Соедините блок Join с данным сервисом, в появившемся окне
выбираем DriveDistance(Generic Differential Drive), в следующем окне сделайте по аналогии с предыдущим сервисом (GenericDifferentialDrive).
Задания для самостоятельного решения
1. Робот должен проехать вперед 1, 5 метра с мощностью 0. 1;
2. Робот должен проехать назад с теми же параметрами;
3. Робот должен проехать назад 2 метра с мощностью 0. 5.
Лабораторная работа 2. Движение вперед с поворотом
Пример: необходимо, чтобы робот проехал вперед 1 метр, повернул налево на 90 градусов и проехал еще 1 метр.
Движение робота состоит из следующих этапов:
движение прямо;
поворот на 90 градусов.
Разместите на диаграмме блоки, как показано наРис. Ошибка! Текст указанного стиля в документе отсутствует. 17. В данной последовательности выполняется установка параметров сервиса GenericDiferentialDrive.
Рис. 17. Тестирование готовности пользователя
Параметры действия DriveDistance:
Distance = 1;
Power = 0. 5;
DriveDistanceStage = DriveStage. InitialRequest.
Определите переменную Step (тип int), в которой будет храниться следующее действие, выполняемое роботом при движении.
Поместите на диаграмму блок GenericDiferentialDrive, который будет копией существующего сервиса. Добавьте на диаграмму блок If. Соедините уведомляющий выход GenericDiferentialDrive — Notification и вход блока If. Выберите сообщение DriveDistance. В текстовом поле блока If укажите выражение value.
DriveDistanceStage = DriveStage. Completed, проверяющее, выполнилась ли операция DriveDistance. Добавьте на диаграмму блок If. Соедините уведомляющий выход блока GenericDifferentialDrive и блок If, выбрав сообщение RotateDegrees. В текстовом поле блока If укажите выражение value. RotateDegreesStage = DriveStage. Completed. Объедините выходы блоков If с помощью Merge.
Поместите на диаграмму блоки Calculate и Variable, после чего соедините Merge и Calculate, Calculate и Variable (Рис. 18).
Рис. 18. Обработка уведомлений
Отметим, что блок Calculate перевернут, поэтому входящее сообщение поступает на блок справа, а не слева. Изменить ориентацию блока можно, используя пункт Flip Connections контекстного меню.
Поместите на диаграмму блок Switch (рис. 2. 18). Добавьте в блок два выхода (Else). Соедините выход блока Calculate c входом блока Switch.
Робот должен последовательно выполнять следующие операции: поворот на 90 градусов, движение прямо. Учитывая этот порядок, соедините блоки Switch и GenericDiferentialDrive. Установите параметр Degrees для операции RotateDegrees в значение 90. Для каждой операции DriveDistance установите параметр Distance в 1. В результате должна получиться часть диаграммы, показанная на Рис. 19.
Рис. 19. Основная часть диаграммы управления движением
Рассмотрим процесс выполнения диаграммы. После записи в переменную Step нулевого значения на экране появится диалоговое окно. Нажатие пользователем кнопки ОK приведет к перемещению робота вперед на 1 метр. После генерации уведомляющего сообщения о завершении действия (поворота или перемещения), значение переменной Step увеличивается на 1. Новое значение используется для выбора следующего действия, которое должен выполнить робот, для чего используется блок Switch. Как только значение Step станет равным 3, выполнится ветвь Else и диаграмма завершит работу.
Задания для самостоятельного решения
1. Робот должен проехать вперед 1 метр и повернуть направо на 90 градусов.
2. Робот должен проехать назад на 0. 5 метра и повернуть налево на 30 градусов, далее проехать вперед 0. 6 метра.
3. Робот должен проехать назад на 0. 5 метра, развернуться на 180 градусов и ехать вперед в том же направлении.
Лабораторная работа 3. Движение по квадрату
Пример: необходимо, что бы робот проехал по квадрату.
Движение робота состоит из следующих этапов:
движение прямо;
поворот на 90 градусов.
Указанные действия робот должен выполнить четыре раза.
Задачу будем решать по аналогии с предыдущей. Разместите на диаграмме блоки, как показано на Рис. 20.
Рис.20. Тестирование готовности пользователя
Параметры действия DriveDistance:
Distance = 1;
Power = 0. 5;
DriveDistanceStage = DriveStage. InitialRequest.
Определите переменную Step (тип int), в которой будет храниться следующее действие, выполняемое роботом при движении.
Поместите на диаграмму блок GenericDifferentialDrive, который будет копией существующего сервиса. Добавьте на диаграмму блок If. Соедините уведомляющий выход GenericDifferentialDrive и блок If. Выберите сообщение DriveDistance. В текстовом поле блока If укажите выражение value.
DriveDistanceStage = DriveStage. Completed, проверяющее, выполнилась ли операция DriveDistance. Добавьте на диаграмму блок If. Соедините уведомляющий выход блока GenericDifferentialDrive и блок If, выбрав сообщение RotateDegrees. В текстовом поле блока If укажите выражение value. RotateDegreesStage = DriveStage. Completed. Объедините выходы блоков If с помощью Merge.
Поместите на диаграмму блоки Calculate и Variable, после чего соедините Merge и Calculate, Calculate и Variable (Рис.21).
Рис. 21. Обработка уведомлений
Поместите на диаграмму блок Switch (Рис. Ошибка! Текст указанного стиля в документе отсутствует. 22). Добавьте в блок семь выходов (Else). Соедините выход блока Calculate c входом блока Switch.
Робот должен последовательно выполнять следующие операции: поворот на 90 градусов, движение прямо. Учитывая этот порядок, соедините блоки Switch и GenericDifferentialDrive. Установите параметр Degrees для операции RotateDegrees в значение 90. Для каждой операции DriveDistance установите параметр Distance в 1. В результате должна получиться часть диаграммы, показанная на Рис. 22.
Рис. 22. Основная часть диаграммы управления движением
Рассмотрим процесс выполнения диаграммы. После записи в переменную Step нулевого значения на экране появится диалоговое окно. Нажатие пользователем кнопки ОК приведет к перемещению робота вперед на 1 метр.
После генерации уведомляющего сообщения о завершении действия (поворота или перемещения), значение переменной Step увеличивается на 1. Новое значение используется для выбора следующего действия, которое должен выполнить робот, для чего используется блок Switch. Как только значение Step станет равным 8, выполнится ветвь Else и диаграмма завершит работу.
Задания для самостоятельного решения
1. Робот должен проехать по квадрату задним ходом;
2. Робот должен проехать вперед по треугольнику;
3. Робот должен проехать вперед по шестиугольнику.
Лабораторная работа 4. Движение по окружности
Пример: Необходимо что бы робот проехал по окружности.
Для этого необходимо на правое и левое колеса подать разное количество энергии он будет двигаться по дуге, которая по истечении определенного промежутка времени замкнется в круг.
Разработайте блок, который будет определять количество энергии, подаваемое на левое и правое колеса. Добавьте на диаграмму блок Activity и на панели свойств установите для него имя TurningRadiusToWheelPowers (Рис. 23).
Рис. 23. Блок Activity
Двойным кликом по блоку, создайте вкладку TurningRadiusToWheelPowers (Рис. 24).
Рис. 24. Создание вкладки TurningRadiusToWheelPowers
Щелкните по иконке рядом с Action, появится окно настроек (рис. 24). Для того что бы вписать нужные параметры необходимо нажать на кнопку Add, а для того что бы удалить — Delete.
Впишите действие CalculateWheelPowers. Укажите для действия два входных параметра TurningRadius (тип double) и TurnRight (тип bool) и два выходных параметра Left и Right (тип double) (Рис. 25). Параметр TurnRight определяет направление поворота (направо или налево), TurningRadius — радиус поворота.
Рис. 25. Окно настроек
На диаграмму TurningRadiusToWheelPowers добавьте два блока Calculate и блок Data. Первый блок Calculate извлекает значение TurnRight из входящего сообщения. Блок Data устанавливает количество энергии, подаваемой на левое колесо. Второй блок Calculate вычисляет величину энергии, которая будет подана на правое колесо. Значения, поступающие с блоков Data и Calculate, объединяются с помощью Join (Рис. 26). Блок If, соединенный с блоком Join, используется для проверки значения величины TurnRight (Рис. 27).
Рис. 26. Вычисление энергии, подаваемой на колеса
Добавьте необходимые блоки и постройте диаграмму (Рис. 27). Если TurnRight = True, то значения, хранящиеся в Left и Right, отправляются на левое и правое колеса, в результате робот поворачивает направо. Если TurnRight = False, тогда значение, хранящееся в Left, отправляется на правое колесо, а значение, хранящееся в Right, — на левое, в результате робот поворачивает налево (Рис. 27).
Рис. 27. Вычисление энергии, подаваемой на колеса
Добавьте на основную диаграмму сервис GenericDifferentialDrive и соедините выход блока TurningRadiusToWheelPowers и вход блока GenericDiffrentialDrive (Left с LeftWheelPower и Right с RightWheelPower). Разместите на диаграмме два блока Data, установите значение первого блока в true (тип bool), а второго — в 1 (тип double). Значения, хранящиеся в блоках, отправляются на вход TurningRadiusToWheelPowers (Рис. Ошибка! Текст указанного стиля в документе отсутствует.. 28).
Рассмотрите способ, который позволит выполнить запуск робота по команде пользователя. Разместите на диаграмме блоки Data и SimpleDialog и соедините их (Рис. 28). Блок Data содержит текст «Нажмите ОК, когда будите готовы». После запуска диаграммы появится диалоговое окно с сообщением «Нажмите ОК, когда будите готовы», по нажатию которой продолжится выполнение диаграммы и робот начнет движение.
Рис. 28. Основная диаграмма
Задания для самостоятельной работы
1. Измените радиус окружности;
2. Измените силу, посмотрите поведение робота.
Лабораторная работа 5. Движение по дуге
Пример: Необходимо чтобы робот проехал по дуге.
Движение робота по дуге выполняется в том случае, если на его левое и правое колеса подано разное количество энергии. Для того чтобы дуга не замкнулась в круг, нужно по истечении определенного промежутка времени остановить движение.
Программа пишется так же как и движение по окружности. Используйте для организации движения по дуге сервис Timer. Поместите данный сервис на диаграмму и соедините выход GenericDifferentialDrive с входом Timer (результат SetDrivePower — Success нужно соединить с действием SetTimer). В диалоговом окне Data Connections отметьте пункт Edit Values Directly и установите value в значение 1500 (единица измерения — миллисекунды). Установить значение Timer можно и с использованием блока Data, хотя это приведет к увеличению количества блоков на диаграмме.
Добавьте на диаграмму блок Timer, создав копию существующего блока (два блока Timer на диаграмме соответствуют одному сервису). Соедините уведомляющий выход только что размещенного сервиса Timer и блока Data, в котором хранится вещественное значение 0 (используйте уведомляющее сообщение TimerComplete). После того как сработает таймер, нужно остановить робота. Для этого можно отправить на его левое и правое колеса нулевое значение энергии (рис. 29).
Рис. 29. Движение по дуге
Задание для самостоятельного решения
Попробуйте поменять входные данные в программе и посмотрите, как будет вести себя робот.
Лабораторная работа 6. Движение по восьмерке
Пример: необходимо чтобы робот проехал по восьмерке.
Движение робота по восьмерке состоит из движений по окружности. После того как робот завершит движение по одной окружности, он должен поменять направление движения и начать движение по окружности снова.
Пусть переменная TurnRight (тип bool) определяет направление движения робота (Рис. 30).
Рис. 30. Установка значения переменной TurnRight
Установите время ожидания сервиса Timer в 5000 миллисекунд (предполагается, что этого времени будет достаточно, чтобы робот проехал круг радиуса 1 метр). Добавьте на диаграмму блок Calculate и соедините его с блоком Timer. В поле блока Calculate введите значение! state. TurnRight. В результате будет получена диаграмма, приведенная на Рис. 31.
Рис. 31. Диаграмма для организации движения робота по восьмерке
Рассмотрим процесс выполнения диаграммы.
После запуска диаграммы на экране появляется диалоговое окно с текстом «Ok». После нажатия на кнопку OK будет установлено значение переменной TurnRight, а также поля блока Join (TurnRight и TurningRadius).
Сервис Timer, соединенный с блоками Calculate и Data, после запуска диаграммы запущен не будет, так как у него не установлено время ожидания до очередного срабатывания.
Сообщение с блока Join поступает на вход блока TurningRadiusTo-WheelPowers, после чего запускается блок GenericDifferentialDrive.
Устанавливается значение времени ожидания сервиса Timer.
После ожидания 5000 миллисекунд сервис Timer, соединенный с блоками Calculate и Data, сгенерирует сообщение. С помощью блока Variable в переменную TurnRight записывается ее инвертированное значение. Восклицательный знак в текстовом поле блока Calculate обозначает операцию инвертирования: если в переменной TurnRight хранится значение false, оно будет инвертировано в true и наоборот. Заполняются значения полей блока Join.
Выполняются сервисы TurningRadiusToWheelPowers и GenericDif eren-tialDrive, устанавливается значение времени ожидания сервиса Timer.
Задания для самостоятельной работы
1. Поменяйте радиус окружности;
2. Поменяйте мощность движения робота, посмотрите, как поведет себя робот.
Лабораторная работа 7. Сенсор касания
Создайте программу, которая будет выводить на экран диалоговое окошко при срабатывании контактного сенсора робота.
Запустите MRDS. Перетащите из списка «Services» в рабочую область элемент «Generic Contact Sensors».
У блока Generic Contact Sensors есть вход Incoming Request, выходы Outgoing Response и Notification. В нашем случае будем использовать выход Notification, уведомление.
После этого, перетащите из списка Basic Activities в рабочую область элемент Data. Введите в поле значение «Ой! » и в выпадающем списке элемента выберите тип String.
Теперь соедините эти два блока: выход Notification блока Generic Contact Sensors и вход блока Data. В появившемся окне Connections слева выберите событие, которое будет обрабатываться — ContactSensorUpdate, а справа следствие — Create.
Теперь добавьте из списка Services в рабочую область элемент Simple Dialog, соедините выход блока Data и вход блока Simple Dialog. В появившемся окне Connections слева выберите событие, которое будет обрабатываться, а справа следствие. В данном случае DataValue передается в AlertDialog.
После этого появится окно «Data Connections», в котором необходимо указать, что наше Value (а это у нас слово «Ой! ») передается в AlertText, который будет выводиться в «AlertDialog».
В результате, у нас должна быть такая диаграмма (Рис. 32):
Рис. 32. Диаграмма
Получилась программа, которая при нажатии на контактный сенсор робота выводит нам на экран диалоговое окно с надписью «Ой! »
Так как в виртуальной эмулированной среде «дотронутся» к сенсору робота рукой не получится, мы добавим в рабочую область элемент Simple Dashboard из списка Services, с помощью которого мы сможем «ездить» по виртуальной среде. И «дотронувшись» сенсором до какого-нибудь объекта, увидеть результат роботы нашей программы.
Теперь запустим нашу программу на выполнение.
После загрузки манифеста и запуска всех необходимых сервисов появляется окно, в котором видим виртуальную среду, робота и окно «Dashboard», с помощью которого будем управлять роботом (Рис. 33).
Рис. 33. Виртуальная среда
Необходимо установить препятствие для того чтобы сработал сенсор. Для этого в виртуальной среде переключитесь в режим редактирования: выберите пункт Mode ^ Edit главного меню окна. После запуска редактора окно будет содержать отображение сцены, список объектов сцены и свойства выделенного объекта (Рис. 34).
Рис. 34. Установка препятствия
Объект можно отметить на сцене, если выделить его в списке объектов и нажать клавишу Ctrl. Если после выполнения данной операции камера не показывает объект, то можно использовать сочетания клавиш Ctrl, Shift и клавиш управления курсором для просмотра различных видов объекта:
Ctrl + клавиша вверх: вид сверху;
Ctrl + Shift + клавиша вверх: вид снизу;
Ctrl + клавиша влево: вид справа;
Ctrl + Shift + клавиша влево: вид слева;
Ctrl + клавиша вправо: вид спереди;
Ctrl + Shift + клавиша вправо: вид сзади.
Для перемещения выбранного объекта по сцене нужно указать координаты расположения объекта в меню редактирования свойств. Подобным образом выполняется вращение объекта вдоль каждой из осей.
Выберете как препятствие greybox — серый прямоугольный параллелепипед, установите его координаты так, что бы он оказался перед роботом.
Сцена, находящаяся в симуляторе, может быть сохранена в XML-файл и затем загружена. При загрузке сцены все объекты получают то же местоположение и скорость, которые они имели при сохранении сцены. Для сохранения сцены используется пункт меню File → Save Scene, для загрузки — File→Load Scene. При сохранении сцены записываются два файла: первый содержит состояние сцены и имеет расширение. xml, второй содержит манифест для сцены и заканчивается на manifest. xml.
Далее необходимо подключиться к роботу — нажимаем «Connect» в окне (Рис. 35).
Рис. 35. Подключение к роботу
После чего, делаем двойной клик по «LegoNXTMotorBase», так что бы в поле «Differential Drive» Motor поменял значение на «On» и клик по кнопке «Drive» (Рис. 36).
Рис. 36. Запуск робота
Так как у нас нет джойстика, в выпадающем списке «Device» участка «Direct Input Device» — пусто. В таком случае мы можем использовать «трэкбол» (круг с перпендикулярными радиусами) (Рис. 37). Кликая по нему мишкой мы можем управлять движением робота. Теперь подъедем роботом к любому предмету и посмотрим, как сработает наша программа при контакте робота с предметом.
Рис. 37. Результат выполнения программы
Задачи для самостоятельного решения
1. Напишите такую же программу, но так, что бы робот ехал сам (перед роботом необходимо установить препятствие);
2. Создайте свою сцену для робота. Попробуйте использовать различные объекты.
Лабораторная работа 8-9. Разработка проектов
1 задача: робот движется вперед и назад случайное число оборотов, до столкновения с препятствием. Подсчитать количество нажатий кнопки в течение 10 секунд.
2 задача: на сцене расставлены препятствия, робот движется вперед случайное число оборотов, поворачивается на заданное число градусов (число градусов вводится после запуска программы). Подсчитать количество препятствий встреченных на пути в течение 10 секунд.
Заключение
Внедрение робототехники в образовательный процесс школ и вузов требует значительных финансовых затрат на закупку оборудования и лицензий на соответствующее программное обеспечение. Мы считаем, что сегодня нужны бесплатно распространяемые программные среды, в которых можно наблюдать поведение виртуальных моделей роботов. Это позволит снизить затраты на оборудование и будет способствовать более активному развитию школьной робототехники.
Анализ сред программирования наиболее популярного в образовании робота Lego Mindstorms NXT показал, что на сегодня существуют три среды, отвечающие критерию «виртуальный симулятор + бесплатность»: QReal: Robots, nxcEditor + nxcSimulator и MS Robotics Developer Studio (MRDS). Мы остановили свой выбор на MRDS, как на среде визуального программирования от известной корпорации.
В ходе нашего исследования, изучив интерфейс и возможности MRDS, а также имеющуюся методическую литературу, были выявлены две проблемы:
1. использование математических задач при изучении языка программирования высокого уровня Visual Programming Language, встроенного в MRDS, способно снизить мотивацию обучения;
2. не удаётся проверка программ на реальном роботе.
В рамках решения первой проблемы был разработан лабораторный практикум «Основы программирования роботов Lego Mindstorms NXT в MRDS», в основе которого лежат задачи на движение и изменение поведения виртуального робота.
Вторая проблема нами так и не была решена. Считаем, что это связано с особенностями подключения робота Lego Mindstorms NXT по Bluetooth-соединению.
Список литературы
1. Microsoft Robotics Developer Studio. [Электронный ресурс] // Что такое Microsoft Robotics Developer Studio? URL:http: //www. mrds. ru/ (дата обращения: 06. 05. 2013).
2. QReal [Электронный ресурс] //QReal: Robots [сайт]. URL: http: //qreal. ru/static. php? link=robots (дата обращения: 06. 05. 2013).
3. Гай В. Е., Microsoft® Robotics Developer Studio Программирование алгоритмов управления роботами. — М.: ЭКОМ, 2012. — 184 с.
4. Марченков Е., Хижняк П. Перспективные технологии. [Электронный ресурс] // Microsoft Robotics Studio — робототехника для всех №1 (111), январь 2008.URL: http: //www. bytemag. ru/articles/detail. php? ID=6470 (дата обращения: 06. 05. 2013).
5. Образовательные инициативы. [Электронный ресурс] // Microsoft Robotics Studio. URL:http: //edu. holit. ua/index. php? Itemid=161&catid=69%3Amicrosoft-robotics-studio-&id=205%3Amicrosoft-robotics-studio&lang=ru&option=com content&view=article (дата обращения: 06. 05. 2013).
6. Программируем в Microsoft Robotics Developer Studio 4. [Электронный ресурс] // Часть 1, реальные и виртуальные роботы. URL:http: //habrahabr. ru/post/166449/(дата обращения: 06. 05. 2013).
7. Пышнова А. В., Курсовая работа: Среда программирования роботов QReal: Robots. —СПб.: 2012 г.
Скачать диплом: