Рейтинг@Mail.ru

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

Автор: Alex. Опубликовано в Копилка . просмотров: 154318

Рейтинг:  5 / 5

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

Чтобы программировать робота 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, для этого выполните в терминале следующую команду:

import ev3dev.ev3 as 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

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

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:\Python34\python.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:\eclipse\plugins\org.apache.ant_1.9.6.v201510161327\lib».

Теперь откройте настройки 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:\eclipse\plugins\org.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:\eclipse\plugins\org.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 на Питоне. А я желаю вам вдохновения для создания новых интересных проектов.

Tags: Python LEGO Mindstorms Education EV3

Комментарии   

Владимир1
+2 #11 Владимир1 02.05.2019 21:36
Здравствуйте! Прошу прощения, но все очень сложно даже для подготовленных, а для детей с которыми занимаюсь в кружке "Робототехника" и подавно. Лучше и проще использовать в комплексе такие программы как WinSCP, PuTTY, Notepad++.
Цитировать
Artem
0 #12 Artem 14.11.2019 19:42
Здравствуйте, вместо Eclipse + PyDev+Java8 думаю можно установить PyCharm: www.jetbrains.com/pycharm/
Community edition бесплатная.
Цитировать
АндрейД
0 #13 АндрейД 20.10.2021 14:19
Добрый день. По вашим урокам уже освоили Бейсик для EV3.
Но мне до сих пор не хватает удобных способов или инструментов получать от робота данные сенсоров.
Пусть теми же сообщениями из родной среды или ещё как.
Но очень бы хотелось знать в реальном времени, что видит робот - отслеживать ошибочные измерения или не учтёные ситуации.
Вариант получать данные Ардуиной Отправлять их в ПК и там обрабатывать и отрисовывать Питоном - кажется слишком усложнённым.
Возможно ли получать и расшифрровывать сообщения или поток сразу Питоном на ПК?
Цитировать
АндрейД
0 #14 АндрейД 20.10.2021 14:25
А есть ли способ Питоном просто получать данные с робота, показания сенсоров. Возможно как сообщения.

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

Есть ли возможность подключаться и обрабатывать соообщения сразу питоном на ПК.
Без изменений на стороне блока?
Цитировать
ResedTI
0 #15 ResedTI 05.07.2022 17:18
Просто кошмар./// там
Цитировать

Добавить комментарий