Лего Mindstorms NXT 2
На 10-11 години, след дълги и безгрижни години на игра с конструктори Лего, научих за съществуването на великолепния комплект Mindstorms, който ми позволи да създавам истински роботи без специални познания по електроника, електротехника и дори програмиране. Веднага се заинтересувах от тази поредица, но тогава мечтите ми да притежавам Mindstorms поради различни (най-вече финансови) причини не бяха предопределени да се сбъднат.

Сега съм на 20 и в чест на юбилея моите приятели (благодарение на тях!) решиха да ме потопят в детството ми и все пак да ми дадат възможност да извая свои собствени роботи. Вярно, този път всичко ще бъде по-сериозно, отколкото в детските ми мисли - наистина щепрограмирамеMindstorms под Debian GNU/Linux.
Какво е това?

Говорейки за NXT, в тази малка кутия са скрити два микроконтролера - 32-битов ARM7 и 8-битов AVR, 512 MB RAM, повече от 256 KB флаш памет, монохромен LCD дисплей, високоговорител, USB порт и 7 порта за свързване на сензори. О, да, има и отделение за 6 батерии или акумулатор, който се продава отделно в shop.lego.com. Всъщност NXT е "сърцето" на всеки създаден робот. След като прочетете краткото ръководство, включено в комплекта, можете напълно да създадете робот, който изпълнява някои прости действия без никакво програмиране. Например, буквално за 40 минути, заедно със сглобяването, можете да направите робот, който ще се движи из стаята и усърдно ще избягва препятствията. Това става директно на самото устройство, без да се свързва с компютър, на вградения монохромен дисплей.
Не е лошо, нали? Всъщност този робот ще бъде основният ни тестов модел. Но ще опитаме малкоподобри уменията си. И за това ще напишем малко парче код.
Как така?
Наистина ли. Приложеният софтуер работи само на Windows и Mac OS. И ние изведнъж имаме Debian Squeeze. За щастие, Mindstorms има огромна общност от фенове, които са измислили решение на този проблем - използването на алтернативен софтуер за програмиране на роботи, по-специално Bricxcc (има пълно ръководство за настройка на всичко и всичко).
И сега малко теория - в програмирането на Mindstorms, като правило, в допълнение към визуалната среда ROBOLAB за Windows и Mac OS, се използва езикът RCX, но сред феновете един от най-популярните езици е доста прост NXC (не точно C). Една проста NXC програма изглежда така:
- музика за задачи()
- int lastTone=5000;
- докато (вярно)
- inttone= Random(5000)+500;
- int duration= Random(500);
- PlayTone(тон,продължителност);
- изчакване (продължителност);
- >
- >
- основна задача()
- стартиране на музика;
- докато (вярно)
- /* Определяне на следващото действие */
- unsigned int duration= Random(5000);
- unsigned int motorSpeed= Random(100);
- unsigned int syncMode=Random(3);
- /* Показване на следващото действие */
- ClearScreen();
- NumOut(0,LCD_LINE1,продължителност);
- NumOut(0,LCD_LINE2,скорост на двигателя);
- NumOut(0,LCD_LINE3,syncMode);
- /* Изпълнение на следващо действие */
- превключвател (syncMode)
- случай 0:
- OnFwdReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- прекъсване ;
- случай 1:
- OnRevReg(OUT_AC,motorSpeed,OUT_REGMODE_SYNC);
- прекъсване ;
- случай 2:
- OnFwdSync(OUT_AC,motorSpeed,-100);
- прекъсване ;
- случай 3:
- OnRevSync(OUT_AC,motorSpeed,-100);
- прекъсване ;
- >
- изчакване (продължителност);
- >
- >
За справка, тази програма кара нашия робот да „танцува“ на нещо, наподобяващо музика.
Няма да споря, програмата изобщо не е трудна за разбиране, а доста тромава. И може да бъде значително опростено чрез използване на специален PyNXC конвертор вместо писане на код на NXC. С други думи, ние ще напишем код на Python, а PyNXC ще го преобразува в NXC код и ще го зареди на устройството, спестявайки ни необходимостта да пишем тромав C-подобен код.
Писане на програма!
Е, сега, всъщност, нека напишем програма на Python за нашия робот да пътува сред прозрачни чаши, но използвайки по-компетентен алгоритъм за завъртане:
- #incm
- ОПРЕДЕЛЕТЕ БЛИЗО = 7
- def main():
- Дефиниране на сензори (няма, няма, няма, ОЧИ)
- докато е вярно:
- OnFwd(OUT_BC, 50)
- докато SensorVal(4) > БЛИЗО ДО:
- пас
- Изключено (OUT_BC)
- докато SensorVal(4) * Този изходен код беше подчертан с маркера за изходен код.
Сега нашият робот се е научил да се обръща на място и веднага щом пречещият обект изчезне от полезрението му, продължава да се движи напред.
Както може би сте забелязали, програмирането на Mindstorms е много лесно. Също така си струва да се каже, че в допълнение към NXC и Python, използвайки PyNXC, можете да пишете код на Java, Lua, Ruby, Assembler и също така, логично, да използвате асемблерни вложки на други езици. Това превръща Mindstorms от детска играчка в много мощен инструмент за създаване на сложни и „интелигентни“механизми, като тази китара:
Или този сортировач на цветни топки:
И най-добрата част от всичко това е, че пакетът Mindstorms NXT 2.0 вече включва повечето от необходимите части. Единственото нещо, от което наистина се нуждаете, са допълнителни сензори, които можете да закупите например в официалния магазин на Lego.