Lego Mindstorms NXT 2.0 — краткое знакомство

4
0

Лет эдак в 10-11, после долгих и беззаботных лет игры с контрукторами Lego, я узнал о существовании великолепного набора Mindstorms, который позволял создавать самых настоящих роботов без специализованных знаний электроники, электротехники и даже программирования. Я сразу же заинтересовался данной серией, но тогда моим мечтам обладать Mindstorms по различным (в основном — финансовым) причинам не суждено было сбыться.

Сейчас мне 20 и в честь юбилея друзья (спасибо им!) решили окунуть меня назад в детство и таки дать возможность полепить собственных роботов. Правда, в этот раз всё будет серьёзнее, чем в моих детских мыслях — мы будем действительно программировать Mindstorms под Debian GNU/Linux.

Что же это?

 

Mindstorms NXT 2.0 — третий продукт в линейке Mindstorms — специальной серии конструкторов Lego, предназначенной для создания программируемых роботов. Конструктор поставляется с набором обычных деталей серии Lego Technic, а также специальных сенсоров (расстояния, освещенности, касания), нескольких двигателей-тахометров и специального блока NXT. Подробнее о ко Mindstorms можно узнать из вот этой статьи.

К слову о NXT — в этой небольшой коробочке припрятаны целых два микроконтроллера — 32-битный ARM7 и 8-битный AVR, 512 Мб RAM, более 256 Кб flash-памяти, монохромный ЖК-дисплей, динамик, USB-порт, а также 7 портов для подключения сенсоров. А, да — еще отсек для 6 батареек или аккумулятора, который продается отдельно на сайте shop.lego.com. Собственно, NXT и является «сердцем» любого создаваемого робота.
Ознакомившись с кратким руководством, включенным в комплект, можно вполне себе создать робота, который выполняет какие-нибудь нехитрые действия вообще без всякого программирования. Например, за буквально 40 минут вместе со сборкой, можно сделать робота, который будет ездить по комнате и старательно избегать препятствия. Это делается прямо на самом устройстве, без подключения к компьютеру, на встроенном монохромном дисплее.

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

А как?

Действительно. Идущее в комплекте ПО работает только в Windows и Mac OS. А у нас, внезапно, Debian Squeeze. К счастью, Mindstorms обладает огромным сообществом фанатов, которые придумали решение данной проблемы — использование альтернативного ПО для программирования роботов, в частности Bricxcc (здесь выложен полнейший мануал по настройке всего и вся).

А теперь немного теории — в программировании Mindstorms, как правило, помимо визуального среды ROBOLAB для Windows и Mac OS используется язык RCX, однако среди фанатов одним из наиболее популярных языков является достаточно простой NXC (Not eXactly C). Простая программа на NXC выглядит примерно так:

  1. task music()
  2. {
  3.   int lastTone=5000;
  4.   while(true)
  5.   {
  6.     int tone=Random(5000)+500;
  7.     int duration=Random(500);
  8.     PlayTone(tone,duration);
  9.     Wait(duration);
  10.   }
  11. }
  12.  
  13. task main()
  14. {
  15.   start music;
  16.   while(true)
  17.   {
  18.     /* Determine Next Action */
  19.     unsigned int duration=Random(5000);
  20.     unsigned int motorSpeed=Random(100);
  21.     unsigned int syncMode=Random(3);
  22.  
  23.     /* Display Next Action */
  24.     ClearScreen();
  25.     NumOut(0,LCD_LINE1,duration);
  26.     NumOut(0,LCD_LINE2,motorSpeed);
  27.     NumOut(0,LCD_LINE3,syncMode);
  28.  
  29.     /* Perform Next Action */
  30.     switch(syncMode)
  31.     {
  32.       case 0:
  33.          OnFwdReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
  34.          break;
  35.       case 1:
  36.          OnRevReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
  37.          break;
  38.       case 2:
  39.          OnFwdSync(OUT_AC,motorSpeed,-100);
  40.          break;
  41.       case 3:
  42.          OnRevSync(OUT_AC,motorSpeed,-100);
  43.          break;
  44.     }
  45.     
  46.     Wait(duration);
  47.   }
  48. }

* This source code was highlighted with Source Code Highlighter.

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

Не буду спорить, программа совсем не сложна для понимания, но достаточно громоздка. И её можно заметно упросить, используя вместо написания кода на NXC специальный конвертер PyNXC. Иначе говоря, мы будем писать код на Python'е, а PyNXC будет преобразовывать его в NXC-код и загружать на устройство, избавив нас от необходимости писать громоздкий код на подобии Си.

Пишем программу!

Ну, а теперь, собственно, напишем на Python'е программу для путешествия нашего робота среди прозрачных чашек, но используя более грамотный алгоритм разворота:

  1. # in cm
  2. DEFINE NEAR = 7
  3.  
  4. def main():
  5.   DefineSensors(None, None, None, EYES)
  6.   while True:
  7.     OnFwd(OUT_BC, 50)
  8.     while SensorVal(4) > NEAR:
  9.       pass
  10.     
  11.     Off(OUT_BC)
  12.     
  13.     while SensorVal(4) < NEAR:
  14.       OnFwd(OUT_B, 50)
  15.       Wait(100)

* This source code was highlighted with Source Code Highlighter.

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

Как вы уже, наверное, заметили, программировать Mindstorms очень просто. Стоит также сказать, что помимо NXC и Python с использованием PyNXC, можно писать код на Java, Lua, Ruby, Ассемблере, а также, что логично, использовать ассемблерные вставки в других языках.
Благодаря всему этому Mindstorms из детской игрушки превращается в весьма мощную штуку, позволяющую создавать сложные и «умные» механизмы, как например вот эта гитара:

Или этот сортировщик цветных шариков:

А самое приятное во всём этом — в комплект поставки Mindstorms NXT 2.0 уже включено большинство необходимых деталей. Единственное, что действительно может понадобится — дополнительные сенсоры, которые можно купить, например, в официальном магазине Lego.

Опубликовано с разрешения автора Alwake
Оригинал статьи

 

© 2009-2017"Proдвинутый папа" GeekDad.ru, 16+ | Дизайн Antsin.com

По вопросам работы сайта обращаться на

Rambler's Top100