image

Некоторое время работаю с Education версией LEGO Mindstorms EV3. Однажды подумалось: «Плохо, что нельзя писать под EV3 программы на Python, всё таки создавать в визуальной среде программирования более-менее серьёзные программы достаточно сложно и долго. Хотя...». Гугл сказал, что таки можно. EV3DEV, Debian Linux-based система, просто скачиваем образ системы, записываем на MicroSD, устанавливаем её в соответствующий разъём «программируемого блока» и включаем блок. Видим как с MicroSD запускается система — отображается лого EV3DEV и светодиоды под блоком кнопок сигнализируют о дисковой активности, далее запускается Brickman — менеджер при помощи которого мы можем запускать скрипты и производить некоторые настройки блока.

На сайте ev3dev.org дана подробная инструкция по началу работы с системой. Четвёртым шагом идёт настройка сети через USB. Проблем возникнуть не должно, подключаемся, ставим нужные пакеты, я сразу поставил mc и htop.

image

Ресурсов конечно не густо. Подключить zram у меня пока не получилось. Тем не менее python запускается и работает, причём скрипты работают заметно шустрее, чем программы сделанные в визуальной среде. Для управления блоком (т.е. для доступа к сенсорам, моторам, дисплею, кнопкам, светодиодам и звуку) есть API ev3dev-lang (библиотека уже есть в системе), достаточно простое и удобное. В библиотеке есть примеры её использования, на сайте ev3dev.org есть подробное описание API, а так же как обращаться к устройствам напрямую. Есть и готовые проекты, один из них на Bash, а мне больше всего понравился Ev3 Print3rbot.

Мой пример простейшего Line follower
#!/usr/bin/python
import ev3dev.ev3 as ev3
import time


ANGLE = 5


l_motor = ev3.LargeMotor(ev3.OUTPUT_B)
r_motor = ev3.LargeMotor(ev3.OUTPUT_C)
c_sensor = ev3.ColorSensor()
l_motor.reset()
r_motor.reset()
l_motor.duty_cycle_sp = 100
r_motor.duty_cycle_sp = 100
l_motor.stop_command = "brake"
r_motor.stop_command = "brake"
l_motor.position_sp = ANGLE
r_motor.position_sp = ANGLE
c_sensor.command = "COL-REFLECT"    # by default
while True:
    motor = l_motor if c_sensor.value() > 50 else r_motor
    motor.run_to_rel_pos()
    while "running" in motor.state:
        time.sleep(0.01)

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

Bad Apple

Комментарии (13)


  1. Just_Wah
    21.01.2016 10:39
    +1

    при таких цена на LEGO® MINDSTORMS® Education EV3 это кому-то интересно?


    1. tangro
      21.01.2016 11:31
      +3

      А есть что-то аналогичного качества и удобства дешевле?


      1. Just_Wah
        22.01.2016 11:22

        с одно стороны да, посыл понятен. Но с другой. Я бегло посмотрел. Это 30+т. руб. Думаю, такая цена сама по себе за гранью тех целей, для которых предназначено изделие.


        1. tangro
          22.01.2016 11:51
          +1

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


    1. AigizK
      21.01.2016 12:31
      +3

      Да, если успели до этого купить.


  1. Dimchansky
    21.01.2016 11:06

    Можно еще на Go писать программы.


  1. Rob1nZon
    21.01.2016 11:11

    А со старым NXT такое можно сотворить?


    1. bioskiller
      21.01.2016 13:23

      На старый есть www.lejos.org


      1. nIx0iD
        21.01.2016 16:37

        +1, сразу поставил lejos и пишу на java 1.7


        1. bioskiller
          22.01.2016 06:12

          Там не только жаба получается, еще и возможность проектировать в MatLab Simulink


  1. potan
    21.01.2016 13:13

    А языки Rust и Julia там поддерживаются?
    Можно ли использовать библиотеки и приложения ROS?


    1. Shrim
      21.01.2016 13:36
      +1

      ROS вроде есть. Rust и Julia должны поддерживаться — система основана на Debian Jessie, сенсоры и моторы представлены стандартными устройствами, для Python просто сделана удобная библиотека, для доступа к этим устройствам. На сайте подробно описано как работать с устройствами сенсоров и моторов, можно прямо из консоли, можно на любом удобном вам языке.


  1. BubaVV
    21.01.2016 14:03

    На BogoMIPS смотреть не бросим