ИГРУШЕЧНЫЕ РОБОТЫ


Cтоимость электрического мотора с редуктором, покупаемого отдельно, обходится в цену робототехнического комплекса с процессором, датчиками, моторами, платой управления и устройством связи. Отсюда понятным становится интерес к игрушкам вида Robosapiens и Lego. Фирма Lego распространяет наборы программируемых роботов, содержащих неплохую ходовую часть, сенсорную систему и контроллер.


У робота есть режим "радиоуправляемой" машины. На сопровождающем игрушку CD достаточно много сил ушло на интерфейс загрузки и настройки параметров десяти программ-миссий (функции кнопок разрешено менять). Программирование управления движителем схематично, варьируются функции пульта и набор "безуловнорефлекторных" реакций, вытягивающих робот из тупиков и помогающих искать маячок в условиях неопределенности. Плюс введены искусственные помехи связи с пультом (именуемые статическими разрядами). Есть лимитированные по количеству употреблений функции. То есть - частично имитирована сложная среда (что неплохо).


Для захвата управления роботом от ручки в этом режиме и в режиме миссии (включение миссии - серая кнопка на корпусе робота рядом с кнопкой питания) служит предваряющая управление кнопка рукоятки с ключом, что подтверждается писком. Первая кнопка наделяет маячок функцией быть целью движения, третья кнопка - заставляет робот, наоборот, сторониться маячка. Красная кнопка управляет лазером. В некоторых миссиях робот обучается распознавать светимость целевого объекта (лампы), видимой через световод на крыше, конец обучения отмечается желтым проблеском. Толчок бампера машины служит для старта миссии с обученным роботом. В миссии Gamma Overload (радиационная перегрузка) конечная цель - "дезактивация" робота под лучами лампы. По пути надо расстреливать источники радиации лазерной пушкой по щелчкам счетчика Гейгера. Миссия выполнена, если вы достаточно нажимали гашетку (красную кнопку). В миссии Energy Crisis (энергетический кризис) лампа трактуется как энергитическая установка, столкновение с препятствием и имитируемые помехи дезорганизуют и ослабляет "силы" робота. Вершит миссию танец. Компьютер ведет статистику игр.

Связь с компьютером представлена программированием поведения и загрузкой полученной миссии через com-порт. Конструктор новых операций (миссий) несколько заболочен. Темплатой (заготовкой) выбирается концепция миссии, скажем, навигация. Есть концепции для одного бота и концепции для нескольких. Игровой подход обязывает ограничивать время миссии, подсчитывать очки – копить статистику. Подсчеты, к счастью, автоматизированы. Фактически визуально программируется, как в Дельфи, ручка управления – выбираются функции ее кнопок. Далее выдергиваются из набора алгоритмы поведения робота в зависимости от информации локатора об обстановке в его зонах те или иные безусловные рефлексы.

Cуществующий набор алгоритмов существенно перекрывает достижимые программированием эффекты. Ведь, собственно, и сенсорная информация, воспринимаемая процессором, весьма дискретизирована и бедна. Локатор цепляет только инфракрасный маячок, что и облегчает селекцию цели. Датчик обычного света ненаправленный, фиксирует предел освещенности. А кожа представлена одним датчиком касания спереди. Тут не до изысков. Машина почти нечего не чувствует, поэтому нечего особенно и менять в ее поведении – при подавляющей маневренности у робота плохо с глазами. Тем не менее – это некая почва для изучения если не самого программирования, то принципов программирования реакций на события внешнего мира без залезания в сложности. На CD игрушки нет эмулятора и нет компилятора, при неопределенности еще – как продукт компиляции интегрировать в систему готовых алгоритмов.

Программирование робота


Bricx Command Center (BricxCC) v.3.3.7.4 и более поздний v.3.3.7.7 проще LASM или MindScript. В среде brickOS возможна разработка программ на языках C, C++, и Pascal. Популярен Not Quite C (NQC) Дейва Баума, компилируемый в "firmware" роботов LEGO (встроенный интерпретатор, байтовые команды). В NQC (описание) есть компилируемые во вставки (inline) - функции.

Существует 80-элементный стек, динамически разделяемый между всеми задачами и подпрограммами, позволяющий (теоретически) одной подпрограмме вызывать другую. Встроенная программная библиотека содержит 128 подпрограмм, извлекающих 64 звуков, 16 звуковых и 8 световых последовательностей. Существует 4 доступных из задач системных таймера (разрешение 100 ms), счет циклически идет и возобновляется от 0 до 32767 (0x7FFF). Есть 1 контактный датчик, 1 датчик освещенности, 2 ИК-приемника, датчик контроля напряжения батареи, 1 коммуникационный ("Visual Light Link" - VLL) светодиод "лазера", пьезодинамик, 2 мотора гусениц. 7-элементный светодиодный дисплей (две полушкалы из 3 красных и 3 зеленых диодов, плюс один желтый).

Система управления двигателями построена на микросхеме LB1836. В качестве ИК-приемников использованы микросхемы интегральных фотоприемников TSOP1176 производства фирмы VISHAY.

Учтем, что Spybotics может решать одновременно 8 задач (task), стартовая имеет имя main. Запуск задачи производится командой start, остановка - stop. Spybotics может выполнять также 32 подпрограммы, без аргументов и возвращаемых значений, их запрещено вкладывать друг в друга. 32 переменные типа int - это 16-битовые знаковые целые. Причем константы можно записывать в шестнадцатеричном формате. В каждой задаче можно вводить 4 локальных переменных, доступных для вызываемых подпрограмм. Есть массивы заданной размерности, инициализируемые поэлементно и только поэлементно передаваемые во вставки-функции. К элементу и массиву неприменимы операции инкремента (++) и декремента (--), комбинированные операторы (+=) и так далее. Компилятор содержит кнопку загрузки программы в память робота Spybotics.

Примеры (сайт Валерия Мухина) для Bricx Command Center v.3.3.7.7.

Программа #1. prog1a2.nqc   Цель действий робота - найти свой пульт. В зависимости от того, где находится пульт относительно робота, робот выполняет маневры, чтобы добраться до пульта. При встрече с препятствием робот отъезжает назад и пытается слегка изменить курс. Если робот теряет пульт, он пытается двигаться прямо (до встречи с препятствием).

Программа #2. prog2a2.nqc Действия робота гораздо сложнее, чем в первой программе. Сначала вращаясь на месте, робот находит направление на пульт. Затем, совершив полный разворот, робот определяет количество циклов необходимых для этого разворота. Разделив количество циклов на два, робот определяет направление от пульта (кормой к пульту). Робот начинает движение вперед. Натолкнувшись на препятствие или выйдя за пределы действия пульта. Робот возвращается назад. Добравшись до пульта, робот повторяет все с начала. Эта программа дает неплохой результат по управлению роботом – он может совершать десятки циклов от пульта к границе зоны видимости (или к окружающим предметам), однако несовершенная форма зон видимости и отсутствии круговой зоны передачи у пульта может привести к потере ориентации робота и его застреванию.

АНДРОИДЫ


Robosapiens – про эту игрушку достаточно много информации в сети, но, в основном – рекламного характера. Известен негатив, связанный с перегревом проводов и осыпанием изоляции в виде конфети во внутренности робота. Применительно к управлению из сети Интернет – это заслуживающая внимание модель, требующая, однако, доработки пульта. Во первых, робот медленно движется. Это видимое недостатком обстоятельство вполне приемлемо, когда управление приходит через сеть с запаздыванием. Во вторых, он обладает богатым набором "безусловных рефлексов". Имитирует испуг, например. Есть запас сложных движений, для запуска которых достаточно подать команду. Он может попросить зеленый мяч. Голосом и жестом. Может выкатить мяч для боулинга на кегли. Его можно обучить некоторому сложному движению, просто придавая ему разнообразные позы. Робот запомнит урок позиционирования и способен его воспроизвести, экстраполируя фазы движения. Не хватает одного.

Rambler's Top100