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

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

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

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

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

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

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

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

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

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

Комментариев нет:

Отправить комментарий