Как составить программу для робота lego mindstorms

Время на прочтение
5 мин

Количество просмотров 35K

Привет, Хабр! Мы уже рассказывали о платформе LEGO MINDSTORMS Education EV3. Основные задачи этой платформы — обучение на практических примерах, развитие навыков STEAM и формирование инженерного мышления. В ней можно проводить лабораторные работы по изучению механики и динамики. Лабораторные стенды из кубиков LEGO и утилиты по регистрации и обработке данных делают опыты еще интереснее и нагляднее и помогают детям лучше понять физику. Например, школьники могут собрать данные о температуре плавления и с помощью приложения систематизировать их и представить в виде графика. Но это только начало: сегодня мы расскажем, как дополнить этот набор средой программирования MicroPython и использовать его для обучения робототехнике.

Учим программированию с помощью EV3

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

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

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

Здесь есть несколько хитростей, одна из которых — показать, что код выполняет те же задачи, что и блоки. В среде EV3 это можно сделать благодаря интеграции с MicroPython: дети создают одну и ту же программу в базовой среде программирования с помощью блоков и на языке Python в Visual Studio Code от Microsoft. Они видят, что оба способа работают одинаково, но кодом решать сложные задачи удобнее.

Переходим на MicroPython

Среда EV3 построена на базе процессора ARM9, и разработчики специально оставили архитектуру открытой. Это решение позволило накатывать альтернативные прошивки, одной из которых стал образ для работы с MicroPython. Он позволяет использовать Python для программирования EV3, что делает работу с набором еще ближе к задачам из реальной жизни. 

Чтобы начать работать, нужно скачать образ EV3 MicroPython на любую microSD-карту, установить ее в микрокомпьютер EV3 и включить его. Затем нужно установить бесплатное расширение для Visual Studio. И можно приступить к работе. 

Программируем первого робота на MycroPython

На нашем сайте есть несколько уроков для освоения базовых понятий робототехники. Модели на EV3 знакомят детей с азами, которые используются в самоуправляемых автомобилях, заводских роботах-сборщиках, станках с ЧПУ. 

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

Для работы нам понадобятся:

  • базовый набор LEGO MINDSTORMS Education EV3; 
  • большой лист клетчатой бумаги;
  • цветные маркеры. 

Сборка самого робота есть в инструкции, а мы рассмотрим пример программирования.

Сначала инициализируем библиотеку модулей EV3:

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Color, ImageFile
from pybricks.tools import wait

Настраиваем платформу, которая вращает ручку как мотор в порте B. Задаем передаточное отношение двухступенчатой зубчатой передачи с количеством зубьев 20-12-28 соответственно.

turntable_motor = Motor(Port.B, Direction.CLOCKWISE, [20, 12, 28])

Настраиваем подъемный механизм для ручки как мотор в порте C:

seesaw_motor = Motor(Port.C)

Настраиваем гироскоп, измеряющий угол наклона ручки, в порте 2:

gyro_sensor = GyroSensor(Port.S2)

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

color_sensor = ColorSensor(Port.S3)

Настраиваем датчик касания в порте 4. Робот начинает рисовать, когда датчик нажат:

touch_sensor = TouchSensor(Port.S4)

Определяем функции, которые поднимают и опускают ручку:

def pen_holder_raise():
  seesaw_motor.run_target(50, 25, Stop.HOLD)
  wait(1000)

def pen_holder_lower():
  seesaw_motor.run_target(50, 0, Stop.HOLD)
  wait(1000)

Определяем функцию для поворота ручки на заданный угол или до определенного угла:

def pen_holder_turn_to(target_angle):
  if target_angle > gyro_sensor.angle():

Если целевой угол больше, чем текущий угол гироскопического датчика, продолжаем движение по часовой стрелке с положительной скоростью:

    turntable_motor.run(70)
	
while gyro_sensor.angle() < target_angle:
  	
pass
  elif target_angle < gyro_sensor.angle():

Если целевой угол меньше, чем текущий гироскопического датчика, то двигаемся против часовой стрелки:

    turntable_motor.run(-70)
	
while gyro_sensor.angle() > target_angle:
  	
pass

Останавливаем вращающуюся платформу, когда целевой угол будет достигнут:

  turntable_motor.stop(Stop.BRAKE)

Устанавливаем начальное положение ручки в верхнем положении:

pen_holder_raise()

Теперь идет основная часть программы — бесконечный цикл. Сначала EV3 ожидает, когда датчик цвета обнаружит белую бумагу или синюю стартовую клетку, а датчик касания будет нажат. Затем он рисует узор, возвращается в исходное положение и повторяет все заново.

Когда устройство не готово, светодиоды на контроллере принимают красный цвет, и на ЖК-экране отображается изображение «палец вниз»:

while True:
  brick.light(Color.RED)
  brick.display.image(ImageFile.THUMBS_DOWN)

Дожидаемся, когда датчик цвета считает синий или белый цвет, устанавливаем цвет светодиодов зеленым, отображаем на ЖК-экране изображение «палец вверх» и сообщаем, что устройство готово к работе:

  while color_sensor.color() not in (Color.BLUE, Color.WHITE):
	
wait(10)
  brick.light(Color.GREEN)
  brick.display.image(ImageFile.THUMBS_UP)

Дожидаемся нажатия датчика касания, присваиваем гироскопическому датчику значение угла 0 и начинаем рисовать:

  while not touch_sensor.pressed():
	
wait(10)
  gyro_sensor.reset_angle(0)
  pen_holder_turn_to(15)
  pen_holder_lower()
  pen_holder_turn_to(30)
  pen_holder_raise()
  pen_holder_turn_to(45)
  pen_holder_lower()
  pen_holder_turn_to(60)

Поднимаем держатель ручки и возвращаем его в исходное положение:

  pen_holder_raise()
  pen_holder_turn_to(0)</i>

Вот такая несложная программа у нас получилась. И теперь запускаем ее и смотрим на робота-чертежника в деле. 

Что дают такие примеры

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

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

Введение:

На втором занятии мы детальнее познакомимся со средой программирования и подробно изучим команды, задающие движение нашему роботу-тележке, собранному на первом занятии. Итак, давайте запустим среду программирования Lego mindstorms EV3, загрузим наш проект lessons.ev3, созданный ранее и добавим в проект новую программу — lesson-2-1. Программу можно добавить двумя способами:

  • Выбрать команду «Файл»-«Добавить программу» (Ctrl+N).
  • Нажать «+» на вкладке программ.

Добавить программу в проект

Рис. 1

2.1. Палитры программирования и программные блоки

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

Зеленая палитра называется: «Действие»:

Палитра Действие

Рис. 2

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

2.2. Зеленая палитра – блоки действия

Первый программный блок зеленой палитры предназначен для управления средним мотором, второй блок — для управления большим мотором. Так как параметры этих блоков идентичны — рассмотрим настройку на примере блока — большой мотор.

Программный блок - Большой мотор

Рис. 3

Для правильной настройки блока управления большим мотором мы должны:

  1. Выбрать порт, к которому подключен мотор (A, B, C или D) (Рис. 3 поз. 1)
  2. Выбрать режим работы мотора (Рис. 3 поз. 2)
  3. Настроить параметры выбранного режима (Рис. 3 поз. 3)

Чем же отличаются режимы? Режим: «Включить» включает мотор с заданным параметром «Мощность» и после этого управление передается следующему программному блоку программы. Мотор будет продолжать вращаться, пока не будет остановлен следующим блоком «Большой мотор» с режимом «Выключить» или следующий блок «Большой мотор» не будет содержать другие параметры выполнения. Режим «Включить на количество секунд» включает большой мотор с установленной мощностью на указанное количество секунд, и только по завершению времени мотор остановится, а управление в программе перейдет к следующему программному блоку. Аналогично поведет мотор себя в режимах «Включить на количество градусов» и «Включить на количество оборотов»: только после выполнения установленного вращения мотора, он остановится и управление в программе перейдет к следующему блоку. 

Параметр мощность (на Рис. 3 мощность установлена в 75) может принимать значения от -100 до 100. Положительные значения мощности задают вращение мотора по часовой стрелке, отрицательные — против часовой. При значении мощности равном 0 мотор вращаться не будет, чем «выше» значение мощности, тем быстрее вращается мотор.

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

Отдельно следует сказать о параметре «Тормозить в конце». Данный параметр, если установлен в значение «Тормозить» заставляет мотор тормозить после выполнения команды, а если установлен в значение «Двигаться накатом», то мотор будет вращаться по инерции, пока сам не остановится.

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

Программный блок - Рулевое управление

Рис. 4

Параметр «Рулевое управление» (Рис. 4 поз. 2) может принимать значения от -100 до 100. Отрицательные значения параметра заставляют робота поворачивать налево, при значении равном 0 робот движется прямо, а положительные значения заставляют робота поворачивать направо. Стрелка над числовым параметром меняет свою ориентацию в зависимости от значения, подсказывая тем самым направление движения робота (Рис. 5).

Параметры блока - Рулевое управлениеРис. 5

Программный блок «Независимое управление моторами» похож на программный блок «Рулевое управление». Он также управляет двумя большими моторами, только вместо параметра «Рулевое управление» появляется возможность независимого управления мощностью каждого мотора. При равном значении параметра «Мощность» для левого и правого мотора робот будет двигаться прямолинейно. Если на один мотор подать отрицательное значение мощности (например -50), а на второй — положительное значение (например 50), то робот будет разворачиваться на месте (Рис. 6).

Программный блок - Независимое управление моторами

Рис. 6

Режимы работы этих блоков аналогичны режимам блока управления одним мотором, поэтому дополнительного описания не требуют…

2.3. Прямолинейное движение, повороты, разворот на месте остановка

Итак, теперь мы можем написать программу движения робота по какому-либо маршруту.

Задача 1: Проехать прямолинейно вперед на 4 оборота двигателя. Развернуться. Проехать на 720 градусов.

Решение (Рис. 7):

  1. Используя программный блок «Рулевое управление» проехать вперед на 4 оборота.
  2. Используя программный блок «Независимое управление моторами» развернуться на месте (значение градусов придется подобрать экспериментально).
  3. Используя программный блок «Рулевое управление» проехать вперед на 720 градусов.

Примечание: Почему при развороте пришлось подбирать значение градусов в блоке 2?. Разве не 360 градусов — искомая величина? Нет, если мы зададим значение параметра «Градусы» равным 360, то тем самым заставим на искомую величину провернуться валы левого и правого моторов нашего робота. На какой угол провернется робот вокруг своей оси — зависит от размера (диаметра) колес и расстояния между ними. На Рис. 7 значение параметра «Градусы» равно 385. Данное значение позволяет роботу, собранному по инструкции small-robot 45544 развернуться вокруг своей оси. Если у вас другой робот, то вам придется подобрать другое значение. Можно ли это значение найти математически? Можно, но об этом мы поговорим позднее. 

Решение задачи 1

Рис. 7

Задача 2: Установите на ровной поверхности какое-либо препятствие (банку, кубик, небольшую коробку), отметьте место старта вашего робота. Создайте в проекте новую программу: lesson-2-2, позволяющую роботу объехать вокруг препятствия и вернуться к месту старта.

Сколько программных блоков вы использовали? Поделитесь своим успехом в комментарии к уроку…

2.4. Экран, звук, индикатор состояния модуля 

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

Программный блок - Экран

Рис. 8

Программный блок «Экран» имеет четыре режима работы: режим «Текст» позволяет выводить текстовую строку на экран, режим «Фигуры» позволяет отображать на экране одну из четырех геометрических фигур (прямая, круг, прямоугольник, точка), режим «Изображение» может вывести на экран одно изображение. Изображение можно выбрать из богатой коллекции изображений или нарисовать свое, используя редактор изображений. Режим «Окно сброса настроек» сбрасывает экран модуля EV3 к стандартному информационному экрану, показываемому во время работы программы.

Программный блок Экран. Предварительный просмотр.

Рис. 9

Рассмотрим параметры программного блока «Экран» в режиме «Текст» (Рис. 9 поз.1). Строка, предназначенная для вывода на экран, вводится в специальное поле (Рис. 9 поз. 2). К сожалению, в поле ввода текста можно вводить только буквы латинского алфавита, цифры и знаки препинания. Если режим «Очистить экран» установлен в значение «Истина», то экран перед выводом информации будет очищен. Поэтому, если вам требуется объединить текущий вывод с информацией уже находящейся на экране, то установите этот режим в значение «Ложь». Режимы «X» и «Y» определяют точку на экране, с которой начинается вывод информации. Экран блока EV3 имеет 178 пикселей (точек) в ширину и 128 пикселей в высоту. Режим «X» может принимать значения от 0 до 177, режим «Y» может принимать значения от 0 до 127. Верхняя левая точка имеет координаты (0, 0), правая нижняя (177, 127)

Координаты экрана блока EV3

Рис. 10

Во время настройки программного блока «Экран» можно включить режим предварительного просмотра (Рис. 9 поз. 3) и визуально оценить результат настроек вывода информации.

В режиме «Фигуры» (Рис. 11 поз. 1) настройки программного блока меняются в зависимости от типа фигуры. Так при отображении круга необходимо будет задать координаты «X» и «Y» центра окружности, а также значение «Радиуса». Параметр «Заполнить» (Рис. 11 поз. 2) отвечает за то, что будет отображен либо контур фигуры, либо внутренняя область фигуры будет заполнена цветом, заданным в параметре «Цвет» (Рис. 11 поз. 3).

Вывод на экран. Режим "Фигуры"

Рис. 11

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

Программный блок Экран. Отображение прямой.

Рис. 12

Чтобы отобразить прямоугольник следует задать координаты «X» и «Y» левого верхнего угла прямоугольника, а также его «Ширину» и «Высоту».

Программный блок Экран. Отображение прямоугольника

Рис. 13

Отобразить точку проще всего! Укажите лишь её координаты «X» и «Y».

Режим «Изображение», наверное, самый интересный и самый используемый режим. Он позволяет выводить на экран изображения. Среда программирования содержит огромную библиотеку изображений, отсортированную по категориям. В дополнение к имеющимся изображениям вы всегда можете создать свой рисунок и, вставив его в проект, вывести на экран. («Главное меню среды программирования» — «Инструменты» — «Редактор изображения»). Создавая своё изображение, вы можете также вывести на экран символы русского алфавита.

Программный блок Экран. Изображение.

Рис. 14

Как вы видите — отображению информации на экране главного модуля EV3 среда программирования придает огромное значение. Давайте рассмотрим следующий важный программный блок «Звук». С помощью этого блока мы можем выводить на встроенный динамик блока EV3 звуковые файлы, тона произвольной длительности и частоты, а также музыкальные ноты. Давайте рассмотрим настройки программного блока в режиме «Воспроизвести тон» (Рис. 15). В этом режиме необходимо задать «Частоту» тона (Рис. 15 поз. 1), «Продолжительность» звучания в секундах (Рис. 15 поз. 2), а также громкость звучания (Рис. 15 поз. 3).

Программный блок Звук.

Рис. 15

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

Программный блок Звук. Воспроизвести ноту.

Рис. 16

В режиме «Воспроизвести файл» вы можете выбрать один из звуковых файлов из библиотеки (Рис. 17 поз. 1), либо, подключив к компьютеру микрофон, с помощью Редактора звука («Главное меню среды программирования» — «Инструменты» — «Редактор звука») записать собственный звуковой файл и включить его в проект.

Программный блок Звук. Воспроизвести файл.

Рис. 17

Давайте отдельно рассмотрим параметр «Тип воспроизведения» (Рис. 17 поз. 2), общий для всех режимов программного блока «Звук». Если данный параметр установлен в значение «Ожидать завершения», то управление следующему программному блоку будет передано  только после полного воспроизведения звука или звукового файла. В случае установки одного из двух следующих значений начнется воспроизведение звука и управление в программе перейдет к следующему программному блоку, только звук или звуковой файл будет воспроизведен один раз или будет повторяться, пока не его не остановит другой программный блок «Звук».

Нам осталось познакомиться с последним программным блоком зеленой палитры — блоком «Индикатор состояния модуля». Вокруг кнопок управления модулем EV3 смонтирована цветовая индикация, которая может светиться одним из трех цветов: зеленым, оранжевым или красным. За включение — выключение цветовой индикации отвечает соответствующий режим (Рис. 18 поз. 1). Параметр «Цвет» задает цветовое оформление индикации (Рис. 18 поз. 2). Параметр «Импульсный» отвечает за включение — отключение режима мерцания цветовой индикации (Рис. 18 поз. 3). Как можно использовать цветовую индикацию? Например, можно во время различных режимов работы робота использовать различные цветовые сигналы. Это поможет понять: так ли выполняется программа, как мы запланировали.

Индикатор состояния модуля

Рис. 18

 Давайте используем полученные знания на практике и немного «раскрасим» нашу программу из Задачи 1. 

Задача 3: 

  1. Воспроизвести сигнал «Start»
  2. Включить зеленую немигающую цветовую индикацию
  3. Отобразить на экране изображение «Forward»
  4. Проехать прямолинейно вперед на 4 оборота двигателя.
  5. Включить оранжевую мигающую цветовую индикацию
  6. Развернуться
  7. Включить зеленую мигающую цветовую индикацию
  8. Отобразить на экране изображение «Backward»
  9. Проехать на 720 градусов
  10. Воспроизвести сигнал «Stop»

Попробуйте решить задачу 3 самостоятельно, не подглядывая в решение! Удачи!

Решение задачи 3

Содержание

  1. Программирование Mindstorms EV3
  2. Программирование на микроконтроллере EV3
  3. Среда программирования EV3
  4.  Программирование EV3 Basic
  5. Программирование EV3 на RobotC
  6. Программирование EV3 на Python
  7. Программирование EV3 при помощи Scratch
  8. Подключение LEGO EV3 к Scratch 3.0

Программирование Mindstorms EV3

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

EV3 программирование

лего программирование

Запрограммировать робота с микрокомпьютером EV3 можно несколькими различными способами:

  1. Первый и самый простой способ – это при помощи интерфейса микроконтроллера EV3;
  1. Среда программирования EV3 позволяет при помощи визуального программирования создавать достаточно сложные программы:
  2. При помощи других языков программирования.

Программирование на микроконтроллере EV3

Самым простым является программирование при помощи самого интерфейса микрокомпьютера EV3.

Микропроцессор EV3 поставляется с уже установленным на нем программным обеспечением.

После включения модуля EV3 можно увидеть экран с четырьмя основными закладками.

Для программирования модуля требуется перейти в третью закладку при помощи кнопок управления. Затем открыть окно приложения Brick Program. Сразу отображаются два блока – это блок «Начало» и блок «Цикл».

EV3 программирование модуля

программирование блока лего

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

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

Производители Lego EV3 позаботились о том, чтобы обеспечить владельцев робототехнических конструкторов Lego Mindstorms EV3 бесплатным программным обеспечением. Скачать программное обеспечение EV3 для различных устройств можно с официального сайта Lego.

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

редактор EV3

Также в ПО существуют задания по программированию, которые позволяют быстро научиться программировать роботов EV3. Программное обеспечение является пиктографическим. Оно обеспечивает простое и интуитивно понятное визуальное программирование.

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

Системные требования

требования к оборудованию

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

 Программирование EV3 Basic

Одним из текстовых языков программирования Lego EV3 является EV3 Basic. Текстовый язык позволяет развить навыки текстового программирования и является плавным переходом к более сложному программированию. По сложности этот язык не очень отличается от среды программирования Lego EV3. Скачать загрузчик Microsoft Small Basic можно с официального сайта Microsoft.

Microsoft Small Basic

Small Basic

Основными достоинствами EV3 Basic являются:

  • Простота установки;
  • EV3 Basic является свободным программным обеспечением
  • Microsoft Small Basic специально разрабатывался для того, чтобы обучать программированию;
  • Не нужно перепрошивать микрокомпьютер EV3;
  • Поддерживает русский язык;
  • Имеет встроенную справку;
  • Имеет понятный интерфейс;
  • Есть множество примеров;
  • Поддерживает все возможности среды программирования Lego EV3.

Программирование EV3 на RobotC

Среда программирования RobotC специально разработана для образовательной робототехники. Этот язык может использоваться и новичками, и опытными программистами и является кросс-платформенным. Есть базовый и расширенный режим программирования.

RobotC для EV3

RobotC

В среде программирования присутствует C-подобный язык и язык RobotC. Язык RobotC – это переходный язык от визуального программирования к текстовым блокам. Для использования RobotC требуется перепрошивка микроконтроллера EV3. Использовать RobotC можно со многими робототехническими платформами. Это такие платформы как :

  • VEX IQ;
  • VEX CORTEX (EDR);
  • VEX PIC (Legacy Support);
  • LEGO MINDSTORMS EV3;
  • LEGO MINDSTORMS NXT;
  • TETRIX;
  • RCX (поддержка прежних версий);
  • UNO Arduino / MEGA 1280, MEGA 2560;

Среда программирования RobotC похожа на среду программирования Visual Studio и имеет интерфейс на английском языке. RobotC является платным с десятидневным бесплатным периодом.

После окончания бесплатного периода нужно приобретать лицензию. Стоимость годовой лицензии:

  • На один компьютер 49 долларов;
  • На шесть рабочих мест 149 долларов;
  • На тридцать рабочих мест 299 долларов.
  • Кроме этого предлагаются бессрочные лицензии.

Операционная система для RobotC должна быть из семейства Microsoft Windows. При помощи среды программирования RobotC можно создавать эффективные программы с использованием сложных математических выражений.

Программирование EV3 на Python

Одним из наиболее популярных языков программирования в мире является Python. Он имеет небольшое синтаксическое ядро и объемную стандартную библиотеку функций. В операционной системе Linuх язык программирования Python установлен. При желании можно установить нужный вам текстовый редактор.

На микрокомпьютере EV3 установлена операционная система Linux. Для того, чтобы программировать EV3 на Python нужно установить Linux ev3dev на модуль EV3.

Скачать образ можно по адресу с официального сайта https://www.ev3dev.org/downloads.

ev3dev

ev3dev

Затем нужно установить образ на карту памяти microCD. Желательно, чтобы класс карты был не менее десяти. Объем карты памяти от двух до тридцати двух гигабайт. Можно также использовать карту памяти microSDHC.

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

Затем нужно настроить соединение с компьютером и можно приступать к работе. Настройки соединения с компьютером нужно описывать отдельно так как они достаточно сложные. Для написания программ нужен еще редактор кода.

В качестве одного из вариантов можно установить редактор кода PyCharm Edu. Есть бесплатная версия с наличием подсказок, проверкой кода и подсвечиванием синтаксиса. Созданный в программе файл можно передать в блок EV3 при помощи программы PuTTY. Эта программа помогает установить SSH соединение операционной системы Windows с микроконтроллером EV3.

PuTTY

PuTTY

Скачать программу PuTTY можнос официального сайта. Есть 32 битная и 64 битная версии программы.

Программирование EV3 при помощи Scratch

Scratch является графической средой программирования. Программировать EV3 при помощи Scratch можно если установить нужное программное обеспечение и настроить его. Программное обеспечение можно установить на любые операционные системы. Для примера выберем операционную систему Windows.

Scratch_2_0

Scratch_2_0

Как и в случае с программированием на Python, потребуется карта памяти с такими же параметрами. Карту памяти нужно отформатировать в файловой системе FAT32. На компьютер надо установить виртуальную Java-машину под названием leJOS.

Эта Java-машина специально адаптирована для Lego Mindstorms EV3 и ее можно скачать с официального сайта https://sourceforge.net/projects/ev3.lejos.p/files.

Затем устанавливаем виртуальную машину на компьютер со всеми компонентами.

После этого устанавливаем образ на карту памяти. В дальнейшем при включении микрокомпьютера EV3 с картой памяти будет загружаться leJOS EV3. Без карты памяти будет происходить загрузка стандартного программного обеспечения Lego EV3.

Также на компьютере должна быть установлена свежая версия Adobe AIR. Затем можно установить редактор Scratch.

Он также может быть скачан с официального сайта https://scratch.mit.edu/download.

Установка редактора не занимает много времени.

Следующим шагом является установка ev3-scratch-helper-app. Это приложение служит для связи редактора Scratch и микроконтроллера EV3. Также в редакторе можно в настойках установить русский язык и нужно добавить блоки EV3 в редактор Scratch. После добавления блоков можно приступать к написанию программ.

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

Подключение LEGO EV3 к Scratch 3.0

Написание
программы для подвижного робота из конструктора LEGO

MINDSTORMS EV3

Так как мы имеем дело
с конструктором LEGO MINDSTORMS EV3, следовательно, для написания программы
понадобится базовая среда программирования EV3, созданная на основе
графического языка LabVIEW и позволяющая задавать алгоритмы для робота
визуально: команды представлены в виде блоков, которые можно перетаскивать и
соединять. 

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

Задача 1

Написать программу для
робота «Приводная платформа» LEGO Mindstorms EV3, согласно одному из ниже представленных
технических заданий (без использования датчиков):

a)      Робот
должен проехать по траектории равнобедренный треугольник.

b)      Робот
должен проехать по траектории прямоугольник.

c)      Робот
должен проехать по траектории квадрат.

d)      Робот
должен проехать по траектории равносторонний треугольник.

e)      Робот
должен проехать по траектории равнобедренной трапеции.

Так же нам известны
такие параметры, как диаметр колеса, расстояние равное 376, 8 мм., которое
проезжает каждое колесо за один полный оборот Приводной платформы EV3 вокруг
своей оси и характеристика робота.

Для написания программы требуется решение логической
задачи, опираясь на

известные законы и формулы в математике. Начнём наше
решение с разработки алгоритма:

1.      Произвести
необходимые математические расчёты

2.      Построить
чертёж (необязательно)

3.      Написать
программу

Были выбраны варианты
под буквами c и e. Для варианта c программа была написана с применением
вычислительных блоков (переменная, константа, математика в режиме «умножение» и
«дополнение»), блока движения и блока «Управление операторами», а именно цикла.

1.     
Расстояние, которое проезжает робот за один поворот равно
π*диаметр колеса, т.е.175,8 мм (хотя нам оно тоже известно, можно сократить
полученную программу на 4 блока).

2.      Расстояние,
пройденное каждым колесом при развороте равно 376,8 мм.

3.     
Для разворота нашего робота на 900, мы 376,8/175,8*900
получаем 1920 для данной модели робота (программу можно сократить
ещё на 1 блок и выставить в параметрах блока «независимое управление» 1920

Для варианта e
программа была написана с применением блоков движения, расчёты произведены
заранее. Предположим, что длина нижнего основания трапеции равна 3 оборотам
двигателя нашего робота, верхнее – 1 обороту, боковые (они равны по условию) –
2 оборотам, а углы 1350 и 450.

 

Угол поворота робота
рассчитываем так же, как и в первой программе и получаем соответственно 2890
и 960.

Задача 2

Запрограммировать
Приводную платформу EV3 с датчиком, согласно представленному техническому
заданию: написать программу, заставляющую робота двигаться вперед, при наезде
на препятствие — отъезжать назад, поворачивать вправо на 90 градусов и
продолжать движение вперед до следующего препятствия. После 7 столкновений
робот должен издать звук и остановить выполнение программы.

Характеристики робота указаны (ссылка).

Решение:

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

Задача 3

Написать программу для
робота EV3. При запуске созданной вами программы робот должен выполнять те же
функции, что были отображены на видео (видео и характеристики робота даны).

Решение:

1  способ (не
оптимальный).

Используется блок
«ожидание» в режиме датчика отраженного света (интервал света 0 до 50), затем
блок движение – «рулевое управление» поднимает шар вверх с помощью

«гусенички», но там есть штифты (1 оборот
двигателя по умолчанию), после большой мотор находится в режиме «ожидания» пока
не произойдёт касание шарика и датчика касания – «гусеничка» едет вниз. Далее в
работу вступает средний мотор, толкая шар сначала направо, что мы и видим
благодаря блоку «переключатель». Затем снова все повторяется, только шар летит
налево. Данный алгоритм линейный, следовательно, запись большая.

2  способ
(рациональный).

Решение:

Программа сокращается в 2 раза.
Появляется блок «переменная» и блок «цикл». Блок «переменная» имеет начальное
значение 0, но после прохождения цикла она становится равной 1, следовательно,
блок «переключатель» сначала направит шарик точно направо, так как верхняя
ветвь истина, а затем шарик полетит налево (вторая итерация цикла).

Чтобы программировать робота LEGO Mindstorms EV3 на языке Python мало знать только этот язык. Необходимо ещё иметь представление о библиотеке ev3dev.ev3, для работы с датчиками и моторами. А также не помешало бы иметь под рукой полноценную среду разработки с подсказками, подсветкой синтаксиса и отладчиком. В статье я опишу, как настроить EV3 и компьютер для комфортной разработки вашего проекта на Python.

Программируем робота LEGO Mindstorms EV3 на Python

Установка прошивки ev3dev

Для того чтобы ваши программы, написанные на Python (в статье я буду иногда называть его Питоном) работали на EV3, вам нужно установить на micro-SD-карту прошивку ev3dev и запустить EV3 с этой прошивкой. Как это сделать написано в статье «ev3dev – устанавливаем и настраиваем Debian Linux на LEGO Mindstorms EV3».

Проверка работоспособности Python и библиотеки ev3dev.ev3

В последних версиях ev3dev уже установлен Питон и библиотека ev3dev.ev3, но прежде чем пойти дальше, проверим их работоспособность. Подключитесь к EV3 через программу PuTTY и выполните команду python3, чтобы запустить терминал Python. В результате вы увидите нечто подобное:

$ python3
Python 3.4.2 (default, Oct 8 2014, 14:47:30)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Здесь символы «>>>» — это приглашение для ввода команд. Команды, адресованные терминалу Python, нужно вводить после этих символов и нажимать Enter, чтобы команда выполнилась. Итак, сначала импортируем библиотеку ev3dev.ev3, для этого выполните в терминале следующую команду:

Затем проверим, работает ли динамик EV3, для этого выполните команду:

ev3.Sound.speak('Welcome to the E V 3 dev project!').wait()

В результате EV3 должен сказать фразу «Welcome to the ev3dev project!».

Дальше можно проверить работу датчика, например, подключите к любому порту датчик касания и вбейте в терминал следующие строки кода (после последней строчки ещё лишний раз нажмите Enter, чтобы завершить ввод кода):

ts = ev3.TouchSensor()
while True:
 ev3.Leds.set_color(ev3.Leds.LEFT, (ev3.Leds.GREEN, ev3.Leds.RED)[ts.value()])

Программа будет зажигать левый красный светодиод, пока вы нажимаете на датчик касания. Чтобы выйти из цикла нажмите Ctrl+C.

Теперь можете проверить работу мотора. Подключите большой мотор к порту A и введите в терминал следующие строки кода:

m = ev3.LargeMotor('outA')
m.run_timed(time_sp = 3000, speed_sp = 500)

Последняя строчка кода будет поворачивать мотор со скоростью 500 тиков в секунду, что составляет около 1,4 оборота в секунду, в течении 3000 миллисекунд.

Если все вышеперечисленные тесты работают успешно, можно двигаться дальше.

Написание программ на Python для ev3dev

По большому счёту писать программы на питоне вы можете в любом текстовом редакторе. Есть даже редакторы с подсветкой синтаксиса, такие как Notepad++. Достаточно лишь создать файл с расширением «.py». Используйте следующий шаблон для написания программы:

#!/usr/bin/env python3
from ev3dev.ev3 import *
 
# TODO: Add code here

Первые две строки должны быть включены в каждую вашу программу для ev3dev. Первая строка даст возможность запускать вашу программу прямо с EV3, а вторая – импортирует библиотеку ev3dev.ev3. Например, файл с программой, где робот приветствует нас голосом, будет выглядеть так:

#!/usr/bin/env python3
from ev3dev.ev3 import *
 
Sound.speak('Welcome to the E V 3 dev project!').wait()

Чтобы программу можно было запустить, файл программы должен быть помечен как исполняемый. Сделать это можно, выполнив команду «chmod +x my-file.py», где «my-file.py» – имя файла с вашей программой, или в программе WinSCP в окне свойств файла, поставив галочки X (X означает eXecute, т.е. выпонять).

Установка разрешение на выполнение файла в WinSCP

После этого вы можете запустить «my-file.py» из файлового браузера ev3dev или выполнив команду «./my-file.py».

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

Выбор среды разработки

Сред разработки для Питона с возможностью отладки есть несколько, но все они платные, кроме одной – это комбинация из среды разработки Eclipse и плагина PyDev. Кроме того для их работы и для нашего комфорта нам ещё понадобятся Java 8, интерпретатор Python, библиотека JCraft и исходники библиотеки ev3dev.ev3. Всё это мы сейчас и будем устанавливать и настраивать.

Если вы знаете ещё какие-либо бесплатные среды разработки для Python, напишите об этом в комментариях.

Установка Java 8

В требованиях к плагину PyDev указано, что на компьютере должна быть установлена Java 8, но не написано что это должно быть JRE (среда выполнения Java) или JDK (комплект разработчика Java). Я думаю, что будет достаточно JRE, но если вам нужен JDK, то лучше поставить его, т.к. JDK включает в себя JRE. Скачать дистрибутив для установки JRE можно на официальном сайте здесь, а JDK — здесь. Я установил JDK. Процесс установки я описывать не буду, т.к. ничего сложного в нём нет.

Если у вас же установлена Java, но вы не знаете какая версия, можете в консоли выполнить следующую команду:

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

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)

Здесь в первой строке указана версия Java, в примере это «1.8.0_91». Единицу в начале здесь нужно откинуть, получится 8. Это и есть версия Java. Третья цифра 91 – это номер обновления. Т.е. в примере получается, что на компьютере по умолчанию используется Java 8. Другие способы узнать версию Java можете посмотреть в официальной документации здесь.

Установка и первый запуск Eclipse

Установка Eclipse очень простая: достаточно скачать архив с официального сайта и распаковать его. Лучше использовать сборку для Java-разработчиков Eclipse IDE for Java EE Developers.

После распаковки у вас появится папка eclipse, в которой вы найдёте файл eclipse.exe. Для запуска среды разработки Eclipse, запустите этот файл.

В процессе запуска Eclipse спросит у вас, где будет находиться рабочая папка с вашими проектами. Вы можете оставить предложенный путь к рабочей папке или указать свой. Я поставил путь «C:ev3dev-Python». Чтобы этот диалог не появлялся при каждом запуске Eclipse, можно установить галочку «Use this as the default and not ask again». Однако если вы планируете использовать несколько рабочих папок, то лучше эту галочку не устанавливать.

Запрос места расположения рабочей папки в Eclipse

После того как Eclipse запустится вы увидите приветствие, как показано на рисунке ниже. Закрыть его можно щёлкнув по крестику закладки «Welcome».

Окно приветствия в Eclipse

После этого вы увидите Eclipse в своём обычном виде.

Eclipse после первого запуска

Установка плагина PyDev

Удостоверьтесь, что компьютер подключен к интернету и запустите Eclipse, если он ещё не запущен. Выберите пункт меню «Help -> Install New Software…».

Пункт меню для установки плагинов Eclipse

В открывшемся диалоге в поле «Work with:» укажите адрес «http://www.pydev.org/updates» и нажмите кнопку «Add…», чтобы установить последнюю стабильную версию плагина PyDev. Если вас интересуют ночные сборки, то укажите «http://www.pydev.org/nightly».

Также рекомендуется убрать галочку «Contact all update sites during install to find required software», чтобы Eclipse не опрашивал все доступные сайты обновлений. Это существенно сократит время установки плагина.

Установка плагина PyDev в Eclipse

После нажатия на кнопочку «Add…» появится небольшой диалог, в котором просто нажмите кнопку «OK».

Запрос имени хранилища в Eclipse

Через некоторое время в списке диалога «Install» отобразятся доступные для установки компоненты. «PyDev» — это собственно сам плагин. Пункт «PyDev Mylyn integration» — это необязательная часть плагина, позволяющая интегрировать его с системой Mylyn. Поставьте обе галочки и нажмите «Next >».

Выбор компонентов плагина PyDev для установки

После этого Eclipse покажет, какие компоненты будут установлены. Нажмите «Next >».

Компоненты плагина PyDev для установки

Следующим этапом вам нужно будет согласиться с лицензиями. Прощёлкать всё лицензии можно в списке слева, при этом текст лицензии будет отображаться справа. Выберите здесь пункт «I accept the terms of the license agreements» и нажмите «Finish».

Согласие с лицензиями при установке PyDev

После этого начнётся установка.

Процесс установки плагина PyDev в Eclipse

Через некоторое время вы увидите предупреждение, что устанавливаемое ПО не подписано. Нажмите здесь «OK».

Предупреждение Eclipse о том, что устанавливаемое ПО не подписано

Дальше Eclipse спросит, доверяете ли вы сертификату. Установите здесь галочку напротив сертификата «Brainwy Software; PyDev; Brainwy» и щёлкните по кнопке «OK».

Подтверждение доверия сертификату PyDev в Eclipse

После того как установка успешно завершится, появится диалог с предложением перезапустить Eclipse. Нажмите здесь «Yes».

Запрос на перезапуск Eclipse

После перезапуска Eclipse вы можете проверить установку. Для этого выберите пункт меню «Window -> Preferences» и в окне настроек найдите пункт PyDev. Если этот пункт есть, то установка прошла успешно. Кстати, здесь вы можете посмотреть версию плагина PyDev. После этого, окошко настроек можно закрыть, щёлкнув по кнопке «Cancel».

Проверка установки PyDev

Настройка интерпретатора в PyDev

Чтобы плагин PyDev давал нам возможность создавать проекты в Eclipse мы должны в настройках PyDev указать, где установлен интерпретатор Python. Если интерпретатор на ПК у вас не установлен, вы можете скачать дистрибутив Python с официального сайта и установить его. На страничке загрузки вы можете выбрать любую версию Python. Для нашей задачи версия интерпретатора не важна, поэтому вы можете выбрать любую версию, например, последнюю. Я на всякий случай выбрал такую же версию, как и версию на EV3 — 3.4.2. Чтобы узнать версию Питона на EV3, выполните команду «python3 –V».

Теперь в Eclipse выберите пункт меню «Window -> Preferences», найдите в списке слева «PyDev -> Interpreters -> Python Interpreter» и нажмите кнопку «New…».

Добавление интерпретатора Python в Eclipse

В поднявшемся окошке, нажмите «Browse…» и откройте файл python.exe. В случае если вы установили Python версии 3.4.2, то по умолчанию – это будет путь «C:Python34python.exe». Нажмите «OK».

Установка пути к интерпретаору Python в Eclipse

В следующем окошке Eclipse попросит подтверждения для добавления путей в SYSTEM PYTHONPATH. Нажмите «OK».

Добавление путей интерпретатора Python в PYTHONPATH

После этого настройка интерпретатора для PyDev завершена. Нажмите «OK», чтобы сохранить изменения.

Добавленный интерпретатор в настройки PyDev в Eclipse

Установка библиотеки JCraft

Писать код Python мы будем в файлах, расположенных локально в рабочей папке, и произведённые нами настройки позволят делать автоматическое копирование изменённых файлов на EV3. Для такой синхронизации нам понадобится библиотека JCraft. Скачать её можно на официальном сайте здесь (ищите на странице раздел «Download»). Вам нужно скачать файл «jsch-0.1.54.jar» или более позднюю версию.

Скачанный файл можно положить в любое место. Но, поскольку работать с библиотекой JCraft будет библиотека Ant (библиотека Ant по умолчанию сразу включена в Eclipse), я положил этот файл в папку библиотеки Ant, а именно «plugins/org.apache.ant_VERSION/lib» в месте установки Eclipse. Здесь VERSION – это версия библиотеки Ant. У меня эта папка оказалась следующей: «C:eclipsepluginsorg.apache.ant_1.9.6.v201510161327lib».

Теперь откройте настройки Eclipse (пункт меню «Window -> Preferences»), откройте «Ant -> Runtime», выберите «Ant Home Entries (Default)» на закладке «Classpath» и нажмите кнопку «Add External JARs…».

Добавление пути к внешней библиотеке в настройках Ant

Откройте файл с библиотекой JCraft. После этого он появится в списке файлов библиотек, см. картинку ниже. Нажмите «OK», чтобы сохранить изменения.

Путь к библиотеке JCraft в настройках библиотеки Ant

Добавление шаблона программы Python для EV3

Как уже было написано в начале статьи, каждый файл программы Python для EV3 должен начинаться с определённых строк. Для удобства, добавим в Eclipse шаблон для нового файла Python. Откройте настройки, выбрав пункт меню «Window -> Preferences», найдите в списке слева «PyDev -> Editor -> Templates» и нажмите на кнопку «New…».

Добавление шаблона дя модуля Python в PyDev

В поле «Name» задайте имя шаблона, я назвал его «EV3». В списке «Context» выберите «New Module». Уберите галочку «Automatically insert». Можете также задать описание в поле «Description». А в поле «Pattern» задайте сам шаблон. Я вбил сюда шаблон, который приведён в начале статьи. Нажмите «OK».

Свойства шаблона модуля Python в PyDev

Как видите, в списке шаблонов появился наш шаблон. Нажмите «OK», чтобы сохранить изменения.

Шаблон модуля Python для EV3 в настройках PyDev

Создание нового проекта PyDev

Наконец всё настроено и можно приступить к созданию проекта и последующему программированию. Для создания нового проекта, выберите пункт меню «File -> New -> Project…».

Пункт меню для создания нового проекта в Eclipse

Затем в диалоге выберите «PyDev Project» и нажмите «Next >».

Создание нового проекта PyDev в Eclipse

В следующем окне есть много полей. Рассмотрим каждое из них:

      • В первом поле «Project name» задаётся имя проекта, я ввёл здесь «my_project».
      • В поле «Project contents» указывается путь к файлам проекта, я оставил здесь предложенный по умолчанию вариант.
      • В группе «Project type» выбирается интерпретатор для проекта, здесь мы оставим «Python».
      • В выпадающем списке «Grammar version» можно выбрать версию грамматики Питона. Она не обязательно должна совпадать с актуальной версией интерпретатора. Вы спокойно можете использовать более новый интерпретатор, в то время как грамматика будет совместима с более старым интерпретатором, например, вы можете использовать грамматику Python 2.7 с интерпретатором Python 3.4. Я выбрал здесь версию 3.0 — 3.5.
      • В поле «Interpreter» выбирается интерпретатор, который должен использоваться для автодополнения и проверки синтаксиса. Оставлю здесь интерпретатор по умолчанию, т.е. тот, который мы настроили раньше, см. выше раздел «Настройка интерпретатора в PyDev».
      • Кнопочка «Additional syntax validation» позволяет выбрать дополнительные синтаксисы, на которые будет проверен проект. Например, если код должен быть совместим с Python 2 и Python 3, то вам нужно выбрать версию грамматики Python 3, и дополнительную проверку синтаксиса для Python 2. Я не буду здесь ничего выбирать.
      • Настройки ниже связаны с настройкой PYTHONPATH, т.е. путей к связанным проектам или ресурсам. Первый вариант подходит для проектов, для которых папка проекта добавляется в PYTHONPATH. При выборе второго варианта в папке проекта будет создана папка «src», которая будет добавлена в PYTHONPATH. Третий вариант – это добавление путей в PYTHONPATH вручную на следующем шаге мастера. Четвёртый вариант – не добавляем ничего в PYTHONPATH, т.к. это будет сделано позже. Здесь я оставлю первый вариант.

Нажмите «Finish».

Свойства новго проекта PyDev в Eclipse

Если Eclipse увидит, что у вас не выбрана перспектива PyDev, то он предложит её открыть. Согласитесь, нажав «Yes».

Предложение открыть перспективу PyDev в Eclipse

После этого на панели «PyDev Package Explorer» появится папка с вашим проектом. Вы можете открыть папку и посмотреть, что в ней находится. Как видите, кроме ссылки на интерпретатор Python 3.4, пока ничего больше нет. Ещё рядом с папкой проекта появилась папка RemoteSystemsTempFiles, но не обращайте на неё внимания.

Новый проект PyDev в Eclipse

Добавление в проект ссылок на исходники библиотек ev3dev.ev3 и PyDev

Чтобы при работе с классами библиотек ev3dev.ev3 и PyDev, Eclipse выдавал подсказки и делал автодополнение, нам нужно добавить в проект ссылки на исходники этих библиотек.

Скачать исходники библиотеки ev3dev.ev3 можно здесь. Щёлкните по кнопке «Clone or download», а затем по кнопке «Download ZIP». Скачанный архив распакуйте в любое место. Я распаковал его прямо на диск «C:» и в результате у меня получилась папка «C:ev3dev-lang-python-develop».

Скачивание исходников библиотеки ev3dev.ev3

Теперь добавьте в проект ссылку на библиотеку ev3dev.ev3. Для этого щёлкните по названию проекта правой кнопкой мышки и выберите пункт меню «Properties».

Пункт меню свойств проекта в Eclipse

В настройка проекта откройте «PyDev — PYTHONPATH» и перейдите на закладку «External Libraries». Здесь нажмите на кнопку «Add source folder» и добавьте папку «ev3dev-lang-python-develop», у меня это путь «C:ev3dev-lang-python-develop».

Добавление пути к исходникам библиотеки ev3dev.ev3 в свойства проекта PyDev

Аналогично добавьте путь к исходникам библиотеки PyDev, которые расположены в папке «pysrc». Папка «pysrc» должна быть в месте установки Eclipse в подпапке «plugins/org.python.pydev_ВЕРСИЯ_PYDEV», где ВЕРСИЯ_PYDEV – это версия плагина PyDev. Точно определить версию можно в настройках (пункт меню «Window -> Preferences») пункт «PyDev», см. картинку ниже. У меня папка «pysrc» оказалась в папке «C:eclipsepluginsorg.python.pydev_5.7.0.201704111357».

Версия PyDev

Таким же образом нужно добавлять ссылки на исходники всех используемых библиотек, чтобы работать с ними было комфортно. Нажмите «OK», чтобы сохранить настройки.

Добавление путей к исходникам библиотек в окне свойств проекта PyDev

Добавление модуля Python в проект

Теперь напишем простенькую программу. Допустим, это будет программа, которую вы уже видели в начале статьи, которая заставляет робота EV3 говорить фразу «Welcome to the ev3dev project!». Только теперь мы сделаем это в Eclipse, а заодно посмотрим, как среда разработки будет нам помогать в написании кода и проверке синтаксиса.

Для создания файла программы Python, щёлкните по проекту правой кнопкой мышки и выберите пункт меню «New -> PyDev Module».

Пункт меню для добавления нового модуля Python в PyDev

В следующем диалоге задайте имя модуля, например, «my_module» и нажмите «Finish».

Добавление нового модуля Python в Eclipse

После этого появится пара диалогов. Первый диалог запросит у вас шаблон, по которому нужно создать файл программы. Чуть раньше мы уже сделали шаблон под названием «EV3», поэтому просто выберите его и нажмите «OK».

Выбор шаблона программы Python для EV3 в Eclipse

В диалоге «Default Eclipse preferences for PyDev» показаны некоторые настройки плагина PyDev, которые вы можете захотеть изменить. Но мы не будем ничего менять. Нажмите «OK», чтобы закрыть этот диалог.

Окно свойств плагина PyDev

Теперь мы наконец-то видим свой созданный модуль «my_module.py». При этом, созданный файл сразу содержит текст, который мы задали в шаблоне.

Новый созданный модуль Python в Eclipse

Как видите Eclipse сразу начал показывать какое-то предупреждение: слева от 2-й строчки появился восклицательный знак. Подведите к нему мышку и увидите описание возможной проблемы, см. рисунок ниже. Здесь Eclipse предупреждает нас о том, что мы сделали импорт модулей, которые не используем. Это не удивительно, ведь у нас строит звёздочка, это значит, что мы импортируем все модули библиотеки. Не будем обращать внимание на это предупреждение.

Предупреждение в программе Python в Eclipse

Напишем на 4-й строке вместо комментария слово «Sound». После этого Eclipse сразу начинает подсказывать возможные варианты для автодополнения. На картинке видно, что он нашёл два класса «Sound» и «SoundSensor». Для выбранного класса, сразу показывается подсказка.

Подсказки в коде Python в Eclipse

Если вы щёлкните по подсказке, то на ней появится полоса прокрутки, и вы сможете просмотреть всю справку, выделить и скопировать нужные моменты.

Просмотр подсказки для класса Python в Eclipse

Теперь мы поставим точку после слова «Sound» и Eclipse покажет нам доступные методы и атрибуты этого класса. Для каждого из них так же высвечивается подсказка.

Список методов и атрибутов класса Python в Eclipse

Когда виден этот список, вы можете передвигаться по нему с помощью клавиш-стрелок и нажать Enter, чтобы подтвердить выбор. При этом после точки сразу будет написан выбранный метод, а в скобках вы увидите заготовки для ввода параметров и подсказку сверху. Слева сразу будет показана ошибка (красный кружок с буквой «X»), т.к. здесь пока неправильный синтаксис.

Подсказка по параметра метода в Eclipse

Вводим нужные параметры, а ненужные удаляем. Дальше добавляем вызов метода wait. Вот и готова наша программа. Теперь изменения можно сохранить, для этого нажмите Ctrl+S, чтобы сохранить только текущий редактируемый файл, или Ctrl+Shift+S, чтобы сохранить все изменения в проекте. После сохранения исчезнет звёздочка слева от имени файла на закладке. Вообще, при написании программы, лучше почаще сохранять все изменения, т.е. почаще нажимать Ctrl+Shift+S.

Первая программа Python для EV3, написанная в Eclipse готова

При написании этих строк кода, я вкратце продемонстрировал вам, как работает автодополнение, подсказки, а также проверка и подсветка синтаксиса.

Автоматическое копирование файлов программ Python на EV3

Каждый раз после того как мы меняем файл в Eclipse на своём компьютере эти изменения происходят только на нашем компьютере, но не происходят на EV3. Нам нужно, чтобы эти изменения так же синхронно происходили и на нашем EV3. Для этого нам нужно настроить Eclipse так, чтобы при каждом сохранении файла на ПК, происходило его автоматическое копирование на EV3. В этом нам помогут библиотеки Ant и JCraft. Это мы сейчас и сделаем.

Сначала нам нужно создать в проекте файл «build.xml». Для этого щёлкните правой кнопкой мышки по проекту и выберите пункт меню «New -> File…».

Пункт меню для создания нового файлв в Eclipse

В следующем диалоге в поле «File name» задайте имя «build.xml» и нажмите «Finish».

Создание файла build.xml в Eclipse

В открывшемся файле «build.xml» напишите следующий текст и сохраните изменения:

<project name="ev3sync">
    <target name="ev3sync">
        <scp todir="robot:maker@ev3dev:/home/robot"
                dirmode="755" filemode="755">
            <fileset dir="." casesensitive="false">
                <include name="**/*.py"/>
                <exclude name="**/*Test*"/>
            </fileset>
        </scp>
    </target>
</project>

Пример ant-файла build.xml для копирования файлов на удалённый Linux-сервер

Файл «build.xml» в Eclipse по умолчанию ассоциируется с библиотекой Ant. В этом файле описываются действия, которые должна выполнить библиотека Ant. В нашем случае здесь описано, откуда нужно взять файлы и куда их нужно скопировать. Я не буду сильно углубляться в описание того, как работает библиотека Ant и как её нужно настраивать с помощью файла «build.xml», но опишу то, что используется в этом файле. Вы можете использовать этот файл, как образец.

Первый элемент «project» (проект) — это обязательный корневой элемент файла «build.xml». В атрибуте «name» указывается имя проекта. Я указал здесь «ev3sync».

Дальше идёт элемент «target» — это цель. Целей в проекте может быть несколько. В атрибуте «name» указывается имя цели. В моём примере это тоже «ev3sync».

Внутри цели указываются задачи, которые нужно выполнить для достижения этой цели. Здесь у нас только одна задача, которая выполняется библиотекой JCraft – это элемент «scp». Эта задача как раз и выполнит копирование всех файлов Python и папки проекта на EV3. Здесь в атрибуте «todir» указана папка назначения в формате «user[:password]@host:/dir/path», т.е. сначала идёт имя пользователя (у нас это «robot»), затем через двоеточие пароль (у нас это «maker»), затем после собачки имя или IP-адрес EV3 (у нас это «ev3dev»), затем после двоеточия путь (у нас это директория «/home/robot»). В атрибутах «dirmode» и «filemode» указываются, какие атрибуты нужно выставить созданным папкам и файлам. Обратите внимание, что для уже созданных файлов атрибуты не поменяются.

Внутри элемента «scp» с помощью элемента «fileset» указывается набор файлов, которые нужно скопировать на EV3. В атрибуте «dir» указывается папка, где находится набор файлов. Здесь у нас указана точка, это значит, что такой папкой будет папка проекта. С помощью атрибута «casesensitive» я указал, что в именах файлов регистр не важен.

Внутри элемента «fileset» с помощью элемента «include» указываются файлы, которые должны быть включены в набор файлов. Здесь с помощью атрибута «name» я указал, что в набор файлов входят все файлы с расширением «.py», в том числе находящиеся и в подпапках.

В качестве примера я добавил элемент «exclude», с помощью которого можно указать, какие файлы не должны входить в набор файлов. Здесь с помощью атрибута «name» я указал, что в набор файлов не входят файлы, в имени которых есть слово «Test», в том числе и в подпапках.

В итоге мы получили задание с названием «ev3sync», которое будет копировать все файлы проекта с расширением «.py» в имени которых нет слова «Test» на EV3 в папку «/home/robot».

Подробнее обо всех задачах библиотеки Ant смотрите на официальном сайте здесь.

Теперь настроем Eclipse так, чтобы при каждом изменении файлов проекта, запускалось наше задание «ev3sync». Сначала откройте свойства проекта. Для этого щёлкните правой кнопкой по проекту и выберите меню «Properties». В диалоге свойств откройте «Builders» и нажмите кнопку «New…».

Создание нового сборщика в Eclipse

В следующем диалоге выберите «Ant Builder» и нажмите «OK».

Добавление Ant-builder-а в проект в Eclipse

Поднимется окно «Edit Configuration». Здесь на закладке «Main» нажмите на кнопку «Browse Workspace…».

Выбор рабочей папки для файла build.xml в Eclipse

В следующем окне найдите файл «build.xml», щёлкните по нему и нажмите «OK».

Выбор файла build.xml в Eclipse

После этого в поле «Buildfile» появится строка «${workspace_loc:/my_project/build.xml}».

Выбранный файл build.xml

Теперь перейдите на закладку «Targets» и нажмите кнопку «Set Targets…» напротив поля «Auto Build».

Выбор целей для автосборки в Eclipse

В следующем окне выберите цель «ev3sync», которую мы сделали ранее в файле «build.xml» и нажмите «OK».

Выбор цели Ant в Eclipse

После этого в поле «Auto Build» появится наша цель «ev3sync». Нажмите «OK».

Добавленная цель Ant в Eclipse

В следующем окне тоже нажмите «OK».

Вызываемые сборщики проекта в Eclipse

После этого появится консоль, где будет написано, что файл build.xml построен успешно.

Сообщение о том, что файл build.xml успешно построен

Теперь переключитесь на закладку с файлом «my_module.py», поставьте в нём где-нибудь пробел и сотрите его, чтобы Eclipse зафиксировал изменения. После этого сохраните изменения и посмотрите, что будет написано в консоли (консоль можно развернуть, дважды щёлкнув на заголовок). Как видите, произошло подключение к EV3 и задание успешно выполнилось. Можете убедиться, что файл «my_module.py» скопировался в папку «/home/robot» на EV3. Теперь при каждом сохранении будет происходить копирование файла «my_module.py» на EV3.

Отчёт Ant о выполненном задании в Eclipse

Запуск программы на EV3

Лучшего способа запуска программы на Питоне чем запуск через встроенный в Eclipse SSH терминал я не нашёл. Консоль хороша ещё и тем, что выполнение программы можно прервать. Однако Eclipse очень мощный инструмент с множеством возможностей, поэтому вы можете найти и лучший способ запуска программ. Если найдёте, напишите об этом в комментариях.

Итак, чтобы запустить программу Python, откройте терминал Eclipse. Для этого щёлкните по соответствующей иконке или нажмите клавиши Ctrl+Alt+Shift+T.

Запуск терминала в Eclipse

В поднявшемся диалоге «Launch Terminal» выберите терминал «SSH Terminal», в поле «Host» кажите IP-адрес или имя EV3, чуть ниже заполните имя пользователя и пароль (по умолчанию robot/maker), установите галочки «Save user» и «Save password» и нажмите «OK».

Параметры подключения к EV3 из терминала Eclipse

После подключения вы увидите панель с терминалом внизу окна Eclipse.

Панель с SSH-терминалом в Eclipse

Чтобы развернуть терминал (в том числе и любую другую панель Eclipse) на всё окно, дважды щёлкните по названию панели. Как видите, работая в Eclipse, вы можете забыть про PuTTY. Чтобы свернуть развёрнутую панель обратно, опять щёлкните по заголовку дважды.

SSH-терминал Eclipse после подключения к EV3 под управлением ev3dev

Теперь чтобы запустить нашу программу наберите в терминале следующую команду:

python3 /home/robot/my_module.py

Запуск программы Python на EV3 через SSH-терминал Eclipse

Для остановки выполняемой программы вы можете воспользоваться сочетанием клавиш Ctrl+C или Ctrl+Z.

Отладка программы Python на EV3

Поскольку программа в нашем случае выполняется на EV3, а отлаживаться мы должны на компьютере, нас интересует удалённая отладка. Отладка в данном случае не будет похожа на то, как мы обычно это делаем. Здесь нужно будет определённым образом подготовить EV3 и Eclipse и добавить в код программы в нужном месте определённую строчку кода. Также нужно, чтобы EV3 по сети «видел» ваш ПК. Но обо всём по порядку.

Первое, что нужно сделать – это скопировать отладчик PyDev на EV3. Для этого вам нужно найти в месте установки плагина PyDev папку «pysrc» и скопировать её на EV3.

Папка «pysrc» находится в месте установки Eclipse в подпапке «plugins/org.python.pydev_ВЕРСИЯ_PYDEV», где ВЕРСИЯ_PYDEV – это версия плагина PyDev. Точно определить версию можно в настройках (пункт меню «Window -> Preferences») пункт «PyDev», см. картинку ниже. У меня папка «pysrc» оказалась в папке «C:eclipsepluginsorg.python.pydev_5.7.0.201704111357».

Проверка версии PyDev в Eclipse

Директорию на EV3, в которую нужно скопировать папку «pysrc», можете выбрать любую. Я скопировал эту папку в домашнюю директорию «/home/robot».

Теперь нам нужно запустить отладочный сервер PyDev. Для этого сначала откройте перспективу «Debug» (щёлкните по кнопке «Open Perspective», затем выберите в диалоге «Debug» и нажмите «OK»).

Открываем перспективу Debug в Eclipse

В открывшейся перспективе, выберите пункт меню «Pydev -> Start Debug Server».

Запуск сервера отладки PyDev в Eclipse

После запуска сервера вы увидите в консоли надпись «Debug Server at port: 5678».

Сообщение о том, что сервер отладки PyDev запущен

Теперь в начале кода нужно прописать пути к модулям «pydevd» и «_pydevd_bundle» (первый находится в папке «pysrc», второй – в папке «pysrc/_pydevd_bundle»), затем подключить модуль «pydevd», а затем в том месте, где нужно получить отладочную информацию дописать вызов метода «pydevd.settrace(‘ААА.ААА.ААА.ААА’)», где вместо ААА.ААА.ААА.ААА нужно указать IP-адрес или имя вашего компьютера. IP-адрес своего компьютера можете узнать выполнив в консоли Windows команду «ipconfig». Вот пример программы с вызовом метода «settrace»:

#!/usr/bin/env python3
from ev3dev.ev3 import *
 
sys.path.append('/home/robot/pysrc')
sys.path.append('/home/robot/pysrc/_pydevd_bundle')
import pydevd
 
i = 1
while i <= 3:
    pydevd.settrace('192.168.1.155')
    i = i + 1

Сохраните изменения, чтобы файл «my_module.py» скопировался на EV3, и запустите программу через терминал (чтобы увидеть уже открытый и подключенный на другой перспективе терминал выберите пункт меню «Window -> Show View -> Terminal»).

После этого через некоторое время выполнение программы остановится на строке 11 (это видно в редакторе и на панели «Debug»), а на панели «Variables» появится список и значения всех переменных (я выделил значение переменной «i»).

Отладка программы Python на далённой машине в Eclipse

Вы можете подвести мышку к переменной «i» в тексте программы и в появившейся подсказке также будет показано значение переменной.

Отображения значения переменной программы Python в отладчике Eclipse

Чтобы запустить выполнение программы дальше, нажмите кнопку «Resume» или клавишу F8. В нашей программе выполняется цикл, поэтому выполнение опять остановится, и на панели «Variables» вы увидите, что строка с переменной «i» подкрасилась жёлтым цветом. Так подкрашиваются переменные с изменившимися значениями.

Подсветка изменённой переменной в Eclipse

К сожалению, на точки останова Eclipse не реагирует при удалённой отладке. Однако после остановки на строке с методом «settrace» вы можете продолжить выполнение программы пошагово с помощью кнопок «Set Into» (F5), «Step Over» (F6) и «Step Return» (F7), см. картинку ниже.

Кнопки пошаговой отладки в Eclipse

Да, чуть не забыл. Если у вас вдруг возникнет проблема с тем, что отладчик PyDev не может найти исходник, добавьте соответствие удалённого и локального путей в настройках «Windows -> Preferences -> PyDev -> Debug -> Source Locator».

Сопоставление путей на удалённой и локальной машинах в Eclipse

Подведём итог

Итак, теперь у вас есть мощная среда разработки полностью готовая к программированию на языке Python для EV3. Как вы могли убедиться, благодаря Eclipse и плагину PyDev вы сможете писать код, используя автодополнение, проверку синтаксиса и подсказки. Кроме того вы сможете отлаживать свою программу.

Ещё для программирования EV3 вам понадобится справочный материал. Описание библиотеки ev3dev.ev3 можете найти в документации. С проблемами и глюками можете обращаться на сайт поддержки. Исходники библиотеки ev3dev.ev3 можно найти на GitHub-е.

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

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти есим в 11 айфоне
  • Микроутечка фреона как найти
  • Как найти изменение длины волны
  • Как составить юмористический рассказ по русскому языку 6 класс ладыженская
  • Как найти кнопку paint

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии