Программа для управления лего роботами

Обновлено: 28.04.2024

Robot Commander представляет собой управляющее приложение для LEGO® MINDSTORMS®. БЕСПЛАТНАЯ загрузка для большинства смартфонов и планшетов; Robot Commander подключается к модулю EV3 по Bluetooth®. Это простое в использовании приложение позволяет взаимодействовать с вашими уникальными роботами EV3, даже не подключаясь к компьютеру! Это означает, что вы можете мгновенно начать игру с вашими собственными роботами!


Приложения для компьютеров и планшетов

Приложения LEGO® MINDSTORMS® EV3 Home для macOS, Windows 10 и планшетов на iOS и Android

Загрузите, установите, подключите и выполняйте задания по программированию. Для пяти основных роботов есть до пяти задач по программированию. Благодаря более продвинутому, но хорошо знакомому интерфейсу программирования и пяти сложным заданиям для вас и ваших роботов-героев, приложение EV3 Home для PC, Mac и планшетов сможет поднять ваши навыки робототехники на новый уровень!


Важная информация относительно программного обеспечения и приложений LEGO® MINDSTORMS® EV3!

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

Новое приложение LEGO MINDSTORMS EV3 Home с языком программирования на основе Scratch заменит используемое в настоящее время ПО LEGO MINDSTORMS EV3 Home Edition (Labview) для Windows 10 и macOS, а также приложение LEGO MINDSTORMS EV3 Programmer для планшетов на iOS/Android.

Приложение LEGO MINDSTORMS EV3 Programmer будет удалено из магазинов приложений в конце июня 2021 года.

Выведенное из эксплуатации ПО LEGO MINDSTORMS EV3 Home Edition (Labview) для Mac и PC можно найти ниже. Обратите внимание, что это ПО больше не поддерживается LEGO Group.

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда не активна

Если вам нравится графическая среда программирования Scratch 2.0, то вам необязательно отказываться от неё для программирования роботов Lego Mindstorms EV3. Достаточно лишь установить и настроить нужное программное обеспечение, о чём и будет написано в этой статье.

Программирование робота Lego Mindstorms EV3 с помощью Scratch 2.0

Статья будет рассчитана на владельцев компьютеров под управлением Windows, хотя всё упомянутое в статье программное обеспечение можно установить и использовать на компьютерах под управлением Mac OS, Mac OS X и Linux. Вот вкратце план, по которому мы будем действовать:

Подготовка SD-карты

Прежде, чем начинать, что то делать дальше, нужно найти подходящую SD-карту, удалить с неё все лишние разделы, которые там могут оказаться, и отформатировать её. Это должна быть карта объёмом как минимум 2Гб, но не более 32Гб (SDXC-карты не поддерживаются модулем EV3). Файловая система на карте должна быть FAT32. Разработчики leJOS рекомендуют форматировать карту с помощью программы SD Card Formatter. Ведь, даже если вы решили использовать только что купленную карту памяти, на ней могут быть скрытые разделы, которые могут вызвать проблемы при работе c EV3. Однако, если ваша SD-карта меньше 4Гб, то программа автоматически выбирает файловую систему FAT и изменить в настройках это нельзя, поэтому после форматирования программой SD Card Formatter форматируйте такие карты в формат FAT32 другим способом. Кроме того, у меня при использовании старых карт 2Гб, leJOS EV3 вообще отказался загружаться, хотя установка прошла успешно. Из своего опыта я советую вам использовать свежекупленные карты SDHC объёмом 4 – 32Гб (у меня всё успешно работает с картой SDHC объёмом 4Гб класс 4 производства smartbuy).

Установка компонентов leJOS EV3 на компьютер

leJOS – это крошечная виртуальная Java-машина, которая в 2013 году была адаптирована для работы с системой Lego Mindstorms EV3. Официальная страничка проекта находится здесь. Для компьютеров под управлением Windows разработчики сделали дистрибутив, в котором есть утилита для подготовки SD-карты, документация и примеры.

Итак, установим leJOS EV3 на компьютер:

      • Скачайте последнюю версию leJOS EV3с официального сайта (на момент написания статьи – это версия 0.9.0-beta). Для установки на Windows – это будет файл leJOS_EV3_0.9.0-beta_win32_setup.exe.
      • Запустите скачанный дистрибутив на вашем компьютере. Вы увидите приветствие. Нажмите «Next >».

      Мастер установки leJOS EV3

      Выбор JDK при установке leJOS EV3 на компьютер

          • На следующем шаге вы можете выбрать путь для установки или оставить его без изменений. Нажмите «Next >».
          • На следующем шаге вы увидите список устанавливаемых компонентов. Рекомендуется установить все компоненты. Нажмите «Next >».

          Выбор компонентов при установке leJOS EV3 на компьютер

              • На следующем шаге вы сможете выбрать альтернативные пути для установки выбранных компонентов. Здесь можно оставить всё по умолчанию и нажать «Next >».
              • На следующем шаге выбирается имя папки в меню «Пуск». Нажмите «Next >».
              • На последнем шаге щёлкните «Install».
              • Если на вашем компьютере установлена предыдущая версия leJOS EV3, то вы увидите предупреждение, см. картинку. Нажмите «OK», чтобы удалить предыдущую версию с компьютера.

              Предупреждение при установке leJOS EV3 на компьютер

                  • После установки вы увидите финальное окно. Здесь можно поставить галочку «Launch EV3SDCard utility», чтобы сразу при выходе из мастера запустить утилиту подготовки SD-карты.

                  Установка leJOS EV3 успешно завершена

                  Создание SD-карты leJOS EV3

                  В верхнем поле нужно выбрать букву диска вашей карты, у меня это диск I:. В поле ниже указывается файл с образом leJOS и по умолчанию у вас уже должен быть прописан правильный путь, см. картинку сверху. Этот файл можно найти в папке, куда были установлены компоненты leJOS EV3 (у меня это «C:\Program Files\leJOS EV3»). В самом нижнем поле нужно выбрать файл со средой выполнения Java, который вам предварительно нужно скачать с сайта Oracle отсюда (убедитесь, что вы выбрали Java 7 JRE, а не Java 8 SDK, если конечно вы не планируете создавать компактный профиль Java 8). Для скачивания вам нужно будет зарегистрироваться, если вы этого ещё не делали.

                  Создание SD-карты leJOS EV3

                  Меню leJOS EV3

                  В дальнейшем, при включении модуля EV3 со вставленной SD-картой leJOS EV3 у вас сразу начнётся загрузка leJOS EV3, а без SD-карты загрузится стандартное ПО LEGO.

                  Установка Adobe AIR на компьютер

                  Перед установкой офлайн редактора Scratch, необходимо обновить или установить на компьютер последнюю версию Adobe AIR. Описывать установку я не буду, она очень простая. Нужно скачать инсталлятор здесь, запустить его, ответить на несколько вопросов и дождаться окончания установки.

                  Установка офлайн редактора Scratch 2 на компьютер

                  Теперь скачайте и установите на компьютер последнюю версию офлайн редактора Scratch 2 (на момент написания статьи – это версия 437, файл Scratch-437.exe). У инсталлятора очень мало параметров, см. картинку. Уберите галочку «Запустить приложение после установки» и нажмите кнопку «Продолжить».

                  Установка офлайн редактора Scratch 2 на компьютер

                  Установка онлайн редактора Scratch 2 завершена

                  Установка приложения ev3-scratch-helper-app на компьютер

                  Следующее что нужно сделать – установить приложение-помощник ev3-scratch-helper-app на ваш компьютер, которое делает возможным взаимодействие Scratch с модулем EV3 (прочитать про приложения-помощники для Scratch можно здесь). Установку можно произвести двумя способами:

                  В папке «scratch» внутри папки установки вы можете найти файл «ev3-helper-app.s2e» для английского и файл «ev3-helper-app-NL.s2e» нидерландского языков, соответственно, в папках «en» и «nl». Если вы хотите использовать русский язык, то вы можете самостоятельно перевести файл «ev3-helper-app.s2e» (кодировка файла д.б. UTF-8) или взять файл «ev3-helper-app-RU.s2e» с моим переводом (файл «ev3-helper-app-RU.s2e» сохраните по аналогии с английской и нидерландской версией: сделайте папку «ru\extensions» и сохраните в ней). К сожалению, перевести можно лишь названия блоков, но не значений, иначе приложение ev3-scratch-helper-app работать не будет. Т.е. название моторов и датчиков останется на английском (для моторов это «Large» и «Medium», для датчиков – «Color», «Distance» и «Touch» и т.д.).

                  Файл ev3-helper-app-RU.s2e для русификации блоков EV3 в офлайн редакторе Scratch 2.

                  В папке с приложением вы можете найти файл «application.properties» с настройками. Измените настройки, если потребуется. Имена свойств говорят сами за себя, поэтому расписывать их здесь я не буду. После изменения, удостоверьтесь, что значение свойства «server.port» в файле «application.properties» равно значению переменной «extensionPort» в файле «ev3-helper-app.s2e» или «ev3-helper-app-RU.s2e», в зависимости от того, файл какого языка вы будете использовать.

                  Запуск приложения ev3-scratch-helper-app

                  Перед запуском редактора Scratch 2 у вас всегда должно быть запущено приложение ev3-scratch-helper-app. Для его запуска сделайте следующее:

                    1. Запустите окно консоли и поменяйте текущую папку на папку, в которой установлено приложение ev3-scratch-helper-app. У меня это папка «C:\ev3-scratch-helper-app», поэтому я вызвал команду «cd C:\ev3-scratch-helper-app».
                    2. Выполните команду «gradlew.bat bootRun». При первом выполнении к вам на компьютер будут скачаны и установлены необходимые библиотеки, поэтому удостоверьтесь, что компьютер подключен к Интернету. Первый запуск займёт продолжительное время, наберитесь терпения.

                    Для последующих запусков для удобства можно создать ярлык, например, на рабочем столе. Вот так выглядят свойства ярлыка для установленного приложения в папке «C:\ev3-scratch-helper-app»:

                    Свойства ярлыка для запуска приложения ev3-scratch-helper-app

                    При запуске приложение ev3-scratch-helper-app подключается к первому доступному модулю EV3 в сети. Если ни один модуль не обнаружен, то приложение ждёт, пока такой появится.

                    Первый запуск офлайн редактора Scratch 2

                    После запуска редактора Scratch 2 первый раз (у вас должен быть ярлык «Scratch 2» на рабочем столе) вы, возможно захотите поменять язык на русский. Выбор языка выполняется из меню с изображением глобуса, см. картинку.

                    Смена языка в офлайн редакторе Scratch 2

                    Добавление программных блоков EV3 в редактор Scratch 2

                    Импорт экспериментального расширения HTTP в редактор Scratch 2

                    После этого откройте закладку «Скрипты» щёлкните по «Другие блоки» и удостоверьтесь, что здесь появились наши блоки. Проверку наличия блоков желательно делать каждый раз после открытия ранее сохранённого проекта. Зелёный кружочек справа от названия «EV3HelperApp» означает, что приложение v3-scratch-helper-app выполняется. Если кружочек красный, то это значит, что приложение v3-scratch-helper-app не выполняется и его нужно запустить.

                    Проверка подключения расширения v3-scratch-helper-app в редактор Scratch 2

                    Подключение модуля EV3 к компьютеру

                    Подключить модуль EV3 к компьютеру можно двумя способами: через Bluetooth или WiFi.

                    Для подключения через WiFi у вас должен быть USB WiFi адаптер. leJOS EV3 поддерживает адаптеры с чипсетами Atheros ATH9K и Realtex 8192cu. Модуль EV3 протестирован разработчиками с адаптерами NetGear WNA1100 и EDIMAX EW-7811Un, но и другие адаптеры могут поддерживаться, если в них используется один из перечисленных чипсетов. Здесь я не буду рассматривать подключение через WiFi, т.к. не у всех есть подходящий адаптер. Но если вы заинтересовались таким подключением, то вы можете узнать, как это сделать из официального источника здесь.

                    Для подключения через Bluetooth вам нужно сначала подключить друг к другу модуль EV3 и компьютер, а затем сделать личную сеть Bluetooth (PAN).

                    Подключение модуля EV3 к компьютеру нужно сделать только один раз для пары «модуль EV3 – компьютер»:

                    1. В модуле EV3 в главном меню leJOS EV3 найдите пункт меню «Bluetooth» и зайдите внутрь, нажав на кнопку центральную кнопку модуля EV3. Если вы увидите надпись «Visibility on», то всё в порядке: видимость модуля включена. Если вы видите надпись «Visibility off», то найдите пункт меню «Visibility» (с изображением глаза) и нажмите на центральную кнопку модуля EV3 дважды, чтобы включить видимость (надпись должна поменяться на «Visibility on»).
                    2. На компьютере откройте «Панель управления -> Оборудование и звук -> Устройства и принтеры». Вы увидите список устройств, подключенных к вашему компьютеру.

                    Устройства подключенные к компьютеру

                    3. Удостоверьтесь, что Bluetooth компьютера включён, и нажмите сверху на кнопку «Добавление устройства». Поднимется диалоговое окно, в котором через некоторое время должен появиться модуль EV3. Щёлкните по нему и затем щёлкните «Далее».

                    Подключение EV3 к компьютеру через Bluetooth

                    4. На следующем шаге вы увидите выбор варианта подключения. Щёлкните по второму варианту и введите PIN-код 1234.

                    Ввод PIN-кода для подключения EV3 к компьютеру через Bluetooth

                    После того как модуль EV3 и компьютер подключены друг к другу можно сделать личную сеть Bluetooth (PAN) (подключение к сети PAN вам придётся делать каждый раз при включении модуля EV3):

                      1. Откройте «Панель управления -> Сеть и Интернет -> Центр управления сетями и общим доступом» и щёлкните по «Изменение параметров адаптера» на левой панели окна.
                      2. Вы должны увидеть здесь «Сетевое подключение Bluetooth» с красным крестиком. Щёлкните по этой иконке один раз, чтобы выбрать её.
                      3. Щёлкните сверху по кнопке «Просмотр сетевых устройств Bluetooth».
                      4. Через некоторое время вы увидите в поднявшемся окне одну или несколько точек доступа. Щёлкните здесь по нашему устройству «EV3», чтобы выбрать его, и щёлкните по пункту меню «Подключаться через -> Точка доступа».

                      Настройка личной сети Bluetooth (PAN) между EV3 и компьютером

                      Программирование робота EV3 в редакторе Scratch 2

                      При программировании роботов EV3 с помощью редактора Scratch и расширения ev3-scratch-helper-app вам нужно помнить, что перед использованием моторов и датчиков их нужно подключить с помощью блоков «Подключить мотор к порту» и «Подключить датчик к порту» («Connect a motor to port» и «Connect a sensor to port» при использовании англоязычного варианта блоков). Отключаются датчики с помощью блока «Закрыть все порты» («Close all ports» в английском варианте).

                      Для проверки, всё ли правильно мы настроили, соберите простейшую тележку, например, стандартную приводную платформу, и напишите для неё простейшую программу в Scratch 2. Можете посмотреть примеры в папках «doc» и «scratch\en\demos» в папке установки программы ev3-scratch-helper-app. При открытии демонстрационных программ в Scratch 2 проверьте, есть ли блоки EV3, как это было описано выше в разделе «Добавление программных блоков EV3 в редактор Scratch 2».

                      Инструкцию для сборки стандартной приводной платформы можете взять здесь:

                      Ниже на картинке вы увидите пример простейшей программы для тележки с установленным спереди датчиком расстояния. Работает это следующим образом:

                          • Сначала спрайт «Старт» (большой треугольник слева сверху) серого цвета, это значит, что робот не инициализирован. Видите, скорость моторов null, и расстояние у датчика 1 тоже null. Нужно нажать на серый треугольник.

                          Программа с инициализацией моторов и датчика EV3 в редакторе Scratch 2

                              • После нажатия на треугольник происходит подключение моторов и датчика расстояния, и треугольник становится зелёным. Как видите скорость моторов и расстояние датчика теперь показывают осмысленные значения вместо null.

                              Инициализация моторов и датчика EV3 в редакторе Scratch 2

                                  • Теперь можно нажать на пробел на компьютере и робот поедет вперёд, пока впереди не появится препятствие на расстоянии меньше 50-ти см. Когда робот обнаружит препятствие, он остановится.
                                  • Когда вы наигрались с роботом, можно снова нажать на треугольник. При этом все порты закроются, и робот снова станет неинициализирован, а треугольник станет серым.

                                  Файл программы, изображённой на картинке я прилагаю к статье:

                                  Программа для Scratch 2 для тестирования взаимодействия с роботом EV3.

                                  Из этой статьи вы узнали, как настроить офлайн редактор Scratch 2 для программирования роботов LEGO Mindstorms EV3, а также узнали, как начать программировать с помощью него. К сожалению, в случае программирования в Scratch 2 модуль EV3 всё время должен быть подключен к компьютеру через Bluetooth или WiFi, т.е. он не автономен. Хотя здесь есть и приятные бонусы – роботом можно управлять с компьютера, например, робот на колёсах может управляться при помощи клавиш-стрелок или клавиш W, A, S и D. Итак, пробуйте, экспериментируйте и пишите, если что-то непонятно.

                                  Звезда активна
                                  Звезда активна
                                  Звезда активна
                                  Звезда активна
                                  Звезда не активна

                                  Эта статья будет интересна тем, кто хочет сделать программу для дистанционного управления роботом EV3 со стандартной заводской прошивкой через Bluetooth, WiFi или USB и не важно, с какого устройства или операционной системы. Здесь мы рассмотрим протокол взаимодействия между модулем EV3 и вашей программой.

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

                                  Основная идея статьи состоит в том, чтобы приложение могло управлять роботом EV3, со стандартной заводской прошивкой. Т.е. мы не будем рассматривать здесь всевозможные прошивки, которые загружаются с SD-карт, такие как leJOS EV3, ev3dev или MonoBrick EV3 Firmware.

                                  Вот пример, как будет выглядеть подключение к EV3 через USB-кабель:

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

                                  Устанавливать режим работы датчикам, например, так:

                                  И считывать показания датчиков в трёх разных форматах: Raw (как есть, без изменений), SI (международная система единиц) или проценты. Вот пример получения данных в SI:

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

                                  MonoBrick Communication Library

                                  Вот так подключается EV3 через USB:

                                  Так происходит управление моторами:

                                  А можно сразу управлять тележкой или роботом на гусеницах вот так:

                                  Так читаем значения датчиков:

                                  А вот так можно задать режим работы датчиков:

                                  А при работе с подключенными «в гирлянду» несколькими модулями EV3 код будет таким:

                                  legoev3cpp

                                  legoev3cpp - это небольшое кроссплатформенное API для C++ 14. И хотя разработка заявлена как кроссплатформенная, на сегодняшний момент реализована поддержка только iOS. Разработчик приглашает присоединиться к проекту всех заинтересовавшихся. Страничка проекта находится здесь. В папке «Jove's Landing» вы найдёте приложение демонстрирующее использование legoev3cpp.

                                  ev3-Nodejs-bluetooth-Api

                                  Коммуникационный интерфейс

                                  Официальную документацию можно найти на странице загрузок LEGO MINDSTORMS EV3. Здесь вы можете скачать описание прошивки (EV3 Firmware Developer Kit) и комплект разработчика системы передачи данных (LEGO MINDSTORMS EV3 Communication Developer Kit). Эти два документа можно скачать и с нашего сайта:

                                  Описание прошивки LEGO Mindstorms EV3.

                                  Комплект разработчика системы передачи данных LEGO MINDSTORMS EV3.

                                  Все команды, которые вы будете использовать, разделяются на прямые и системные. Прямые команды представляют из себя микропрограммы, состоящие из набора определённых байт-кодов, и выполняются параллельно с работающими пользовательскими программами. Использовать прямые команды нужно очень осторожно, т.к. здесь нет никаких ограничений на использование «опасных» кодов или конструкций, например, здесь возможны блокировки и зацикливания. Однако, в таких случаях, пользовательская программа будет продолжать работать нормально. Описание прямых команд вы сможете найти в первом документе (EV3 Firmware Developer Kit) в разделе 4 (Byte code definition and functionality), а примеры использования – во втором (LEGO MINDSTORMS EV3 Communication Developer Kit) в разделе 4 (Direct Commands).

                                  Системные команды используются для передачи данных в модуль EV3 или из него. Описание этих команд вы можете найти во втором документе (LEGO MINDSTORMS EV3 Communication Developer Kit) в разделе 3 (System Command).

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

                                  Следующий байт – это тип команды или команд. Здесь возможны следующие варианты: 0x01 – системная команда, требуется ответ; 0x81 – системная команда, ответ не требуется; 0x00 – прямая команда или команды, требуется ответ; 0x80 (как в примере) – прямая команда или команды, ответ не требуется.

                                  Остальные байты будут разными для разных типов команд. Для системных команд следующий байт обозначает команду, например, 0x92 – начало загрузки файла на EV3 (BEGIN_DOWNLOAD), 0x9E – запись в почтовый ящик (WRITEMAILBOX) и т.п. А затем идут байты специфичные для каждой системной команды.

                                  В остальных байтах содержится одна команда или несколько команд идущих друг за другом. Первый байт – это сама команда, в примере, указана команда 0x94 (opSound) – это команда для работы со звуком. В следующих байтах содержатся параметры команды. Первый параметр – это специфический параметр, определяющий, что именно будет делать команда. В примере 0x01 обозначает, что нужно проиграть звук определённой громкости, тональности и продолжительности. Следующие три параметра - это громкость (от 0 до 100), частота (от 250 до 10000) и длительность в миллисекундах.

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

                                        • 0x81 – однобайтовое число unsigned byte или byte, в зависимости от команды (в документации обозначается как Data8);
                                        • 0x82 – двухбайтовое число unsigned short или short, в зависимости от команды (в документации - Data16);
                                        • 0x83 – четырёхбайтовое число unsigned int или int (в документации – Data32);
                                        • 0x84 – строка оканчивающаяся нулём.

                                        Как видите, в примере, первые два параметра 0x01 и 0x02 меньше 32, и поэтому они передаются в коротком формате без указания типа значения, а третий и четвёртый параметры – это двухбайтовые числа имеющие значение 0xE803 и для них задаётся тип 0x82.

                                        Теперь давайте отправим команду на чтение цвета с датчика, подключенного к порту 1, и считаем ответ:

                                        Здесь массив байт, который мы отправили модулю EV3 в восьмеричной системе, выглядит так: 0D00 0100 00 0400 99 1D 00 00 00 02 01 60 . Быстро пробежимся по значениям этих байтов:

                                        Число, указывающее индекс глобальных переменных строится сложным образом. Если значение индекса меньше 32, то индекс можно задать одним байтом вот так: 0x60 & i. Здесь 0x60 – это биты, обозначающие небольшой индекс глобальной переменной, а i – это наш индекс. С помощью такой схемы мы сможем задать индекс от 0 до 31, а байт при этом получится от 0x60 до 0x7F . Если вам нужно указать индекс больше 31, то первый байт будет обозначать тип и размер индекса, а в следующих байтах будет храниться значение индекса. Для значения индекса от 0 до 255 первый байт будет равен 0xE1, а затем следующим байтом будет идти само значение. Для значения от 0 до 65535, первый байт будет равен 0xE2, а в следующих двух байтах нужно задать значение. Для значения индекса больше 65535, первый байт будет равен 0xE3, а в следующих четырёх будет значение.

                                        Подробно об этом написано в разделе 3.4 «Parameter encoding» документа EV3 Firmware Developer Kit. Также в качестве подсказки можно использовать макросы GV0(i), GV1(i), GV2(i) и GV4(i) в файле bytecodes.h, который можно найти в исходных кодах аппаратного ПО (исходные коды можно скачать на странице загрузок LEGO MINDSTORMS EV3).

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

                                        Для прямых команд следующие байты – это пространство глобальных переменных. В нашем примере здесь только одна переменная имеющая значение 0x0000A040 (тип переменной float). Если бы мы вызывали несколько команд, то здесь было бы больше переменных, идущих друг за другом. В нашем примере в переменной приходит номер цвета от 1 до 7 или 0, если цвет не определён.

                                        Теперь давайте с помощью этих функций рассмотрим ещё несколько примеров. Вот пример, в котором одновременно запускаются два двигателя, подключенных к порту B и C, делают 3 оборота, причём последние пол оборота двигатели постепенно замедляются:

                                        А здесь мы узнаём, какие датчики и моторы подключены к EV3, и к каким портам (здесь описана лишь часть возможных вариантов, полный перечень см. в описании прошивки «EV3 Firmware Developer Kit» в пункте 5 «Device type list»):

                                        Вот, собственно, и всё, что я хотел написать. Если у вас будут какие-то вопросы, задавайте их в комментариях.

                                        Надеюсь, что в статье я дал достаточное количество знаний для старта. Возможно, кто-нибудь благодаря этой статье, сделает удобный пульт управления для смартфона или компьютера, или создаст API для ещё какого либо языка программирования или платформы. Своими разработками или замечаниями можете поделиться с помощью комментариев.

                                        Здравствуйте. В своих статьях я хочу Вас познакомить с основами программирования микрокомпьютера LEGO NXT Mindstorms 2.0. Для разработки приложений я буду использовать платформы Microsoft Robotics Developer Studio 4 (MRDS 4) и National Instruments LabVIEW (NI LabVIEW). Будут рассматриваться и реализовываться задачи автоматического и автоматизированного управления мобильными роботами. Двигаться мы будем от простого к сложному.


                                        Предвосхищая некоторые вопросы и комментарии читателей.

                                        Почему именно NXT Mindstorms 2.0? Потому-что для своих проектов данный набор мне показался наиболее подходящим, т.к. микрокомпьютер NXT полностью совместим с платформами MRDS 4 и NI LabVIEW, а так же данный набор является очень гибким в плане сборки различных конфигураций роботов — затрачивается минимум времени на сборку робота.

                                        Почему платформы MRDS 4 и NI LabVIEW? Так сложилось исторически. Обучаясь на старших курсах университета стояла задача в разработке учебных курсов с использованием данных платформ. К тому же платформы обладают достаточной простотой в освоении и функциональностью, с их использованием можно написать программу непосредственно для управления роботом, разработать интерфейс пользователя и провести тестирование в виртуальной среде (в случае с MRDS 4).

                                        Да кому вообще нужны эти ваши уроки, в сети и так куча проектов по робототехнике! С использованием данной связки (NXT+MRDS 4/NI LabVIEW) учебных статей практически нет, в основном используется родная среда программирования, а в ней совсем все тривиально. Всем кому интересны робототехника, программирование и у кого есть набор NXT (а таких не мало), возрастная аудитория любая.

                                        Графические языки программирования это зло, а те кто на них программируют еретики! Графические языки программирования коими и являются MRDS 4 и NI LabVIEW несомненно имеют свои минусы, например ориентированность под узкие задачи, но все же в функциональности они мало уступают текстовым языкам, тем более NI LabVIEW изначально разрабатывался как язык легкий в освоении для решения научных и инженерных задач, для этого в нем присутствует множество необходимых библиотек и инструментов. По-этому для решения наших задач данные графические языки являются наиболее подходящими. И не надо нас за это сжигать на костре презирать.

                                        Все это выглядит по-детски и вообще не серьезно! Когда задача состоит в реализации алгоритмов, в обучении основам и принципам программирования, робототехники, систем реального времени без углубления в схемотехнику и протоколы, то это очень подходящий инструмент хоть и не дешевый (касаемо набора NXT). Хотя для этих же целей неплохо подойдут наборы на базе Arduino, но совместимости с MRDS 4 и NI LabVIEW у данного контроллера почти нет, а в данных платформах есть свои прелести.

                                        Технологии, которые используются, являются продуктом загнивающих капиталистических стран, а автор враг народа и пособник западных заговорщиков! К сожалению, большинство технологий в области электроники и вычислительной техники родом с запада, буду очень рад если мне укажут на аналогичные технологии исконно отечественного производства. А пока будем использовать то, что имеем. И не надо на меня за это сообщать спецслужбам держать зла.

                                        Краткий обзор платформ MRDS 4 и NI LabVIEW.

                                        Внесу некоторую ясность в терминологию. Под платформой, в данном случае, имеется ввиду совокупность различных инструментов, например язык VPL в MRDS, а так же среда выполнения приложений, т.е. непосредственной компиляции приложений в исполняемые (*.exe) файлы нету.

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

                                        Краткий обзор набора LEGO NXT Mindstorms 2.0.


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

                                        И конечно же в наборе находятся разнообразные детали LEGO в форм-факторе LEGO Technic из которых будут собраны исполнительные механизмы и несущая конструкция.


                                        Рисунок 2 — Детали в форм-факторе LEGO Technic

                                        Пишем первое приложение.

                                        Напишем первое приложение. Пусть, классически, данное приложение выводит текст “Hello, World!”. Реализация будет происходить поочередно в MRDS 4 и NI LabVIEW, в процессе будем рассматривать специфику каждой платформы.

                                        Предварительно инсталлируем платформы MRDS 4 и NI LabVIEW, в случае с MRDS 4 инсталляция должна проводится в папку путь к которой не состоит из кириллицы (русских букв), учетная запись пользователя так-же должна состоять только из латинских букв.

                                        1. Платформа MRDS 4.

                                        Запускаем среду VPL (Меню Пуск — Все Программы — Microsoft Robotics Developer Studio 4 — Visual Programming Language). Данная среда позволяет разрабатывать приложения на языке VPL, проводить тестирование в виртуальной среде VSE. Программа в VPL представляет собой диаграмму, состоящую из соединенных между собой блоков. В открывшемся окне, помимо стандартной панели команд и меню, присутствует 5 основных окон:

                                        1. Basic Activities – содержит базовые блоки, которые реализуют такие операторы как константа, переменная, условие и т.д.;
                                        2. Services – содержит блоки, предоставляющие доступ к функционалу платформы MRDS, например блоки для взаимодействия с какой-либо аппаратной составляющей робота, или блоки для вызова диалогового окна;
                                        3. Project – объединяет диаграммы входящие в проект, а так же различные конфигурационные файлы;
                                        4. Properties – содержит свойства выделенного блока;
                                        5. Diagrams window – содержит, непосредственно, диаграмму (исходный код) приложения.


                                        Рисунок 3 — Среда программирования VPL

                                        Выполним следующую последовательность действий:

                                        1. добавим блоки Data (из окна Basic Activities) и блок сервиса Simple Dialog (из окна Services),
                                        2. в блок Data введем “Hello, World!” (без кавычек) и выберем тип данных String,
                                        3. соединим блок Data с блоком Simple Dialog, появиться диалоговое окно,
                                        4. далее, все выполняем как на рисунках


                                        Рисунок 4 — Окно Connections


                                        Рисунок 5 — Окно Data Connections


                                        Рисунок 6 — Законченный вид диаграммы


                                        2. Платформа NI LabVIEW.

                                        На данной платформе все реализуется, практически, идентично. Запустим среду LabVIEW. Перед нами появиться два окна, первое — Front Panel, предназначено для реализации интерфейса пользователя (внешнего вида виртуального прибора), второе — Block Diagram, для реализации логики программы.


                                        Рисунок 8 — Окна среды LabVIEW

                                        Мы будем использовать окно Block Diagram. Выполним следующие шаги:

                                        1. в окне Block Diagram вызовем контекстное меню, нажатием правой кнопкой мыши,
                                        2. в появившемся окне перейдем по вкладкам, как на рисунке и выберем String Constant,

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

                                        Далее будут рассмотрены следующие ключевые моменты:

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

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








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

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

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

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



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

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

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

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

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


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


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


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

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


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


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


                                        9. Далее отобразиться окно, с успешным подключением устройства. Следует нажать клавишу «Закрыть».


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


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


                                        12. Далее необходимо перейти во вкладку «Оборудование».


                                        13. Далее следует двойным нажатием перейти в свойства подключения «Стандартный последовательный порт по соединению Bluetooth».


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

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

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

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

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

                                        • Стрелки вверх/вниз используются для вращения мотора задних колес вперед/назад
                                        • Стрелки влево/вправо поворачивают колеса влево/вправо

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


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


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


                                        Текст спойлера для удобства просмотра скопирован из документации по RCML.

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

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

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

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

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

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

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

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

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

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

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


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



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



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

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

                                        Далее будет продемонстрирован процесс программной установки связи между двигателями робота и клавиатурой.

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

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

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

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

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

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

                                        Читайте также: