Программируем в Microsoft Robotics Developer Studio 4, реальные и виртуальные роботы, часть 1

в 9:28, , рубрики: микроконтроллеры, Программинг микроконтроллеров, Программирование, робототехника, метки: , ,

Введение

Здравствуйте, глубокоуважаемые хабрачане! В своих постах я хочу вас познакомить с продуктом корпорации 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

Датчики:

  • Ультразвуковой сенсор
  • Два тактильных датчика (Датчики касания)
  • Датчик опредения цвета

image
Микрокомпьютер NXT с подключенными датчиками и приводами

И конечно же в наборе находятся разнообразные детали (блоки, кубики) из которых будут собраны исполнительные механизмы и несущая конструкция. В наших начинаниях мы будем использовать модель робота TriBot, т.к. его виртуальная копия имеется в симуляторе MRDS. Инструкцию по сборке данного робота можно найти на сайте фирмы Lego mindstorms.lego.com. Так же нам понадобиться Bluetooth-модуль на компьютере для подключения NXT.

image
Модель 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 или зеленую стрелку вверху на панели, ждем пока запуститься симулятор и появиться окно с кнопкой. Жмем кнопку ОК и лицезреем.

image
Готовая диаграмма для виртуального робота

image
Виртуальный симулятор и диалоговое окно

Проверим как наше приложение будет управлять реальным роботом. Предварительно выполним соединение модуля 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).

image
Диаграмма для реального робота

После запуска измененной программы, наш реальный робот проедет ровно 1 метр с мощностью приводов 70%.

На мой взгляд данная аппаратно-программная платформа (NXT + MRDS 4) неплохо подходит для высокоуровневого программирования, не вникая в особенности аппаратной составляющей робота, а библиотеки сервисов (которые можно значительно расширить), позволят написать достаточно гибкий интерфейс пользователя, который превратит ваш ПК в центр управления роботом.

Автор: alfatapok

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js