четверг, 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. В новом примере для компактности разместим все числовые параметры сверху, а модификаторы портов снизу.

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

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