четверг, 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. Обычно подбор начинается с пропорционального коэффициента при нулевом дифференциальном. Когда  достигнута  некоторая  стабильность  на  небольших  отклонениях,  добавляется дифференциальная составляющая.

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

Урок 17. Пропорционально-дифференциальный регулятор

1. Движение по линии с одним датчиком освещенности на ПД-регуляторе
Задача движения по линии оптимальным образом решается именно с помощью ПД-регулятора. Однако эффект от него проявляется только на больших скоростях, когда робота начинает сносить с линии. Чтобы добиться такой скорости, необходимо увеличить диаметр колес и даже поставить повышенную передачу.
На примере в качестве среднего черного взято число 48. Базовая скорость моторов установлена 80. Пропорциональный коэффициент k1=3, дифференциальный k2=10.

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


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