четверг, 14 мая 2015 г.

Открытые соревнования по робототехнике в ПФМЛ № 239

30-31 мая в Президентском физико-математическом лицее пройдут открытые соревнования по робототехнике. Информация о месте и времени проведения здесь

От нашего учебного заведения на соревнования зарегистрированы следующие команды:

  • СКЕЛЕТ ID 0044 Попов Георгий, интеллектуальное сумо 15х15
  • ФОКСИ ID 0045 Оспельников Алексей,  интеллектуальное сумо 15х15
  • КрейзиБлендер ID 0046 Дьяконов Александр, интеллектуальное сумо 15х15
  • УРА ID 0047 Ерохов Антон, интеллектуальное сумо 15х15
  • РЫБОКОП ID 0048 Цветков Павел, кегельринг для начинающих

вторник, 7 апреля 2015 г.

Кегельринг

Кегельринг
Правила проведения соревнований кегельринг (для начинающих) здесь
Несколько пластиковых стаканчиков или пустых жестяных банок расставлены внутри круга, за черной линией на расстоянии 12-15 см от нее - это мусор, от которого необходимо очистить круг за кратчайшее время.
1. Идея первая: двигаться внутри круга вслепую, вычерчивая ломаную линию (танец в круге)


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

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

Для точного управления моторами необходимо использовать другой тип команд: с контролируемым вращением. Эти команды находятся в разделе "Advanced Output Control"  и позволяют задавать мощность моторов от -100 до 100. В новом примере для компактности разместим все числовые параметры сверху, а модификаторы портов снизу.
Наше лучшее время в 2015 году 13 сек
2. Идея вторая. Двигаться по радиусам круга, точно попадая на кегли с использованием ультразвука.

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

Наше лучшее время пока примерно 30 сек.
3. Идея третья "Спираль"
Движение по спирали - самый эффективный алгоритм, позволяющий выбить кегли за кратчайшее время. Выбивая кегли таким образом, робот не использует датчик расстояния и лишь повторяет выверенную траекторию спирали.
Спираль - это дуга с меняющимся радиусом, поэтому сначала научимся двигаться по кругу диаметром 1 м. В примере, который расположен ниже, скорости левого и правого моторов равны v1=100 и v2 =70. Но этот показатель (70) зависит от расстояния между колесами, поэтому для своего робота надо установить экспериментально. 
Минимальный радиус круга будет получен при значении v2=0 (робот будет крутиться вокруг своего правого колеса). Будем увеличивать скорость мотора от 0 до 70 (здесь надо поставить ваше значение, определенное в первом эксперименте) на единицу 70 раз. Достигнув желаемого значения, продолжим движение по кругу в течении некоторого времени.
Задержка 0,1 сек обеспечит выполнение цикла за 70*0,1=7 (сек). Что уже хорошо, но, надо признать, что спираль раскручивается слишком быстро, робот пропускает кегли.
Уменьшим величину приращения скорости, это позволит повысить плотность витков спирали. Введем новую величину a, которая будет означать ускорение второго мотора, работать будем с дробными числами (тип float).
По правилам кегельринга робот не может выходить из круга больше чем на 5 сек. Поэтому, даже в спиральном алгоритме требуется использование датчика освещенности. Оптимальное решение - при наезде на ограничительную черную линию прекратить наращивание радиуса дуги и переключиться на движение по линии с помощью датчика.
В конце 2012 года в СПб был поставлен очередной рекорд - 2,4 сек.