четверг, 26 января 2012 г.

Урок 16. Движение по линии с двумя датчиками освещенности

1. Движение по линии с перекрестками
Правильно проехать перекресток с одним датчиком освещенности довольно сложно. Если требуется сделать это с достаточно высокой скоростью, нужно хотя бы два датчика, поставленные на расстоянии в две ширины линии (или шире).
При движении возможны четыре состояния датчика:
  • оба на белом - движение прямо;
  • левый (s1) на черном, правый (s2) на белом - движение налево;
  • левый на белом, правый на черном - движение направо;
  • оба на черном - движение прямо.
2. Программа для движения с двумя датчиками на П-регуляторе
Т.о. при равных показаниях датчика (оба белые или оба черные) робот едет прямо. Перед запуском робота, проведем автокалибровку обоих датчиков. Тогда алгоритм движения по линии с П-регулятором будет выглядеть с.о.:
Коэффициент k может изменяться в достаточно широком диапазоне (от1 до 20 и более) в зависимости от кривизны линии, маневренности робота и разницы между черным и белым на поле.

3. Калибровка перед  запуском
Важное условие. Автокалибровка должна проводиться на одноцветной поверхности и желательно при той освещенности, которая будет занимать наибольшую часть пути. Например, если робот едет вдоль черной линии на белом поле, то калибровать надо на белом. Т.е. положение робота при старте должно быть вот таким:

И еще замечание. Встречаются датчики, показания которых расходятся на 10-20%. Желательно их не ставить в паре на регулятор с большим коэффициентом, поскольку при резком изменении общей освещенности даже на однородном белом поле отклонения могут оказаться различными, что приведет к неожиданным последствиям.
Лучшее время по результатам урока 22 сек.

четверг, 19 января 2012 г.

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

1. Пропорциональный регулятор
Пропорциональный регулятор - это устройство, оказывающее управляющее воздействие u(t) на объект пропорционально его линейному отклонению e(t) от заданного состояния x0(t);
e(t)=x0(t)-x(t), где x(t) - состояние в данный момент времени;
u(t)=ke(t), где k - усиливающий коэффициент.
То есть, чем дальше робот отклоняется от заданного курса, тем активнее должны работать моторы, выравнивая его.

2. Движение по линии с одним датчиком освещенности с помощью П-регулятора
Движение по границе черного и белого тоже можно построить на П-регуляторе. Хотя внешне задача представляется решаемой только с помощью релейного регулятора, поскольку в системе присутствует всего два видимых человеческому глазу состояния: черное и белое. Но робот все видит иначе, для него отсутствует резкая граница между этими цветами. Можно сказать, он близорук и видит градиентный переход оттенков серого.

Вот это и поможет построить П-регулятор.
Определяя состояние работа как показания датчика освещенности, научимся оказывать пропорциональное управляющее воздействие на моторы по следующему закону: e=s1-grey, где s1 - текущие показания датчика, а grey - заданное значение.
Коэффициент k (равный в данном примере 2) должен быть достаточно мал (от 1 до 3). Такой регулятор эффективно работает только для малых углов отклонения, поэтому робота надо ставить в направлении движения так, чтобы датчик оказался по левую сторону от черной линии. Нетрудно заметить, что движение по линии на П-регуляторе отличается плавность и на некоторых участках работ движется практически прямолинейно или точно повторяя изгибы линии.

3. Калибровка датчика
Обратимся к числу 48, использованному в формуле. Это среднее арифметическое показание датчика освещенности на черном и на белом, например (40+56)/2=48. Однако показания датчиков часто меняются по разным причинам: другая поверхность, изменение общей освещенности в помещении, небольшая модификация конструкции и т.п. Поэтому имеет смысл научить робота самостоятельно вычислять среднее арифметическое, то есть значение границы белого и черного.


Способ I. Есть несколько способов выполнить калибровку датчика. В простейшем случае вместо вычисления среднего арифметического просто понижается значение белого. Робот снимает показание белого, вычитает из него некоторое предполагаемое значение (в данном примере на 8)  и полученное число считает границей черного и белого.
 Другим способом аналогичную калибровку можно выполнить так:
Вообще говоря, в RobotC требуется инициализация датчика. Произвести ее можно в меню Robot --> Motors and Sensors Setup. В качестве типа датчика устанавливается Light Active.

Способ II. Надо иметь в виду, что такой способ калибровки не учитывает все возможные варианты, а только экономит время на программирование и отладку. Если же времени достаточно, есть другой способ, при котором действительно производится расчет среднего арифметического.

Улучшение способа II. Предложенный алгоритм обладает некоторым неудобством: при запуске потребуется быть внимательным и не пропустить звукового сигнала, после которого робота надо переместить так, чтобы датчик освещенности оказался над белым полем. Вначале робот должен стоять точно над черной линией. Сразу после второго звукового сигнала робот начнет движение.
Процесс калибровки можно сделать управляемым. Для этого после каждого считывания данных необходимо вставить ожидание какого-либо внешнего события, например, нажатия на датчик касания (который необходимо установить на корпус робота и подключить к соответствующему порту).
Запускать программу имеет смысл, аккуратно установив тележку с датчиком освещенности над черной линией. 
Лучшее время по результатам этого урока 26 сек. (Галузин А.  и Григорьев А.).

четверг, 12 января 2012 г.

Урок 14. Релейный регулятор

1. Робот с одним датчиком
Одна их классических задач для мобильного робота - это движение по черной линии на белом поле с использование датчиков освещенности.
В первом опыте используем робота с одним датчиком освещенности. Датчик следует выдвинуть немного вперед:

Конструкцию можно построить множеством способом. Рассмотрим один их них. Крепление датчика освещенности к трехколесной тележке:


Короткая двухмодульная ось может быть красного или черного цвета:
Датчик подключен:

2. Релейный регулятор
Задача такова: двигаться по плоскому полю вдоль границы черного и белого.

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

Вот простейшее решение:

Без дополнительных уточнений предполагается, что датчик освещенности подключен к первому порту. Левый мотор подключен к порту В, правый - к порту С. Перед стартом ставим робота на линию так, чтобы датчик был над белым полем на расстоянии 2-3 см от черного. По алгоритму робот плавно поворачивается направо, пока освещенность не понизится на 5 пунктов (по умолчанию). Затем поворачивается налево, пока освещенность не повысится на 5 пунктов. Движение получается похожим на "змейку".
3. Возможные проблемы
1. Робот крутится на месте, не заезжая на линию. В этом случае следует стартовать с другой стороны линии, либо поменять подключение моторов к контроллеру местами.
2. Робот проскакивает линию, не успев среагировать. Следует понизить мощность моторов.
3. Робот реагирует на мелкие помехи на белом, не доезжая до черного. Надо увеличить порог чувствительности датчика (например, не на 5, а на 8 пунктов)

Есть возможность заранее определить уровень освещенности на данном поле и использовать его абсолютное значение. Воспользовавшись показаниями датчика на белом и черном, полученными через меню View, рассчитаем их среднее арифметическое (53+37)/2=45, которое условно назовем "значением серого". Пересекая датчиком значение 45, робот будет менять направление движения. Очевидно, что по левую луку от "серого" все показания датчика будут "белыми", а по правую "черными". Алгоритм будет выглядеть так:
Чтобы сделать поворот более плавным, не будем полностью останавливать моторы на повороте, а лишь притормозим. Числа 80 и 20 поставлены условно, их стоит подобрать самостоятельно: