Введение
Здравствуйте, глубокоуважаемые хабрачане! В своих постах я хочу вас познакомить с продуктом корпорации Microsoft — Robotics Developer Studio 4 (далее MRDS 4), расскажу как запрограммировать робота реального и виртуального. Двигаться мы будем от простого к сложному. В качестве испытуемых роботов будем использовать набор LEGO Mindstorms NXT 2.0 (наиболее удачный, на мой взгляд, вариант) и микроконтроллер Basic Stamp (наименее удачный вариант). И так, приступим!
Краткий обзор платформы Microsoft Robotics Developer Studio 4
В 2006 году Microsoft объявила о создании платформы Microsoft Robotics Developer Studio (MRDS). MRDS – это Windows – ориентированная среда разработки приложений для робототехники и симуляции. В настоящее время актуальной является версия Microsoft Robotics Developer Studio 4.
Среди особенностей: язык визуального программирования VPL, Web – и Windows – ориентированные интерфейсы, среда симуляции VSE, упрощенный доступ к датчикам, микроконтроллеру и исполнительным механизмам робота, поддержка языка программирования C#, библиотеки для многопоточного программирования и распределенного выполнения приложений CCR и DSS, поддержка многих робототехнических платформ (Eddie, Boe — Bot, CoroBot, iRobot, LEGO NXT и т.д.).
Краткий обзор набора NXT
Комплект NXT состоит из управляющего блока, четырех датчиков и трех сервоприводов.
Управляющий блок содержит в себе:
- 32-битный микроконтроллер ARM7 с 256 КБайт FLASH памяти и 64 КБайт RAM памяти
- 8-битный микроконтроллер ARM c 4 Кбайт FLASH памяти и 512 Байт RAM памяти
- Радиомодуль Bluetooth V 2.0
- USB-порт
- 3 разъема для подключения сервоприводов
- 4 разъема для подключения датчиков
- LCD дисплей разрешением 100x64 пикселей
- Динамик
- Разъем для 6 батареек типа AA
Датчики:
- Ультразвуковой сенсор
- Два тактильных датчика (Датчики касания)
- Датчик опредения цвета
Микрокомпьютер NXT с подключенными датчиками и приводами
И конечно же в наборе находятся разнообразные детали (блоки, кубики) из которых будут собраны исполнительные механизмы и несущая конструкция. В наших начинаниях мы будем использовать модель робота TriBot, т.к. его виртуальная копия имеется в симуляторе MRDS. Инструкцию по сборке данного робота можно найти на сайте фирмы Lego mindstorms.lego.com. Так же нам понадобиться Bluetooth-модуль на компьютере для подключения NXT.
Модель TriBot
Пишем приложение для робота
Напишем простое приложение для движения по прямой определенной длинны, проверим работоспособность приложения на виртуальной модели робота, а затем на реальной. Запускаем визуальный язык программирования VPL. Слева из окна Basic Activities добавим три блока Data и блок Join. Ниже Basic Activities находится окно Services из него добавим сервисы Simple Dialog (сервис который выводит окно с кнопками) и Generic Differential Drive (сервис привода). Далее необходимо соединить блоки в диаграмму. В одном блоке данных Data введем Start и выберем тип данных (стрелочка на иконке блока) string, соединим блок данных с сервисом Simple Dialog (мышью протягиваем от стрелки Outgoing Response блока данных к стрелке Incoming Request сервиса). После соединения появиться окно в котором надо указать какой тип окна нам нужен, а нужен нам Alert Dialog (небольшое окно с одной кнопкой) жмем OK, в следующем окне необходимо определить специфику данных которые будут передаваться в сервис, выбираем из выпадающего списка Value. У нас осталось еще два блока данных, в одном пишем 0.7 (разделитель именно точка, а не запятая), этот блок будет отвечать за мощность приводов (можно указать число от 0 до 1.0, эти значения будут указывать мощность привода в процентах т.е. 0% и 100% соответственно), выберем тип данных Double. В другом блоке указываем любое положительное число (этот блок отвечает за пройденную дистанцию), это длина прямой в метрах (не забываем про типы данных). Соединим сервис Simple Dialog с блоками Data, блоки Data в свою очередь с блоком Join. Блок Join (объединить) объединяет блоки Data и именует их, для этого впишем в поля блока Join, те названия которые хотим дать блокам данных (например DriveDistance и DrivePower ). Далее нужно задать манифест для сервиса Generic Differential Drive, в нашем случае манифест будет определять какую виртуальную модель робота мы хотим использовать. Выделяем сервис, в левом окне Configuration выбираем Use a manifest, жмем кнопку Import и выбираем LEGO.NXT.Tribot.Simulation.Manifest. Соединим блок Join с сервисом привода, в появившемся окне выбираем DriveDistance, в следующем окне для Power выбираем DrivePower, для Distance соответственно DriveDistance, для поля DriveDistanceStage можно выбрать null. Жмем ОК, программа для виртуального робота готова, запустим и посмотрим, что получилось. Нажимаем F5 или зеленую стрелку вверху на панели, ждем пока запуститься симулятор и появиться окно с кнопкой. Жмем кнопку ОК и лицезреем.
Готовая диаграмма для виртуального робота
Виртуальный симулятор и диалоговое окно
Проверим как наше приложение будет управлять реальным роботом. Предварительно выполним соединение модуля NXT с компьютером через Bluetooth, как это сделать вы найдете в руководстве пользователя. Внесем в диаграмму изменения.
Добавим сервис 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 метр с мощностью приводов 70%.
На мой взгляд данная аппаратно-программная платформа (NXT + MRDS 4) неплохо подходит для высокоуровневого программирования, не вникая в особенности аппаратной составляющей робота, а библиотеки сервисов (которые можно значительно расширить), позволят написать достаточно гибкий интерфейс пользователя, который превратит ваш ПК в центр управления роботом.
Автор: alfatapok