Ev3 кнопка что делает обзор. Работаем с Lego Mindstorms EV3 из.NET

Подключение USB

LEGO Mindstorms EV3 может подключаться к ПК или другому EV3 посредством USB-соединения. Скорость соединения и стабильность в данном случае лучше, чем при любом другом способе, включая Bluetooth.

LEGO Mindstorms EV3 имеет два порта USB.

Связь между LEGO EV3 и другими блоками LEGO EV3 в режиме подключения шлейфом.

Режим подключения шлейфом служит для соединения двух и более блоков LEGO EV3.

Данный режим:

  • предназначен для подключения более одного LEGO Mindstorms EV3;
  • служит для подключения большего количества датчиков, моторов и других устройств;
  • позволяет осуществить связь между несколькими LEGO Mindstorms EV3 (до 4), что даёт нам до 16 внешних портов и такое же количество внутренних портов;
  • даёт возможность управлять всей цепочкой с главной LEGO Mindstorms EV3;
  • не может функционировать при активном подключении Wi-Fi или Bluetooth.

Для включения режима подключения шлейфом перейдем в окно настройки проекта и поставим галочку.

Когда выбран этот режим, то для любого мотора мы можем выбрать блок EV3, который будет задействован, и необходимые датчики.

В таблице приведены варианты применения блоков EV3:

Действие

Средний мотор

Большой мотор

Рулевое управление

Независимое управление

Гироскопический

Инфракрасный

Ультразвуковой

Вращения мотора

Температуры

Счетчик энергии

Звуковой

Подключение через Bluetooth

Bluetooth позволяет LEGO Mindstorms EV3 подключиться к ПК, другому LEGO Mindstorms EV3, смартфонам и другим Bluetooth-устройствам. Дальность связи по каналу Bluetooth – до 25 м.

К одному LEGO Mindstorms EV3 можно подключить до 7 блоков. Главный блок EV3 позволяет отправлять и получать сообщения для каждого подчинённого EV3. Подчинённые EV3 могут только отправлять сообщения на главный блок EV3, но не между собой.

Последовательность соединения EV3 через Bluetooth

Для того чтобы соединить два и более блоков EV3 между собой по Bluetooth, нужно выполнить следующие действия:

1. Открыть вкладку Настройка .

2. Выберите Bluetooth и нажмите центральную кнопку.

3. Ставим Флажок видимости Bluetooth.

4. Проверьте, что знак Bluetooth ("<") виден на верхней левой стороне.

5. Сделайте упомянутую выше процедуру для нужного количества блоков EV3.

6. Войдите во кладку Подключение (Connection):

7. Нажмите на кнопку Поиск (Search):

8. Выберите EV3, которое вы хотите подключить (или к которому вы хотите подключиться) и нажмите центральную кнопку.

9. Соединяем между собой один и второй блок с ключом доступа.

Если сделать всё правильно, то в верхнем левом углу появится значок "<>", аналогично выполняется подключение других блоков EV3, если их больше двух.

Если вы выключили LEGO EV3, то связь пропадет и вам все пункты необходимо будет повторить.

Важно: для каждого блока должна быть написана своя программа.

Пример программы:

Первый блок: при нажатии датчика касания первый блок EV3 передает текст на второй блок с задержкой 3 секунды (главный блок).

Пример программы для 2 блока:

Второй блок ожидает принятия текста с первого блока, и как только он его получил, выведет на экран слово (в нашем примере это слово "Hello") в течение 10 секунд (подчинённый блок).

Подключение через Wi-Fi

Более дальняя связь возможна при подключении Wi-Fi Dongle к порту USB на EV3.

Чтобы использовать Wi-Fi, нужно установить на блок EV3 специальный модуль, используя USB-разъем (Wi-Fi адаптер (Netgear N150 Wireless Adapter (WNA1100), а также можно подключить Wi-Fi Dongle.

Описание презентации по отдельным слайдам:

1 слайд

Описание слайда:

2 слайд

Описание слайда:

Интерфейс модуля EV3 Модуль EV3 - это центр управления, который приводит в действие ваших роботов. Благодаря экрану, кнопкам управления модулем и интерфейсу модуля EV3, содержащему четыре основных окна, вам открывается доступ к потрясающему разнообразию уникальных функций модуля EV3. Это могут быть простые функции, как, например, запуск и остановка программы, или сложные, как написание самой программы.

3 слайд

Описание слайда:

Интерфейс: Меню EV3 имеет меню, которое состоит из 4-ех частей: Недавние программы (Recent Programs) Менеджер файлов (File Navigation) Программы Блока Управления (Brick Applications) Настройки Блока Управления (Brick Settings)

4 слайд

Описание слайда:

Недавние программы Запускайте недавно загруженные с настольного ПК программы. Это окно будет оставаться пустым до тех пор, пока вы не начнете загружать и запускать программы. В этом окне будут отображаться программы, которые вы запускали недавно. Программа вверху списка, которая выбирается по умолчанию, - это программа, запускавшаяся последней.

5 слайд

Описание слайда:

Менеджер файлов Доступ и управление всеми файлами, хранящимися в памяти микрокомпьютера, а также на карте памяти. Из этого окна вы будете осуществлять доступ и управление всеми файлами в вашем модуле EV3, включая файлы, хранящиеся на SD-карте. Файлы организованы по папкам проектов, которые помимо собственно программных файлов также содержат звуки и изображения, используемые в каждом проекте. Файлы можно перемещать или удалять с помощью навигатора по файлам. Программы, созданные с использованием среды программирования модуля и приложений регистрации данных модуля, хранятся отдельно в папках BrkProg_SAVE и BrkDL_SAVE.

6 слайд

Описание слайда:

Приложения Блока Управления EV3 имеет 4 предустановленных приложений: А. Представление порта. Б. Управление моторами. В. ИК управление. Г. Среда программирования модуля.

7 слайд

Описание слайда:

А. Представление порта В первом окне приложения «Представление порта» вы можете быстро просмотреть, к каким портам подсоединены датчики или моторы. С помощью кнопок управления модулем EV3 перейдите к одному из занятых портов, и вы увидите текущие показания, полученные с датчика или мотора. Установите несколько датчиков и моторов и поэкспериментируйте с разными настройками. Для того чтобы посмотреть или изменить текущие настройки для установленных моторов и датчиков, нажмите центральную кнопку. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

8 слайд

Описание слайда:

Б. Управление мотором Управляйте прямым или обратным движением любого мотора, подключенного к одному из четырех портов вывода. Существует два различных режима. В одном режиме вы сможете управлять моторами, подключенными к порту А (с помощью кнопок «Вверх» и «Вниз») и к порту D (с помощью кнопок «Влево» и «Вправо»). В другом режиме вы управляете моторами, подключенными к порту B (с помощью кнопок «Вверх» и «Вниз») и к порту С (с помощью кнопок «Влево» и «Вправо»). Переключение между этими двумя режимами осуществляется с помощью центральной кнопки. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

9 слайд

Описание слайда:

ИК-управление Управляйте прямым или обратным движением любого мотора, подключенного к одному из четырех портов вывода, используя удаленный инфракрасный маяк в качестве дистанционного управления и инфракрасный датчик в качестве приемника (инфракрасный датчик должен быть подключен к порту 4 в модуле EV3). Существует два различных режима. В одном режиме вы будете использовать каналы 1 и 2 на удаленном инфракрасном маяке. На канале 1 вы сможете управлять моторами, подключенными к порту В (используя кнопки 1 и 2 на удаленном инфракрасном маяке) и к порту С (используя кнопки 3 и 4 на удаленном инфракрасном маяке). На канале 2 вы сможете управлять моторами, подключенными к порту А (используя кнопки 1 и 2) и к порту D (используя кнопки 3 и 4). В другом режиме вы можете управлять моторами точно так же, вместо этого используя каналы 3 и 4 на удаленном инфракрасном маяке. Переключение между этими двумя режимами осуществляется с помощью центральной кнопки. Для возврата к основному окну приложений модуля нажмите кнопку «Назад».

10 слайд

Описание слайда:

Среда программирования модуля Модуль EV3 поставляется с установленным на нем программным. Приложением аналогично программному обеспечению, установленному на вашем компьютере. Данные инструкции содержат основную информацию, которая понадобиться вам для начала работы.

11 слайд

Описание слайда:

Настройки Модуля EV3 Это окно позволяет просматривать и корректировать различные общие настройки в модуле EV3.

12 слайд

Описание слайда:

Настройка громкости Вы можете увеличивать и уменьшать Громкость (Volume) во вкладке Настройки (Settings) в EV3.

13 слайд

В статье содержится описание опыта использования конструктора Lego Mindstorms EV3 для создания прототипа робота с его последующим программным и ручным управлением при помощи Robot Control Meta Language (RCML).

  • Сборка прототипа робота на базе конструктора Lego Mindstorms EV3
  • Быстрая установка и настройка RCML для Windows
  • Программное управление роботом на базе контроллера EV3
  • Ручное управление периферией робота с помощью клавиатуры и геймпада
Забегая немного вперед, добавлю, что для реализации управления Lego-роботом с помощью клавиатуры требуется создать программу, содержащую всего 3 строки программного кода. Подробней о том, как это сделать написано под катом.

1. Для начала из конструктора Lego Mindstorms EV3 был создан прототип робота, который будет использоваться для программирования и ручного пилотирования.

Описание прототипа робота

Робот имеет конструкцию схожую с автомобильным шасси. Два мотора, установленные на раме, имеют одну общую ось вращения, которая соединена с задними колесами через редуктор. Редуктор преобразует крутящий момент путем увеличения угловой скорости задней оси. Рулевое управление собрано на базе конического редуктора.



2. Следующий шаг - подготовка RCML для работы с конструктором Lego Mindstorms EV3.

Следует скачать архивы с исполняемыми файлами и файлами библиотек и .

Скаченные архивы нужно извлечь в каталог с произвольным именем, однако следует избегать русских букв в названии.

Содержимое каталога после распаковки в него архивов



Далее необходимо создать файл конфигурации config.ini, который необходимо расположить в этом же каталоге. Для реализации возможности управления контроллером EV3 при помощи клавиатуры и геймпада, следует подключить модули lego_ev3, keyboard и gamepad.

Листинг конфигурационного файла config.ini для RCML

Module = lego_ev3 module = keyboard module = gamepad


Далее следует произвести сопряжение контроллера EV3 и адаптера.

Инструкция для сопряжения контролера EV3 и Bluetooth адаптера

Инструкция содержит пример сопряжения контроллера Lego Ev3 и ПК под управлением операционной системы Windows 7.

1. Нужно перейти в раздел настроек контроллера Ev3, далее в пункт меню «Bluetooth».

2. Следует убедиться в правильности установки параметров конфигурации. На против пунктов “Visibility”,” Bluetooth” должны быть установлены галочки.

3. Необходимо перейти в «Панель управления», далее «Устройства и принтеры», далее «Устройства Bluetooth».

4. Необходимо нажать кнопку «Добавление устройства». Откроется окно для выбора доступных Bluetooth устройств.

5. Следует выбрать устройство “EV3” и нажать кнопку «Далее».

6. На экране контроллера EV3 отразится диалоговое окно «Connect?». Нужно выбрать вариант галочки, и подтвердить свой выбор нажатием центральной клавиши.

7. Далее отобразиться диалоговое окно «PASSKEY», в строке ввода должны быть указаны цифры «1234», далее следует подтвердить ключевую фразу для сопряжения устройств, путем нажатия центральной клавиши на позиции с изображением галочки.

8. В мастере сопряжения устройства появится форма для ввода ключа для сопряжения устройств. Нужно ввести код «1234» и нажать клавишу «Далее».

10. На ПК необходимо вернуться в «Панель управления», далее «Устройства и принтеры», далее «Устройства Bluetooth». В списке доступных устройств отобразится устройство, с которым было произведено сопряжение.

11. Следует двойным нажатием зайти в свойства подключения “EV3”.

14. Указанный в свойствах индекс COM-порта, следует использовать в конфигурационном файле config.ini модуля lego_ev3. В примере показаны свойства Bluetooth подключения контроллера Lego EV3 с использованием стандартного последовательного порта COM14.


Дальнейшая конфигурация модуля сводится к тому, что необходимо прописать в конфигурационном файле модуля lego_ev3 адрес COM-порта, через который осуществляется коммуникация с роботом Lego.

Листинг конфигурационного файла config.ini для модуля lego_ev3

Connection = COM14 dynamic_connection = 0


Теперь необходимо произвести настройку модуля keyboard. Модуль находится в каталоге control_modules, далее keyboard. Следует создать конфигурационный файл config.ini рядом с файлом keyboard_module.dll. Перед тем, как создать конфигурационный файл, необходимо определить, какие действия должны быть совершены по нажатию клавиш.

Модуль клавиатуры позволяет задействовать клавиши, которые имеют определенный числовой код. Таблицу виртуальных кодов клавиш можно посмотреть .

В качестве примера, буду использовать нажатия следующих клавиш:

  • Стрелки вверх/вниз используются для вращения мотора задних колес вперед/назад
  • Стрелки влево/вправо поворачивают колеса влево/вправо
Файл конфигурации модуля keyboard описывает, какие оси доступны программисту, для осуществления взаимодействия с роботом в режиме ручного управления. Таким образом, в примере получилось две управляющих группы – это оси клавиатуры. Для добавления новой оси, следует придерживаться следующих правил описания осей.

Правила описания осей для модуля keyboard

1. При добавлении новой оси, необходимо в секцию добавить свойство, имя которого есть имя оси, и присвоить ему значение кнопки клавиатуры в HEX формате, при этом на каждую кнопку заводится подобная запись, т.е. имя оси может быть использовано несколько раз. В общем случае запись в секцию будет выглядеть следующим образом:

Имя_оси = значение_кнопки_клавиатуры_в_HEX_формате
2. Необходимо установить максимальное и минимальное значение, которое может откладываться по данной оси. Для этого необходимо с новой строки добавить секцию в конфигурационном файле config.ini , одноименную с именем оси, и задать свойства upper_value и lower_value , которые соответствуют максимум и минимуму оси соответственно. В общем виде данная секция выглядит следующим образом:

[имя_оси] upper_value = максимальное_значение_оси lower_value = минимальное_значение_оси
3. Далее следует определить, какое значение будет иметь ось в случае нажатия кнопки на клавиатуре, которая ранее была прикреплена к ней. Определение значений происходит посредством создания секции, название которой состоит из имени оси и значения кнопки клавиатуры в HEX формате, разделенные между собой символом нижнего подчеркивания. Для задания значения по умолчанию (в не нажатом) и нажатом состоянии используются свойства unpressed_value и pressed_value соответственно, в которые передаются значения. Общий вид секции в таком случае выглядит следующим образом:

[имя-оси_значение-кнопки-клавиатуры] pressed_value = значение_оси_при_нажатой_клавише unpressed_value = значение_оси_при_отжатой_клавише
Текст спойлера для удобства просмотра скопирован из документации по RCML .


Для реализации управления прототипом робота был создан конфигурационный файл модуля keyboard, который включает в себя оси go и rotate. Ось go используется для задания направления движения робота. При нажатии клавиши “стрелка вверх” ось получит значение 100, при нажатии клавиши “стрелка вниз” ось примет значение -50. Ось rotate используется для установки угла поворота передних колес. При нажатии клавиши “стрелка влево” значение оси будет равно -5, при нажатии «стрелки вправо» ось примет значение 5.

Листинг конфигурационного файла config.ini для модуля keyboard

;Обязательная секция ;название_оси = код_клавиши (в HEX формате) ;Ось go получает значения от стрелки_вверх go = 0x26 ;Ось go получает значения от стрелки_вниз go = 0x28 ;Ось rotate получает значения от стрелки_влево rotate = 0x25 ;Ось rotate получает значения от стрелки_вправо rotate = 0x27 ;Описание оси go, всегда должно иметь оба ключа ;Верхняя граница значений оси go upper_value = -100 ;Нижняя граница значений оси go lower_value = 100 ;Описание оси rotate, всегда должно иметь оба ключа ;Верхняя граница значений оси rotate upper_value = -100 ;Нижняя граница значений оси rotate lower_value = 100 ;Описание поведения оси go для клавиши *стрелка_вверх* (0x26) ;При нажатии клавиши *стрелка_вверх* значение оси задать равным 50 pressed_value = 100 ;При отпускании клавиши *стрелка_вверх* значение оси задать равным 0 unpressed_value = 0 ;Описание поведения оси go для клавиши *стрелка_вниз* (0x28) ;При нажатии клавиши *стрелка_вниз* значение оси задать равным -50 pressed_value = -50 ;При отпускании клавиши *стрелка_вниз* значение оси задать равным 0 unpressed_value = 0 ;Описание поведения оси rotate для клавиши *стрелка_влево* (0x25) ;При нажатии клавиши *стрелка_влево* значение оси задать равным -5 pressed_value = -5 ;При отпускании клавиши *стрелка_влево* значение оси задать равным 0 unpressed_value = 0 ;Описание поведения оси rotate для клавиши *стрелка_вправо* (0x27) ;При нажатии клавиши *стрелка_вправо* значение оси задать равным 5 pressed_value = 5 ;При отпускании клавиши *стрелка_вправо* значение оси задать равным 0 unpressed_value = 0


Далее для реализации управления при помощи геймпада, необходимо настроить модуль gamepad. Конфигурирование модуля включает в себя создание конфигурационного файла config.ini рядом с gamepad_module.dll, находящего в каталоге control_modules, далее gamepad.

Универсальный файл конфигурации модуля для взаимодействия с геймпадом

;Обязательная секция описания используемых осей ;Ось для завершения режима ручного управления Exit = 9 ; 11 бинарных осей, соответствующих кнопкам геймпада B1 = 1 B2 = 2 B3 = 3 B4 = 4 L1 = 7 L2 = 5 R1 = 8 R2 = 6 start = 10 T1 = 11 T2 = 12 ; 4 оси стиков;Правый стик движение вверх/вниз RTUD = 13 ;Правый стик движение влево/вправо RTLR = 16 ;Левый стик движение вверх/вниз LTUD = 15 ;Левый стик движение влево/вправо LTLR = 14 ; 2 оси крестовины;Движение крестовины вверх/вниз arrowsUD = 17 ;Движение крестовины влево/вправо arrowsLR = 18 ;Описание поведения оси B1 ;При нажатии кнопки B1 значение оси задать равным 1 upper_value = 1 ;При отпускании кнопки B1 значение оси задать равным 0 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 upper_value = 1 lower_value = 0 ;Описание поведения оси правого стика движение вверх/вниз ;Значение оси при перемещении в максимально возможное верхнее положение upper_value = 0 ;Значение оси при перемещении в максимально возможное нижнее положение lower_value = 65535 upper_value = 0 lower_value = 65535 upper_value = 0 lower_value = 65535 upper_value = 0 lower_value = 65535 ;Описание поведения оси крестовины движение вверх/вниз ;Значение оси при нажатии стрелки вверх upper_value = 1 ;Значение оси при нажатии стрелки вниз lower_value = -1 upper_value = 1 lower_value = -1


Дополнительная информация об особенностях настройки модуля gamepad отображена в справочном руководстве по RCML .

3. Следующий шаг - написание программы на языке RCML.

В корне созданного каталога, необходимо создать файл программы. Имя файла программы и его расширение может быть любым, однако следует избегать русских букв в названии. В примере использовано имя файла - hello.rcml.

Для модуля lego_ev3 программный код резервирования робота, имеет следующий вид:

@tr = robot_lego_ev3;

На странице подключения модуля lego_ev3 описано большинство функций, поддерживаемых контроллером. В качестве тестового примера, была создана программа для автоматического вхождения робота в занос.

Алгоритм программы следующий:

После резервирования первого свободного робота, устанавливается связь двух двигателей для последующей работы с ними, как с одним. Затем робот начинает выполнять заносы. Программное описание действий робота позволяет точно устанавливать углы поворота передних колес и скорость вращения задних. Использование этого приёма позволяет добиваться результатов, которые сложно повторить во время ручного пилотирования с клавиатуры или геймпада.

Листинг программы для Lego робота на языке RCML

function main() { @tr = robot_lego_ev3; //Резервирование робота @tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей @tr->motorMoveTo("D",100,0,0); system.sleep(500); @tr->trackVehicleForward(-100); system.sleep(1000); @tr->motorMoveTo("D",50,-50,0); system.sleep(4000); @tr->motorMoveTo("D",50,50,0); system.sleep(4000); @tr->trackVehicleOff(); system.sleep(1000); }


Для компилирования программы необходимо использовать командную строку window. Сначала следует переместиться в созданный каталог с исполняемыми файлами rcml_compiler.exe и rcml_intepreter.exe. Далее нужно ввести следующие команды.

Команда для компилирования файла hello.rcml:

Rcml_compiler.exe hello.rcml hello.rcml.pc
В результате компилирования, в созданной директории появится новый файл hello.rcml.pc.

Скриншот командой строки после успешного компилирования



Теперь следует убедиться в том, что контроллер EV3 включен, сопряжен с Bluetooth адаптером. Геймпад должен быть подключен к ПК. После этого нужно выполнить команду исполнения программного файла:

Rcml_intepreter.exe hello.rcml

Внешний вид командной строки во выполнения программы



Видеоролик демонстрирующий программу движения робота расположен внизу статьи.

4. Следующий шаг – управление роботом в ручном режиме при помощи клавиатуры.

При помощи клавиатуры возможно управление любым двигателем робота. В рамках примера реализовано управление следующими механизмами:

  • Углом поворота передних колес
  • Направлением вращения задних колес

Листинг программы взаимодействия клавиатуры и робота Lego на базе контроллера EV3

function main() { @tr = robot_lego_ev3; //Резервирование робота @tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей system.hand_control(@tr,"keyboard", "straight","go", "speedMotorD","rotate"); }


Далее следует откомпилировать программу и выполнить её. Результат ручного управления Lego роботом при помощи на клавиатуры показан на видео внизу страницы.

5. Помимо клавиатуры доступен модуль gamepad позволяющий манипулировать роботом при помощи геймпада. Для реализации управления робота при помощи геймпада необходимо описать на уровне программы, какие оси робота будут принимать значения осей геймпада.

Листинг программы взаимодействия геймпада и робота Lego

function main() { @tr = robot_lego_ev3; //Резервирование робота @tr->setTrackVehicle("B","C",0,0); //Установка синхронизации двигателей system.hand_control(@tr,"gamepad", "straight"," RTUD", "speedMotorD"," RTLR"); }


Далее следует повторить процесс компилирования программы и затем выполнить её. Далее показан результат ручного управления Lego роботом при помощи на геймпада, и все ранее подключенные способы:

В статье кратко продемонстрированы только лишь некоторые возможности RCML. Наиболее подробное описание находиться в справочном руководстве.

Традиционно роботы, построенные на платформе Lego Mindstorms EV3 , программируются с использованием графической среды LabVIEW. В этом случае программы запускаются на контроллере EV3 и робот работает автономно. Здесь я расскажу про альтернативный способ управления роботом - использование платформы.NET, запущенной на компьютере.

Но прежде чем мы перейдем непосредственно к программированию, давайте рассмотрим случаи, когда это может быть полезно:

  • Требуется удаленное управление роботом с ноутбука (например, по нажатию кнопок)
  • Требуется собирать данные с контроллера EV3 и обрабатывать их на внешней системе (например, для IoT-систем)
  • Любые другие ситуации, когда хочется написать алгоритм управления на.NET и запускать его с компьютера, подключенного к контроллеру EV3

LEGO MINDSTORMS EV3 API for .NET

Управление контроллером EV3 из внешней системы осуществляется путем отправки команд в последовательный порт. Сам формат команд описан в Communication Developer Kit .

Но реализация этого протокола вручную - дело скучное. Поэтому можно воспользоваться готовой.NET-оберткой , которую заботливо написал Brian Peek. Исходные коды этой библиотеки размещены на Github , а готовый к использованию пакет можно найти в Nuget .

Подключение к контроллеру EV3

Для связи с контроллером EV3 используется класс Brick . При создании этого объекта в конструктор требуется передать реализацию интерфейса ICommunication - объект, описывающий способ подключения к контроллеру EV3. Доступны реализации UsbCommunication , BluetoothCommunication и NetworkCommunication (подключение через WiFi).

Наиболее популярный способ подключения - через Bluetooth. Рассмотрим поподробнее этот способ подключения.

Прежде чем мы сможем программно подключиться к контроллеру через Bluetooth, контроллер необходимо подключить к компьютеру, используя настройки операционной системы.

После того, как контроллер подключен, идём в настройки Bluetooth и выбираем вкладку COM-порты. Находим наш контроллер, нам нужен исходящий порт. Его и будем указывать при создании объекта BluetoothCommunication .

Код для подключения к контроллеру будет выглядеть так:

Public async Task Connect(ICommunication communication) { var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); await _brick.ConnectAsync(); }

Опционально можно указать таймаут подключения к контроллеру:

Await _brick.ConnectAsync(TimeSpan.FromSeconds(5));

Подключение к блоку через USB или WiFi осуществляется аналогично, за тем исключением, что используются объекты UsbCommunication и NetworkCommunication .

Все дальнейшие действия, выполняемые с контроллером, осуществляются через объект Brick .

Покрутим моторами

Для выполнения команд на контроллере EV3 обратимся к свойству DirectCommand объекта Brick . Для начала попробуем запустить моторы.

Предположим, что наш мотор подключен к порту A контроллера, тогда запуск этого мотора на мощности 50% будет выглядеть так:

Await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Есть и другие методы для управления мотором. Например, можно повернуть мотор на заданный угол, используя методы StepMotorAtPowerAsync() и StepMotorAtSpeedAsync() . Всего доступно несколько методов, которые являются вариациями на режимы включения моторов - по времени, скорости, мощности и т.д.

Принудительная остановка осуществляется методом StopMotorAsync() :

Await _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

Второй параметр указывает на использование тормоза. Если его установить в false , то мотор будет останавливаться «накатом».

Чтение значений с датчиков

Контроллер EV3 имеет четыре порта для подключения сенсоров. Дополнительно к этому, моторы также имеют встроеные энкодеры, что позволяет использовать их как сенсоры. В итоге мы имеем 8 портов, с которых можно считывать значения.

Доступ к портам для считывания значений можно получить через свойство Ports объекта Brick . Ports - это коллекция портов, доступных на контроллере. Поэтому для работы с конкретным портом нужно его выбрать. InputPort.One ... InputPort.Four - это порты для датчиков, а InputPort.A ... InputPort.D - это энкодеры моторов.

Var port1 = _brick.Ports;

Датчики в EV3 могут работать в разных режимах. Например, датчик цвета EV3 можно использовать для измерения внешнего освещения, измерения отраженного света или для определения цвета. Поэтому, чтобы «сообщить» сенсору о том, как именно мы хотим его использовать, нужно задать его режим:

Brick.Ports.SetMode(ColorMode.Reflective);

Теперь, когда датчик подключен и режим его работы задан, можно считать из него данные. Получить можно «сырые» данные, обработанное значение и значение в процентах.

Float si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; byte percent = _brick.Ports.PercentValue;

Свойство SIValue возвращает обработанные данные. Здесь все зависит от того, какой именно датчик используется и в каком режиме. Например, при измерении отраженного света мы получим значения от 0 до 100 в зависимости от интенсивности отраженного света (черный/белый).

Свойство RawValue возвращает «сырое» значение, полученное с АЦП. Иногда удобнее использовать именно его для последующей обработки и использования. Кстати, в среде разработки EV3 тоже есть возможность получения «сырых» значений - для этого нужно воспользоваться блоком из синей панели.

Если используемый датчик предполагает получение значений в процентах, то можно также воспользоваться свойством PercentValue .

Выполнение команд «пачкой»

Предположим, в нашем распоряжении есть робот-тележка с двумя колесами и мы хотим развернуть его на месте. В этом случае два колеса должны вращаться в противоположном направлении. Если мы воспользуемся DirectCommand и последовательно отправим две команды контроллеру, между их выполнением может пройти некоторое время:

Await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

В этом примере мы отправляем команду для вращения мотора A на скорости 50, после успешного окончания отправки этой команды, повторяем то же самое с мотором, подключенным к порту B. Проблема в том, что отправка команд происходит не моментально, поэтому моторы могут начать крутиться в разное время - пока передается команда для порта B, мотора A уже начнет крутиться.

Если для нас критически важно заставить крутится моторы одновременно, можно отправлять команды контроллеру «пачкой». В этом случае следует воспользоваться свойством BatchCommand вместо DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); await _brick.BatchCommand.SendCommandAsync();

Теперь подготавливается сразу две команды, после чего они отправляются на контроллер одним пакетом. Контроллер, получив эти команды, начнет вращение моторов одновременно.

Что ещё можно сделать

Кроме вращения моторов и считывания значений сенсоров, можно выполнять ещё ряд действий на контроллере EV3. Не буду подробно останаливаться на кадом из них, перечислю только список того, что можно сделать:

  • CleanUIAsync() , DrawTextAsync() , DrawLineAsync() и др. - манипуляция встроенным экраном контроллера EV3
  • PlayToneAsync() и PlaySoundAsync() - использование встроенного динамика для воспроизведения звуков
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (из SystemCommand) - работа с файлами

Заключение

Использование.NET для управления роботами Mindstorms EV3 хорошо демонстрирует как технологии «из разных миров» могут работать совместно. В качестве результата исследования EV3 API для.NET было создано небольшое приложение, которое позволяет управлять роботом EV3 с компьютера. К сожалению, аналогичные приложения существуют для NXT, а EV3 они обошли стороной. В то же время они полезны на сорвнованиях управляемых роботов, например в футболе роботов.

Приложение можно загрузить и установить по этой ссылке:

В данной статье речь пойдет о новой версии конструктора - LEGO Mindstorms Education EV3 . Но прежде чем рассказывать о нововведениях EV3, давайте познакомимся с серией конструкторов LEGO Mindstorms поближе.

LEGO Mindstorms - робототехнический конструктор для ребят в возрасте от 10 лет. В качестве строительных блоков для робота используются детали LEGO Techniс – многие ребята уже знакомы с ними по конструкторам «Технология и физика» , «Пневматика» , . Но построить каркас робота недостаточно: надо «научить» его получать информацию из окружающей среды и реагировать на нее. Для этого используются специальные устройства – сенсоры: они позволяют определять цвет, освещенность, расстояние до ближайших предметов и многое другое. Реагировать на «раздражители» робот может с помощью моторов – либо уехать куда-нибудь, либо что-нибудь сделать – например, укусить обидчика за палец. А «мозгом» робота является специальный программируемый блок, к которому и подключаются все моторы и датчики.

Перейдем к составу набора LEGO Mindstorms EV3. Вот что входит в образовательную версию набора:

  • 1 программируемый блок
  • 3 мотора:
    • 2 больших мотора
    • 1 средний мотор
  • 5 датчиков:
    • 2 датчика касания
    • 1 датчик цвета
    • 1 ультразвуковой датчик расстояния
    • 1 гироскоп
  • Аккумуляторная батарея для робота
  • 528 деталей Lego Technic

Датчики и моторы

Рассмотрим, что же изменилось в EV3 по сравнению со старой версией NXT.

В наборе будет 3 мотора, но один из них будет отличаться как по размерам так и по техническим характеристикам.

Датчик звука был заменен на гироскоп. Остальные типы датчиков остались прежними.

Еще одной особенностью является авто-определение датчиков и моторов при их подключении к блоку – о данной особенности я расскажу в разделе, описывающем новую среду программирования EV3.

Характеристики датчиков и моторов представлены ниже.

Очень похож на датчик предыдущей версии. Он определяет, когда кнопка нажата или отпущена, также он может подсчитывать одиночные или многократные нажатия.

Датчик цвета

Датчик цвета EV3 различает 7 цветов и может определить отсутствие цвета. Как и в прошлой версии он может работать как датчик освещенности.

  • Измеряет отраженный красный свет и окружающее освещение
  • Способен определять различия между белым и черным или цветами: синим, зеленым, желтым, красным, белым и коричневым
  • Частота работы: 1 кГц

Гироскоп

Гироскопический датчик EV3 измеряет вращательное движение робота и изменение его положения.

  • Может использоваться для определения текущего направления вращения
  • Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона)
  • Может определить максимум 440 градусов/c (в режиме гироскопа)
  • Частота работы: 1 кГц

Ультразвуковой датчик расстояния


К основной функции ультразвукового датчика EV3 добавилась еще одна - он также может "слушать" ультразвуковые колебания, испускаемые другими датчиками ультразвука.

  • Может измерять расстояние в диапазоне 3 - 250 см.
  • Точность измерений: +/- 1 см
  • Дискретность результата измерений: 0.1 см.
  • Может быть использован для поиска других активных ультразвуковых датчиков (режим прослушивания)
  • Красная LED подсветка вокруг "глаз"

Большой мотор

Большой сервомотор EV3 очень похож на предыдущую версию мотора NXT, однако корпус мотора стал чуть больше (виртуально он теперь занимает 14x7x5 отверстий против бывших 14x6x5). Также были изменены места крепления моторов и их тип.

  • Максимальные обороты - 160- 170 об/мин.
  • Заданный крутящий момент - 40 Н/см
  • Реальный крутящий момент - 20 Н/см.

Средний мотор

Средний сервомотор EV3 основан на Power Function моторе аналогичного размера. Дополнительное место потребовали только датчик угла поворота и порт для подключения. Этот мотор отлично подойдет для работы под низкими нагрузками и высокими скоростями.

  • Максимальные обороты - 240- 250 об/мин.
  • Заданный крутящий момент - 12 Н/см
  • Реальный крутящий момент - 8 Н/см.
  • Встроенный датчик угла поворота (энкодер) мотора с точностью 1 градус

NXT датчики, моторы и кабели совместимы с EV3, таким образом все ранее построенные роботы могут управляться новым блоком.

Программируемый блок EV3

Серьезные изменения произошли и с микрокомпьютером EV3 . По сравнению с NXT, EV3 блок имеет более быстрый процессор, больше памяти. Прошивка блока EV3 базируется на свободно распространяемой ОС Linux, что дает возможность создавать свои прошивки для блока. Подключить робота к компьютеру теперь возможно не только через USB и Bluetooth, но и по Wi-Fi. Между собой роботы также могут «общаться» по USB, Bluetooth и Wi-Fi.

Ниже представлена сравнительная таблица характеристик NXT и EV3:


NXT EV3
Процессор Atmel 32-Bit ARM AT91SAM7S256
48 MHz
256 KB FLASH памяти
64 KB RAM памяти
ARM9
300 MHz
16 Mb Flash памяти
64 Mb RAM памяти
Со-процессор Atmel 8-Bit ARM AVR, ATmega48
8 MHz
4 KB FLASH памяти
512 Byte RAM памяти
отсутствует
Операционная система Проприетарная Linux
Порты ввода (для датчиков) 4 порта
Поддерживает аналоговые, цифровые датчики
Скорость передачи данных: 9600 бит/с (I2C)
4 порта
Поддерживает аналоговые, цифровые датчики

Скорость передачи данных: до 460.8 Кбит/с (UART)
Порты вывода (для моторов) 3 порта
4 порта
Передача данных по USB Используется режим full speed: 12 Мбит/c Используется режим high speed: 480 Мбит/с
Подключение USB устройств Нет возможности Возможно последовательное подключение до 3 устройств, в том числе сетевых карт wi-fi и flash карт
Устройство для чтения SD карт Отсутствует Поддерживает miniSD карты, максимальный объем - 32 Гб
Подключение к мобильным устройствам Возможно подключение к устройствам с ОС Android Возможно подключение к устройствам с ОС Android и iOS (iPhone, iPad)
Экран LCD, монохромный
100 * 64 пикселей
LCD, монохромный
178 * 128 пикселей
Взаимодействие Bluetooth
USB 2.0
Bluetooth v2.1 DER
USB 2.0 (при подключении к ПК
USB 1.1 (при последовательном подключении нескольких устройств)
Wi-Fi

Среда программирования

С EV3 в комплекте поставляется новая графическая среда разработки на базе LabView, похожая на NXT-G. Работать она будет, как и NXT-G, на ОС Windows и Mac.

Среда разработки EV3 была значительно улучшена. Теперь все материалы для робота: программы для робота, документацию, результаты экспериментов, фото и видео - можно хранить в проекте. Был также добавлен инструмент zoom, который позволяет масштабировать программу, чтобы, например, увидеть всю программу целиком. Стоит отметить, что NXT блок можно программировать с помощью новой среды EV3, однако старый блок поддерживает не все особенности нового языка программирования.

Перечислим основные нововведения среды программирования EV3:

  • Тесная интеграция среды программирования с блоком:
    • Добавлена специальная страница с подключенным оборудованием. Она позволяет отслеживать статус EV3 блока и получать значения с датчиков в реальном времени.
    • Датчики и моторы распознаются при подключении автоматически, благодаря функции auto-id. Это позволяет не указывать, что к такому-то порту подключен такой-то датчик или мотор.
  • Новый режим отладки:
    • В процессе работы программы подсвечивается выполняемый блок. Это позволяет точно понимать поведение программы.
    • На программном блоке загорается специальный символ, если к данному порту подключен другой датчик или мотор.
    • Добавлена возможность просматривать значения, передаваемые через каналы данных (data wires).
  • Новые возможности программных блоков:
    • Сцепление блоков друг с другом позволило отказаться от "балки исполнения", на которой располагались блоки в среде NXT-G.
    • У блоков нет такого понятия, как панель настройки, - поведение теперь настраивается непосредственно на блоке, что привело к увеличению их размера. Программу теперь намного легче читать – сразу видно как настроены датчики и моторы.
    • Появились блоки "ждать изменения", которые позволяют реагировать на факт изменения значения, а не на изменение до определенного значения как в NXT-G.
    • Улучшения в передачи данных от блока к блоку позволяют упростить преобразование типов (теперь не нужно вручную преобразовывать, например, число в строку).
    • Добавлена возможность работы с массивами.
    • Стал возможен досрочный выход из цикла.

Кроме нового языка программирования появились программы под Android и iPhone\iPad для управления роботом. Также на базе программы Autodesk Invertor Publisher создана программа для создания и просмотра пошаговых 3D инструкций. В этой программе можно масштабировать и вращать модель на каждом этапе сборки, что позволяет строить более сложных роботов по инструкциям.

Базовые роботы

В образовательный набор включены инструкции для сборки 5 роботов:

Color Sorter
Классическая задача по сортировке предметов (в данном случае - Lego деталей) по цвету.

Gyro Boy
Робот-сигвей, использующий гироскоп для балансировки.

Puppy
Робот-собачка, которую можно гладить, кормить. Спать и справлять нужду она также умеет:) Напоминает тамагочи.

Робо-рука
Позволяет перемещать предметы.

Для EV3 набора был подготовлен ресурсный набор LEGO MINDSTORMS Education EV3 , позволяющий собирать другие модели, используя новые детали.

При написании статьи использовались материалы блога nnxt.blogspot.com .