четверг, 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 курса является Парадовский Юра. Молодец, Юра!

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

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


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