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




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


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

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

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

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

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

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

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


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

В 2006 году Microsoft объявила о создании платформы Microsoft Robotics Developer Studio (более подробно в статье Википедии). MRDS – это Windows – ориентированная среда разработки приложений для робототехники и симуляции. В настоящее время актуальной является версия Microsoft Robotics Developer Studio 4. Среди особенностей: язык графического программирования VPL, Web – и Windows – ориентированные интерфейсы, среда симуляции VSE, упрощенный доступ к датчикам, микроконтроллеру и исполнительным механизмам робота, поддержка языка программирования C#, библиотеки для многопоточного программирования и распределенного выполнения приложений CCR и DSS, поддержка многих робототехнических платформ (Eddie, Boe — Bot, CoroBot, iRobot, LEGO NXT и т.д.).

LabVIEW (Laboratory Virtual Instrumentation Engineering Workbench) — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы National Instruments (более подробно в статье Википедии). LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами. Идеологически LabVIEW очень близка к SCADA-системам, но в отличие от них в большей степени ориентирована на решение задач не столько в области АСУ ТП (автоматизированные системы управления технологическим процессом), сколько в области АСНИ (автоматизированных систем научных исследований). Графический язык программирования «G», используемый в LabVIEW, основан на архитектуре потоков данных. Последовательность выполнения операторов в таких языках определяется не порядком их следования (как в императивных языках программирования), а наличием данных на входах этих операторов. Операторы, не связанные по данным, выполняются параллельно в произвольном порядке. Программа LabVIEW называется и является виртуальным прибором (англ. Virtual Instrument) и состоит из двух частей:
  • блочной диаграммы, описывающей логику работы виртуального прибора;
  • лицевой панели, описывающей интерфейс пользователя виртуального прибора.

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


Комплект NXT состоит из управляющего блока, четырех датчиков и трех сервоприводов. Управляющий блок содержит в себе:
  • 32-битный микроконтроллер AVR7 с 256 КБайт FLASH памяти и 64 КБайт RAM памяти;
  • 8-битный микроконтроллер AVR c 4 Кбайт FLASH памяти и 512 Байт RAM памяти;
  • радиомодуль Bluetooth V 2.0;
  • USB-порт;
  • 3 разъема для подключения сервоприводов;
  • 4 разъема для подключения датчиков;
  • LCD дисплей разрешением 99x63 пикселей;
  • динамик;
  • разъем для 6 батареек типа AA.

Датчики (в разных комплектациях разные наборы датчиков ):
  • ультразвуковой датчик;
  • два тактильных датчика (датчики касания);
  • датчик опредения цвета.



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

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


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

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


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

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

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

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

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




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

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

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



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



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



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

  8. Запустим программу на выполнение.



    Рисунок 7 — Результат выполнения программы


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

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


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

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

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



    Рисунок 9 — Контекстное меню

  3. разместим данный блок и введем «Hello, World!»,
  4. аналогичным образом выберем блок One Button Dialog,



    Рисунок 10 — Блок One Button Dialog

  5. соединим блоки как показано на рисунке,



    Рисунок 11 — Готовая диаграмма

  6. запустим программу, нажав кнопку в виде горизонтальной стрелки на панели задач,



    Рисунок 12 — Результат выполнения программы


Резюме


  • Мы сделали обзор программных платформ для разработки приложений микрокомпьютера NXT.
  • Мы рассмотрели основные принципы разработки приложений в платформах MRDS 4 и NI LabVIEW.
  • Познакомились с интерфейсом сред.

В следующих статьях мы будем заниматься непосредственно программированием NXT. По среде LabVIEW в сети есть много учебных материалов, по VPL гораздо меньше. Очень рекомендую изучить справочное руководство обеих платформ (необходимо знание английского), в данных руководствах очень много примеров которые можно реализовать и не имея NXT, а так же следующие книги:
  • Программируем микрокомпьютер NXT в LabVIEW — Лидия Белиовская, Александр Белиовский,
  • Microsoft Robotics Developer Studio. Программирование алгоритмов управления роботами — Василий Гай.

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

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


  1. and7ey
    04.01.2016 22:03
    +9

    Зачем дубль на GT?


  1. semenyakinVS
    04.01.2016 22:11
    +2

    Я когда-то на второй NXT делал радиальный сонар с помощью датчика расстояния — причём описывал алгоритм разложения Фурье для отрисовки результата (синусы/косинусы) на NXT с помощью блочков. Очень упорото получилось — такая гигантская колбаса из разноцветных логических блочков.

    После я поставил нормальную ось на NXT, с сишным компилятором и даже какой-то хэллоуворлд запускал… А потом я нашёл работу и пришлось забить…
    Эх… Славные были времена.


    1. alfatapok
      04.01.2016 22:18

      Если можно по-подробнее. В какой среде(платформе) Вы делали радиальный сонар? И что за ось была поставлена на NXT? Заранее спасибо!


      1. semenyakinVS
        04.01.2016 22:28

        Так в LabView и делал, там есть циклы и проверки, с их помощью делал. Ось — не помню. Это было года три назад. Гуглил и взял ту, которую все пиарили. Ставил долго — подобного опыта тогда вообще не было, поэтому дня три разбирался. Потом, наконец, скомпилил на компе проект и залил на NXT.


        1. alfatapok
          04.01.2016 23:11

          На сколько я знаю ОС уже стоит в NXT, она же firmware. Я обгуглил весь интернет и не нашел упоминания о каких-то сторонних ОС на NXT. В контроллер можно загрузить только приложение написанное на каком либо языке, которое выполняется в ОС NXT, либо взаимодействовать с NXT в режиме интерпретатора. Или мы друг друга не поняли?


          1. semenyakinVS
            04.01.2016 23:26
            -1

            Вероятно, я что-то не так понял. Я помню что «перепрошивал firmware» (как мне тогда казалось, перепрошивал) — но, видимо, это означало не установку другой оси, а попросту заливание интерпретатора на девайс… На самом деле я тогда всё делал практически методом тыка, хотелось быстрее получить рабочий С-код для Mindsotrms. А когда получил — оказалось что теперь нет времени в нём разбираться.


          1. mihuil
            05.01.2016 08:30
            +2

            Для NXT существует несколько прошивок. Например, я программирую NXT в среде TrikStudio, мои учителя программируют в RobotC, для каждой среды NXT прошивается разными прошивками.

            СтайтTrikStudio лежит, можете почитать на RobotC www.robotc.net/support/lego

            ROBOTC requires special firmware to communicate with the NXT. This video will show you how. There is also a PDF that is the written version.


          1. Lebets_VI
            05.01.2016 10:34
            +1

            Например, lejos www.lejos.org.
            Бесплатно и возможностей больше.


            1. TimReset
              06.01.2016 01:23

              Точно, только хотел написать! В ней можно на java писать. Я статью написал, в которой LeJOS упоминал: habrahabr.ru/post/274571


      1. semenyakinVS
        04.01.2016 23:30
        +2

        Кстати, по поводу самого радара — там всё просто. Считаем расстояние до преграды (length) при текущем угле поворота «головы» робота (head_rot). Знаем позицию робота — можем получить место расположение препятствия прибавив вектор (length * cos(head_rot), length * sin(head_rot)).

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


    1. semenyakinVS
      05.01.2016 23:44

      причём описывал алгоритм разложения Фурье для отрисовки результата


      Блин, перечитал только что… Что-то я сбрендил. Какой Фурье?! Ряд Тейлора, конечно!


  1. commanderxo
    05.01.2016 02:15

    Решил попробовать, и гугль привёл меня на страницу NI, где базовую версию LabVIEW предлагают за 1000 долларов. Всё так плохо, или я просто не заметил какую-нибудь более дешёвую версию для некоммерческого использования?


    1. alfatapok
      05.01.2016 09:34

      Есть версии Student Edition и Education кажется, они стоят дешевле, вот ссылка на одну из этих версий.


  1. Sergunka
    05.01.2016 08:30
    +4

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



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

    Из последнего, что сделали это бегунка по линии



    Вроде как было 4 года назад. После этого дите уже стало серьезными роботами заниматься там вес робота больше 10 кг и робот сам из метала. Но надо отметить Лего дало очень много ребенку.


  1. nIx0iD
    05.01.2016 10:38
    +1

    А почему не EV3 + leJOS?


    1. alfatapok
      05.01.2016 10:51

      Потому-что EV3 у меня нету, а о leJOS впервые слышу. Да и возможностей у того же LabVIEW побольше будет.


      1. nIx0iD
        05.01.2016 10:55

        leJOS — это платформа, позволяющая программировать на JAVA, есть также и под NXT: www.lejos.org/nxt/nxj/api/index.html
        А каких именно возможностей в LabVIEW больше?


        1. alfatapok
          05.01.2016 11:01

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


          1. nIx0iD
            05.01.2016 11:05
            +1

            В leJOS есть функции для удаленного управления, это точно так же позволяет подключаться и управлять «кубиком» и всеми датчиками и моторами с другого «кубика» или с PC. В общем думаю что как минимум ознакомится вам будет интересно.


            1. alfatapok
              05.01.2016 18:04

              Спасибо за информацию!


    1. Dimchansky
      05.01.2016 18:49
      +1

      Можно еще использовать прошивку ev3dev для EV3, получив Debian Linux на платформе и писать прграммы, например, на Go.


      1. alfatapok
        05.01.2016 18:59

        Аналогичные прошивки есть для NXT 2.0?


        1. Dimchansky
          05.01.2016 19:14

          На сколько мне известно, для NXT 2.0 такого нет. Но я только неделю интересуюсь этой темой. :)


          1. alfatapok
            05.01.2016 19:57

            Тогда Вам будет интересно BricxCC


  1. Stas911
    05.01.2016 19:53
    +2

    Каждый раз прохожу мимо Mindstorm в магазине и облизываюсь. Ничего, скоро сын дорастет и вот тогда уж оттянемся! :)


    1. alfatapok
      05.01.2016 21:04

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


      1. Stas911
        05.01.2016 21:11

        Ну да, это уже схемотехника и не так наглядно, как шевелящийся робот


        1. alfatapok
          05.01.2016 21:14

          Есть аналогичные наборы с элементами для сборки мобильного робота, Boe-Bot, например.


  1. fetis26
    06.01.2016 01:20
    +3

    Откладываю деньги, чтобы купить сыну на 10-летие


  1. Sergunka
    06.01.2016 22:35



    Пока малой занимался лего Mindstorm и ездили на все практически олимпиады по РобоГейм в Сан Франциско и в клубы в тот же Гугл. Но этот перец просто вынес мозг мне сегодня со своей гитарой.


    1. semenyakinVS
      06.01.2016 23:38

      Роботы, которые умеют то, чего я не умею, заставляют меня грустить. Автор молодец. Там ещё есть аналогичные видео — про робота, играющего на синтезаторе. Не знаю, возможно не его, но тоже очень внушительно выглядит.

      Кстати, мы с братом пробовали сделать робота, который управлял бы машиной радиоуправления. Пришлось тоже делать враппер вокруг пульта ДУ для машинки (не паять же...).