четверг, 18 октября 2012 г.

Создаем свой ритм

1. Барабанщик с одной палочкой

Вернемся к одномоторному барабанщику. Преобразуем удар в процедуру, которая вызывается через определенные промежутки времени. Очевидно, что для повышения точности процесса надо поднимать палочку не до, а сразу после каждого у дара.

Так как удар обладает некоторой длительностью и ее тоже надо учитывать при определении пауз. Удобнее всего это сделать с помощью системного таймера. Команда "Жди таймер" будет предшествовать каждому удару, а очередное ожидаемое значение задаваться непосредсвенно перед ней.
В приведенном алгоритме много умолчаний: на энкодере используется мотор А, значение ожидания обнуляется и добавляется в красный контейнер, да и таймер тоже используется по умолчанию красный.

2. Барабанщик с двумя палочками

Для управления двумя палочками следует сделать их независимыми друг от друга по времени, т.е. поместить управление ими не просто в разные процедуры, но и в параллельные задачи. Тогда вторая палочка сможет начинать удар, не дожидаясь окончания удара первой.
При задании длительностей пауз надо учитывать длительность ударов. Минимальная пауза для отдельного мотора - примерно 0,2 с. Значит два мотора смогут работать с минимальной паузой 0,1 с, т.е. на носить до 10 ударов в секунду.
Имея массив длительностей, без особого труда можно построить алгоритм его воспроизведения. Это реализуется в Robolab, только массив будет ограниченной длины - всего допустимо к использованию около 40 нумерованных контейнеров. А в реальности удастся задействовать чуть более 20. Это значит, что барабанщик  может запомнить ритмический рисунок из 20-25 ударов. Самое интересное заключается в том, чтобы эти удары запоминать и распознавать с помощью датчика звука.

3. Барабанщик на П-регуляторе

Использование П-реулятора позволит стабилизировать работу барабанщика на очень больших скоростях. Для регулятора будет два положения установки, в которых должна оказаться барабанная палочка: о и 10 градусов. Оба положения немного сдвинем для компенсации инерции. Построим алгоритм одного мотора.

Есть такое правило: к одному датчику не обращаться из разных задач одновременно. Поэтому показания энкодера записываются в переменную encoder в цикле П-регулятора. Ее значение используется для задания гарантированного диапазона действий регулятора при ударе с помощью двух пустых циклов с условием.
В чем будет преимущество такого управления? Представьте себе, что робот не успел поднять палочку до конца, а уже поступил сигнал о начале следующего удара. Естественно  барабанщик не станет дожидаться верхней точки замаха, а сразу приступит к выполнению команды. Пусть удар получится немного тише, но он произойдет вовремя. Согласитесь  тихий своевременный удар лучше, чем громкий несвоевременный. Задача робототехника в том, чтобы определить пределы возможностей робота и не допускать запредельных режимов.
Чтобы действия роботов приблизились к игре настоящего барабанщика, следует сбалансировать палочку. Тогда скорость ударов значительно повысится. Для этого достаточно прикрепить одну балку в обратную сторону.
Реализовать П-регулятор на двух палочках можете попробовать самостоятельно.

четверг, 11 октября 2012 г.

Роботы-барабанщики

1. Управление мотором на релейном регуляторе

"Робот поднимает меч и бросается на противника!" При этом робот должен удерживать свой меч при столкновении.
Для примера прикрепите к мотору длинную балку с помощью двух штифтов. Это будет меч. В момент запуска его надо поднять на угол в 45 градусов и удерживать в этом положении.

Регулируемой величиной будет угол поворота мотора, определяемый через показания энкодера, регулирующим органом будет сам мотор.
Алгоритм таков: обнулить показания датчика оборотов, задать желаемое положение в 45 градусов и в цикле поддерживать это положение, учитывая возможные отклонения. Если показания энкодера превышают 45, мотор вращается назад. В противном случае вперед. Задержка в 1 мс предназначена для разгрузки контроллера.
Что же мы увидим? Робот ведет себя как новобранец с мечом. Мотор удерживает балку, но как-то неуверенно: происходят постоянные колебания. Уменьшить их можно, разве что понизив мощность мотора. Попробуйте это сделать.
Особенность релейного регулятора в том, что он в принципе не может стабилизировать в нужном положении и вызывает колебания с той или иной амплитудой.

2. Калибровка и удар

Измените немного конструкцию робота, выбрав самую длинную балку. Барабанить робот будет по столу. Однако прежде чем нанести удар, надо определиться где именно находится поверхность "барабана". Для этого необходимо выполнить калибровку. Простейший вариант заключается в следующем:

 Робот опускает "палочку" на низкой скорости в течение достаточно большого промежутка времени, около 2 с. Поскольку скорость и мощность мотора взаимосвязаны, то, упершись в поверхность, палочка не причинит никакого вреда и просто остановится. Полученное положение мотора запоминается как нулевое. Калибровка произведена.
Удар будет представлять из себя поднятие палочки в абсолютное положение 15 градусов (замах) и опускание в нулевое положение (удар). Однако, учитываю люфт моторов Lego, а также инерцию их движения, следует прекращать опускание не в нулевом положении, а значительно раньше, например при 10 градусах. Это даст возможность сократить длительность соприкосновения с поверхностью и воспользоваться энергией отскока.

3. Управление с помощью датчика

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

Чтобы построить управление двумя палочками, потребуется поместить калибровку второго мотора в параллельный процесс. Вытянем алгоритм в цепочку и дублируем его. Единственное незначительное изменение - это изменение типа и мощности управления моторами при калибровке. Поскольку уже два двигателя будут прижимать палочки к полу, то во избежании поднятия всего робота стоит понизить их мощность до 2-10%.
Дублируя часть алгоритма  постарайтесь внимательно изменить все команды мотору А на команды мотору В.
Второкурсники Александр Григорьев и Николай Мирзоев:

понедельник, 21 мая 2012 г.

Соревнования в ФМЛ № 239

Для участия в соревнованиях зарегистрированы следующие команды:
  1. ФОРВАРД (Парадовский Юра), следование по линии, регистрационный номер 53.
  2. СПРИНТ (Спиричев Паша, Кичапин Женя), следование по линии, регистрационный номер 54.
  3. ДРАКОН (Ершов Влад), следование по линии, регистрационный номер 55.
  4. КРОВОЖАДНЫЕ ТАПОЧКИ (Григорьев Саша, Мирзоев Коля), кегельринг (для начинающих), регистрационный номер 56.
Появились общие протоколы (спасибо организаторам, что выполнили нашу просьбу) тут
У нас очень неплохи результаты:
ФОРВАРД (Парадовский Юра) 4 место (почти призер!)
СПРИНТ (Спиричев Паша, Кичапин Женя) 5 место (отлично!)
ДРАКОН (Ершов Влад) 13 место (37 участников)
КРОВОЖАДНЫЕ ТАПОЧКИ (Григорьев Саша, Мирзоев Коля) 13 место (31 участник)

Окончательные итоги года можно посмотреть на странице "Журнал".
I место за I курс (с учетом участия в городских соревнованиях СПб) занял Кичапин Евгений. Женя, поздравляем!
Абсолютным фаворитом II курса является Парадовский Юра. Молодец, Юра!

Фотоотчет (спасибо за фотографии всем фотографам).
Очередь на регистрацию:
Эмблема соревнований (все участники получили значок с этой эмблемой):
Наша команда (слева направо: Парадовский Юра, Мирзоев Коля, Григорьев Саша, Уварова И.М., Кичапин Женя, Спиричев Паша, Доновская Т.В., Ершов Влад):
До начала соревнований есть время и участники настраивают своих роботов. Соревнования проходят сразу на нескольких полях:
На третьем этаже лицея проходила выставка творческих работ:
 
 
Финиш ФОРВАРДА:

Команда СПРИНТ болеет за своего робота:
Вторая попытка ДРАКОНА (после аварии):


КРОВОЖАДНЫЕ ТАПОЧКИ закончили выступление:
Еще фото можно посмотреть в галерее на сайте ЦИТ  тут

среда, 25 апреля 2012 г.

Урок 27. Соревнования "Движение по линии"

1. Итоги соревнований

№ п/пНазвание командыУчастникиРезультаты
I заезда
Результаты
II заезда
Место Баллы
1TRIPOLEIG
Мирзоев Николай
--50
2СВЕРХЗВУКОВОЙ
Галузин Андрей
-17,03I300
3ФОРВАРД
Парадовский Юра
Шутков Сергей
19,1817,61II250
4
ПРИЗРАЧНЫЙ ГОНЩИК
Ершов Влад
Байдюк Даня
19,5520,02IV150
5ГАЛАКТИКА
Григорьев Саша
19,22-III200
6СПРИНТ
Спиричев Павел
Кичапин Евгений
21,1820,09V100
Участники подходят, роботы готовы.
Последние настройки:
Соревнования начались:
Сложный поворот:

2. Соревнования по роботехнике в СПБ

Весенние состязания роботов ФМЛ №239 состоятся 26–27 мая во II корпусе лицея.
В программе традиционно весенние виды состязаний!


Оригинальные виды
1. Гонки шагающих роботов (лабиринт буквой «S»).
2. Ралли по коридору (автономные роботы с рулевым управлением в длинном коридоре).
3. «Парадная» лестница (робот перемещается по школьной лестнице).


Классические виды
4. Следование по линии.
5. Кегельринг (для начинающих).
6. Лабиринт.
7. Кегельринг-Макро.
8. Дорога.
9. Минисумо.
10. Инверсная линия.

Состязания по правилам WRO
11. Менделеев.
12. Колумб.
13. Ван Гог.


Футбол
14. Командный футбол управляемых роботов.
15. Футбол автономных роботов.


Выставка творческих проектов


Желающие принять участие планируют вид, в котором будут выступать и состав команды, с которой будут готовиться к соревнованиям. 

пятница, 6 апреля 2012 г.

Урок 24-26. Соревнование "Следование по линии"

Соревнования состоятся 25 апреля (среда) во время проведения муниципального конкурса по информатике "Компьютерный марафон"

Регламент соревнований
1. Условия состязания
  1. За наиболее короткое время робот, следуя черной линии, должен добраться от места старта до места финиша.
  2. На прохождение дистанции дается максимум 3 минуты.
  3. Если робот потеряет линию более чем на 10 секунд и/или срежет траекторию движения, он будет дисквалифицирован. (Срезанием считается пропуск линии длиной более чем три длины корпуса робота.)
  4. Во время проведения состязания участники команд не должны касаться роботов.
2. Трасса
  1. Цвет полигона - белый.
  2. Цвет линии - черный.
  3. Ширина линии - 50 мм.
  4. Минимальный радиус кривизны линии - 300 мм.
3. Робот
  1. Максимальная ширина робота 40 см, длина - 40 см.
  2. Вес робота не должен превышать 10 кг.
  3. Робот должен быть автономным.
4. Правила отбора победителя
  1. На прохождение дистанции каждой команде дается две попытки.
  2. В зачет принимается лучшее время из попыток.
  3. Победителем будет объявлена команда, потратившая на преодоление дистанции наименьшее время.

четверг, 22 марта 2012 г.

Урок 23. Соревнования по механическому мини-сумо

1. Участники соревнований
№ п/п Название команды Участники
1 ФОРВАРД Парадовский Юра
2 БОМБОЧКА Мирзоев Коля
3 ТЕХНОВОИН Спиричев Паша и Кичапин Женя
4 КВА_КВА Галузин Андрей и Спирин Виталий
5 ГАЛАКТИКА Григорьев Саша
6 АТОМ Ершов Влад и Байдюк Данил
Техника готова к бою:
2. Система проведения соревнований
Сегодня мы будем использовать круговую систему, где каждая команда по очереди встречается со всеми своими противниками. В каждом поединке можно получить от 0 до 2 очков. В случае победы команде присуждается 2 очка, ничья - 1 очко, проигрыш - 0 очков.
Победитель определяется по сумме всех баллов. В случае равенства очков место определяется по количеству побед.
На старт!
Кто сильнее?
3. Таблица встреч
Первый круг Второй круг Третий круг Четвертый круг Пятый круг
1-2
1-3
1-4
1-5
1-6
6-3
2-4
3-5
4-6
5-2
5-4
6-5
2-6
3-2
4-3
Участники соревнований со своими роботами:
4. Итоговая таблица соревнований

 1  2  3  4  5  6 БаллыМесто
 1 х2222210I
20х22015III
300х0101VI
4002х204IV
50210х14V
601221х6II
Ершов Влад, построил своего первого робота и занял II место:
Григорьев Саша сумел построить "раскладывающегося" робота.


Робот-победитель "Форвард" (автор Парадовский Юра)

четверг, 1 марта 2012 г.

Урок 21-22. Механическое сумо

Первые соревнования мы будем проводить по правилам механического мини-сумо (для начинающих), сформулированным ФМЛ № 239 на зимних состязаниях роботов 11 декабря  2011 года.  Правила 

Сформулируем здесь основные их них.
1. Требования к роботу

  • габариты на момент старт 15х15 см, высота не регламентируется;
  • сразу после старта робот может единовременно увеличить размеры до 20х20 см;
  • вес - до 750 г.;
  • колеса робота не должны быть чрезмерно липкими (стандартный тест: робот, поставленный на лист  бумаги А4 не должен при поднятии поднять этот лист за собой).

2. Требования к рингу
В связи с отсутствием нужного ринга, будем использовать обычное поле для кегельринга.

3. Условия состязаний

  1. Цель поединка - вытолкнуть робота-соперника за пределы ринга.
  2. Перед поединком роботы устанавливаются на разных половинах ринга в центре поля строго друг напротив друга.
  3. По команде судьи участники включают питание роботов. Роботы должны двигаться навстречу друг другу до соприкосновения и не разъединяться до конца поединка.
  4. Робот проигрывает, если коснулся поверхности за пределами круга или одновременно потерял соприкосновение с соперником и возможность перемещаться (например, перевернулся).
  5. По прошествии 1 минуты побеждает робот, оказавшийся ближе к центру ринга.
  6. Если участник коснулся робота после старта до соответствующей команды судьи, он автоматически проигрывает.

Видеоролик интеллектуального сумо на базе процессоров NXT. На YouTube вы найдете еще множество других роликов.

четверг, 23 февраля 2012 г.

Урок 20. Кегельринг (продолжение)


1. Зрение робота
До сих пор наш робот поворачивался вслепую. Надо бы оснастить его зрением. Для этого подойдет датчик расстояния. Датчик надо поставить так, чтобы правый (со стороны разъема) датчик был первым по ходу движения.  Тогда в процессе вращения больше вероятность, что отраженный сигнал будет уловлен принимающим глазком, идущим следом.

Итак, вращение осуществляется до тех пор, пока на датчик расстояния не поступит сигнал, например, "ближе 45". Т.е. обнаружен объект на расстоянии ближе 45 см. Надо иметь ввиду, что на стаканчики, которые робот вытолкнул за линию, он не должен обращать внимания. Поэтому указанное расстояние не следует делать больше радиуса круга.
В зависимости от конструкции робота, в приведенном алгоритме может быть один недостаток. Вернувшись в центр круга, робот начинает вращение до появления кегли. Однако, в силу неточности ультразвукового датчика, он может среагировать сразу на уже вытолкнутую кеглю. Поэтому имеет смысл, во-первых, выталкивать их подальше за пределы круга, во-вторых, начинать поворот вслепую, а в в-третьих, все действия поначалу выполнять в замедленном темпе.
Лучший результат составил 21 сек.

четверг, 16 февраля 2012 г.

Урок 19. Танец в круге (кегельринг)

1.Танец в круге
Робот живет внутри круга, за пределы которого нельзя выходить. Для выполнения этой задачи надо собрать стандартную трехколесную тележку: два передних колеса ведущие, одно заднее подвижное на шарнире. Спереди по центру расположен датчик освещенности, направленный строго вниз и находящийся на расстоянии 5-10 мм от пола.

Робот ставится в центре и при старте должен двигаться внутри круга, не выходя за его пределы.

Алгоритм действий "Танец в круге" таков:
  1. ехать вперед, пока показания датчика не понизятся на 5 пунктов (лучше 10);
  2. отъехать немного назад (полсекунды);
  3. развернуться примерно на 120-150 градусов (тоже по времени);
  4. повторять пункты 1-3 бесконечно.

Параметры, указанные в модификаторах, подберите самостоятельно: степень понижения освещенности на черной линии, время отъезда назад и время поворота.

2. Вытолкнуть все банки (кегельринг)
Несколько пластиковых стаканчиков или пустых жестяных банок расставлены вниури круга, за черной линией на расстоянии 12-15 см от нее - это мусор, от которого необходимо очистить круг за кратчайшее время. Первые попытки запуска робота покажут несколько недостатков:
  1. стаканчики попадают под колеса, падают и плохо выталкиваются;
  2. даже вытолкнутые стаканчики остаются частично внитри круга, поскольку, увидев край, робот сразу устремляется назад;
  3. робот ведет себя как слон в посудной лавке;
  4. робот делает много движений впустую.
Избавимся от первого недостатка. Для этого построим бампер шириной 20-25 см рядом с датчиком освещенности.
Второй и третий недостатки устраняются программно. Пусть увидев край, тележка еще немного двигается вперед, выталкивая стаканчик, и только после этого объезжает внутрь круга.
Самый надежный способ заехать точно на пределы черной линии - это дождаться значения белого на датчике освещенности. Поэтому время можно заменить на "ожидание белого". Для экономии места стоит сгруппировать команды управления моторами, а также использовать "реверс" при смене направления на работающих моторах.
Теперь стоит поработать над точностью движения, по возможности не теряя скорости. В зависимости от конструкции робота, при резкой смене направления он может потерять равновесие или просто "встать на дыбы" на передние колеса. Поэтому последние несколько сантиметров можно проехать на торможении по инерции, то есть полностью освободив моторы.
И второе. Точность поворота будет зависеть от того, какие команды подаются на моторы и по какому принцип рассчитываются длительности поворота. К сожалению, таймер - не надежный помощник. По инерции на малых промежутках времени робот может поворачиваться не различные углы.
Мы можем пожертвовать реверсом в последней команде управления мотором В, для того чтобы достичь неторопливого движения обоими моторами. Длительность поворота при этом немного возрастет.
Для точности управления моторами необходимо использовать другой тип команд: с контролируемым вращением. Эти команды находятся в разделе "Advanced Output Control"  и позволяют задавать мощность моторов от -100 до 100. В новом примере для компактности разместим все числовые параметры сверху, а модификаторы портов снизу.

четверг, 9 февраля 2012 г.

Урок 18. Движение робота вдоль стены

1. Конструкция робота для движения вдоль стенки
На базовую тележку надо прикрепить датчик расстояния и подключить его на 1 порт.
Датчик расстояния слегка выносится вперед:
Ориентацию датчика можно варьировать:

2. Движение вдоль стенки на П-регуляторе
Решим такую задачу. Робот должен двигаться вдоль стенки на заданном расстоянии L. Предположим, что левое колесо робота управляется мотором B, правое - мотором С, а датчик расстояния, подключенный к порту 1, закреплен несколько впереди корпуса тележки (это важно!) и направлен на стену справа по ходу движения.

Расстояние до стенки в настоящий момент времени, которое показывает датчик, обозначим S1. Измеряется она в сантиметрах.
Моторы двигаются со средней скоростью 50% от максимума,  но при отклонении от заданного курса на них осуществляется управляющее воздействие u (на мотор В 50+u, на мотор С 50-u):
u=k*(S1-L), где k - некий усиливающий коэффициент, определяющий воздействие регулятора на систему.
Таким образом, при S1=L робот не меняет курса и едет прямо. В случае отклонения его курс корректируется. Для робота NXT средних размеров коэффициент k может колебаться от  1 до 10 в зависимости от многих факторов. Подберите его самостоятельно.
В данном случае П-регулятор будет эффектно работать только при малых углах отклонения. Кроме то, движение практически всегда будет происходить по волнообразной траектории. Сделать регулирование более точным позволит введение новых принципов, учитывающих отклонение робота от курса. 

3. Пропорционально-дифференциальный регулятор
В некоторых случаях П-регулятор может вывести систему из устойчивого состояния.

Например, если робот направлен от стенки,  но находится по отношения к ней ближе заданного расстояния, на моторы поступит команда еще сильнее повернуть от стенки, в результате чего с ней может быть утерян контакт (датчик расстояния получает отраженный сигнал практически только от перпендикулярной поверхности).
Для защиты от подобных ситуаций добавим в регулятор дифференциальную составляющую, которая будет следить за направлением движения робота. 
u=k1*(S -L)+k2*(s1-Sold), где Sold - расстояние на предыдущем шаге.

Необходимо подобрать подходящие значения коэффициентов k1 и k2. Обычно подбор начинается с пропорционального коэффициента (k1) при нулевом дифференциальном (k2=0). Когда достигнута некоторая стабильность на небольших отклонениях, добавляется дифференциальная составляющая.

4. Конструкция робота с датчиком расстояния, расположенным под углом
Описанный выше робот может объезжать стены только при малых отклонениях от прямой линии. Рассмотрим вариант, при котором на пути движения будут возникать серьезные повороты, вплоть до прямых углом. Потребуется внести модификации и в конструкцию, и в программу.
Во-первых,  робот  должен  будет  смотреть  не  только  направо,  но  и  вперед.  Ставить  второй дальномер довольно затратно. Однако можно воспользоваться эффектом того, что ультразвуковой датчик  имеет  расширяющуюся  область  видимости . 

Это  напоминает  угловое  зрение человека:  кое-что  он  может  увидеть  краем  глаза.  Стоит  воспользоваться  таким  свойством  и разместить датчик расстояния не перпендикулярно курсу движения, а под острым углом . Так можно убить сразу двух зайцев. Во-первых, робот будет видеть препятствия спереди, во-вторых, более стабильно будет придерживаться курса вдоль стены, постоянно находясь на грани видимости. Таким образом, без добавления новых устройств будет получено более  эффективное использование возможностей дальномера. 

Важное  замечание. При старте робота его надо будет направлять датчиком строго на стену, чтобы процесс считывания начального значения прошел без помех.
Крепление для датчика размещается на левой стороне:

Как и впервой конструкции, датчик располагается вертикально:

Увеличенное за счет корпуса робота расстояние до стены способствует расширению области обзора:

Очевидно, что изменение конструкции влечет изменение коэффициентов регулятора k1 и k2. Обычно подбор начинается с пропорционального коэффициента при нулевом дифференциальном. Когда  достигнута  некоторая  стабильность  на  небольших  отклонениях,  добавляется дифференциальная составляющая.