Lego Mindstorms NXT 2
Років десь у 10-11, після довгих і безтурботних років гри з контрукторами Lego, я дізнався про існування чудового набору Mindstorms, який дозволяв створювати справжніх роботів без специфічних знань електроніки, електротехніки і навіть програмування. Я відразу ж зацікавився цією серією, але тоді мої мрії мати Mindstorms з різних (в основному — фінансових) причин не судилося збутися.

Зараз мені 20 і на честь ювілею друзі (дякую їм!) вирішили занурити мене назад у дитинство і таки дати можливість поліпити своїх роботів. Щоправда, цього разу все буде серйознішим, ніж у моїх дитячих думках — ми дійсно будемопрограмуватиMindstorms під Debian GNU/Linux.
Що це?

До речі про 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 виглядає приблизно так:
- task music()
- int lastTone=5000;
- while (true)
- int tone = Random (5000) + 500;
- int duration = Random (500);
- PlayTone(tone,duration);
- Wait(duration);
- >
- >
- task main()
- start music;
- while (true)
- /* Determine Next Action */
- unsigned int duration = Random (5000);
- unsigned int motorSpeed = Random (100);
- unsigned int syncMode = Random (3);
- /* Display Next Action */
- ClearScreen();
- NumOut(0,LCD_LINE1,duration);
- NumOut(0,LCD_LINE2,motorSpeed);
- NumOut(0,LCD_LINE3,syncMode);
- /* Perform Next Action */
- switch (syncMode)
- case 0:
- OnFwdReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- break;
- case 1:
- OnRevReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- break;
- case 2:
- OnFwdSync(OUT_AC,motorSpeed,-100);
- break;
- case 3:
- OnRevSync(OUT_AC,motorSpeed,-100);
- break;
- >
- Wait(duration);
- >
- >
Для довідки - дана програма змушує "танцювати" нашого робота під щось, що нагадує музику.
Не сперечатися, програма зовсім не складна для розуміння, але досить громіздка. І її можна помітно попросити, використовуючи замість написання коду на NXC спеціальний конвертер PyNXC. Інакше кажучи, ми будемо писати код на Python'і, а PyNXC буде перетворювати його в NXC-код і завантажувати на пристрій, позбавивши нас необхідності писати громіздкий код на кшталт Сі.
Пишемо програму!
Ну, а тепер, власне, напишемо на Python'і програму для подорожі нашого робота серед прозорих чашок, але використовуючи грамотніший алгоритм розвороту:
- # in cm
- DEFINE NEAR = 7
- def main():
- DefineSensors(None, None, None, EYES)
- while True:
- OnFwd(OUT_BC, 50)
- while SensorVal(4) > NEAR:
- pass
- Off(OUT_BC)
- while SensorVal(4) * Цей source code був highlighted with Source Code Highlighter .
Тепер наш робот навчився розвертатися на місці і, як тільки об'єкт, що заважає, пропаде з поля його зору, продовжувати рух уперед.
Як ви вже напевно помітили, програмувати Mindstorms дуже просто. Варто також сказати, що крім NXC і Python з використанням PyNXC, можна писати код Java, Lua, Ruby, Асемблері, а також, що логічно, використовувати асемблерні вставки в інших мовах. Завдяки цьому Mindstorms з дитячої іграшки перетворюється на дуже потужну штуку, що дозволяє створювати складні і «розумні»механізми, як, наприклад, ось ця гітара:
Або цей сортувальник кольорових кульок:
А найприємніше в усьому цьому — до комплекту поставки Mindstorms NXT 2.0 вже включено більшість необхідних деталей. Єдине, що справді може знадобитися – додаткові сенсори, які можна купити, наприклад, в офіційному магазині Lego.