Яндекс.Метрика

    Подсознание

    Lego Mindstorms для программиста

    Mindstorms setМне очень нравится играть в Lego. Нравится собирать роботов и машинки.
    А ещё мне очень нравится програмировать. Нравится писать программы и фреймворки.
    А не так давно я нашел способ совместить эти два увлечения. Lego Mindstorms — это набор, включающий в себя несколько моторчиков, сенсоров и программируемый модуль, который может считывать информацию с сенсоров и управлять моторчиками.

    В этом посте я расскажу больше о Mindstorms и о способах программирования.


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

    Сенсоры


    Стандартный набор сенсоров Mindstorms 2.0 включает в себя:
    light sensor
    Цветовой сенсор
    Этот сенсор умеет делать довольно много. Во-первых, он умеет считывать текущий цвет (и возвращать его RGB-значения). Во-вторых, он умеет возвращать текущую освещённость. Ну, и в-третьих, он умеет работать как лампочка.

    touch sensor
    Два сенсора прикосновения
    Эти сенсоры умеют регистрировать три события: пимпочку нажали, пимпочку отпустили и пимпочку нажали и тут же отпустили.

    sonic sensor
    Ультразвуковой сенсор
    Этот сенсор умеет определять расстояние до преграды перед сенсором. Работает в радиусе 2ух метров.

    Моторчики


    servo motorВ комплект входят 3 моторчика. Каждый можно крутить на заданный угол (обещают точность до одного градуса), а также считывать текущий угол поворота. Последнее полезно, если к моторчику приделано колесо, которое пользователь крутит сам.

    Программируемый модуль


    servo motorЭто маленький компьютер. Процессор на 48 MHz, 64 KB оперативки, 256 KB флеш-памяти, порт USB 1.1 и bluetooth радио. Конечно, висту на нём не поднять, но приложения для управления роботами работают очень даже шустро.

    Программы


    Здесть начинается самое интересное. Вместе с набором поставляется диск с программой Mindstorms NXT. Это графическая оболочка для написания простеньких программ. Она показалась мне весьма неудобной. Вот, к примеру, как выглядит программа с одним циклом и if-ом:

    program

    К счастью, существует целый ряд проектов, который позволяют программировать на нормальных языках. Я остановился на проекте lejos. Программы пишутся на Java, компилируются в классы, а потом транслируются в бинарный формат, который понимает перепрошитый управляющий модуль.

    Java вполне настоящая: есть довольно много стандартный библиотек, есть нити, кое-что из IO. Даже есть API для работы с bluetooth. Более того, есть плагин для eclipse. В общем, всё, о чём может мечтать разработчик.
    Приведу пример простой программы:

      public static void main(String[] aArg) throws Exception {
        ColorLightSensor cs = new ColorLightSensor(SensorPort.PORTS[0],
            ColorLightSensor.TYPE_COLORNONE);

        for (int i = 0; i < 3; i++) {
          cs.setFloodlight(true);

          LCD.drawString("Hello Habr", 3, 4);
          Thread.sleep(500);

          Motor.A.rotate(i % 2 == 0 ? 90 : -90);

          cs.setFloodlight(false);
        }

      }


    * This source code was highlighted with Source Code Highlighter.


    Как вы поняли, робот катается туда-сюда, мигает лампочкой и говорит «Hello Habr».

    Ещё про сенсоры


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

    Итого


    В общем, Mindstorms — это отличный способ провести время. Если нравится Lego и хочется почувствовать себя сумасшедшим профессором — очень рекомендую.

    Буду рад ответить на вопросы про этот набор.