Пропорциональный интегральный дифференциальный ПИД-регулятор в робототехнике Lego Mindstorms. Пропорциональный регулятор. Международные состязания роботов — Правила — Примеры роботов — Робот для траектории на основе LEGO EV3 Язык управления роботами

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

Описание

При автоматическом регулировании управляющее воздействие u(t) обычно является функцией динамической ошибки - отклонения e(t) регулируемой величины x(t) от ее заданного значения x0(t) :

e(t) = x0(t) – x(t).

Это принцип Ползунова-Уатта регулирования по отклонению, или принцип обратной связи. Математическое выражение функциональной зависимости желаемого управляющего воздействия u0(t) от измеряемых регулятором величин называется законом или алгоритмом регулирования, о котором говорилось выше.

Пропорциональный регулятор - это устройство, оказывающее управляющее воздействие на объект пропорционально его отклонению от заданного состояния:

Здесь k - это коэффициент усиления регулятора.

Заданное состояние x0 принято называть уставкой , а отклонение от него e - невязкой. Далее для определенности будем обозначать невязку сокращением err (от английского слова «error» - ошибка).

Управление мотором

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

Пусть e 1 - показания датчика оборотов1 на моторе A - является регулируемой величиной. Уставка x0 = 45, а невязка e = 45 – e 1. Тогда управляющее воздействие на мотор задается формулой

u = k ∙ (45 – e 1).

Здесь k - коэффициент усиления, например 5, который позволит усилить реакцию мотора даже при небольших отклонениях от уставки.

1 Не стоит путать математическое обозначение невязки e (от error) с показаниями энкодера e 1 (от encoder), предопределенной переменной среды Robolab.

При отклонении в положительную сторону на мотор будет подаваться отрицательное управляющее воздействие, и наоборот. Это управление можно применять к мотору в цикле с небольшой задержкой в 1-10 мс, чтобы разгрузить контроллер (рис. 7.8).

Рис. 7.8. Алгоритм управления мотором на пропорциональном регуляторе.

Если усиливающий коэффициент увеличить с 5 до 100, наш пропорциональный регулятор начнет работать как релейный, вызывая сильные колебания из-за возникновения эффекта перерегулирования.

В языке RobotC нет такого удобного обозначения показаний энкодера как в Robolab, поэтому программа выглядит немного длиннее:

int k=5, u; nMotorEncoder=0; while(true)

u=k*(45-nMotorEncoder); motor=u;

Далее, чтобы нанести «удар мечом», достаточно, имея вместо числа 45 переменную, изменить ее значение извне, например, из параллельной задачи. Об этом написано в разделе, посвященном роботамбарабанщикам в главе 8.

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

В контроллере NXT есть четыре встроенных таймера, каждый из которых может отмерять время в десятых, сотых и тысячных долях секунды. Освоим первый таймер, который за секунду совершает 10 «ти-

ков». В Robolab он обозначается T1 или Timer100ms1, а в RobotC - timer100.

Угол alpha отклонения мотора, заданный в предыдущем примере значением 45, поставим в зависимость от показаний таймера с ускоряющим коэффициентом k 2:

alpha = k2 ∙ T1.

Управляющее воздействие останется прежним с усиливающим коэффициентом k 1:

u = k 1 ∙ (alpha – e 1).

Кратко в программе на языке Robolab управляющее воздействие подадим сразу на мотор, предварительно инициализировав таймер

Рис. 7.9. Управление скоростью мотора - один оборот в секунду.

Коэффициент k 2 = 36 определяет, что за секунду значение alpha набегает до 360, что соответствует одному полному обороту двигателя:

int k1=2, k2=36, u, alpha; nMotorEncoder=0; ClearTimer(T1); while(true)

alpha=timer100*k2; u=k1*(alpha-nMotorEncoder); motor=u;

Используя целочисленное деление, принятое в языке C (и в Robolab) для переменных целого типа, можно достичь дискретного изменения угла, т.е. приращения его раз в секунду:

alpha = T 1 / 10 ∙ k 2.

При коэффициенте k 2 = 60 перемещения балки будут соответствовать движению секундной стрелки на циферблате часов. Но это мало

заметно. Для наглядности можно задать k2 = 30, тогда стрелка сделает полный оборот за 12 «тиков» по 30 градусов каждый. Будьте внимательны с последовательностью операций целочисленного деления и умножения, при изменении их порядка или «сокращении» непременно изменится результат (рис. 7.10).

Рис. 7.10. Ускоренная имитация движения стрелки часов.

И, наконец, пример математического барабанщика. Вместо постоянного движения вперед стрелка будет совершать колебания впередназад под управлением П-регулятора. В этом поможет операция деления с остатком, которая в языке C обозначается знаком %. Остаток от деления неотрицательного целого числа на 2 всегда будет 0 или 1:

alpha = T 1 % 2 ∙ k 2.

Усилив отклонение в k 2=15 раз, получим колеблющуюся уставку alpha , что вынудит регулятор 5 раз в секунду перемещать мотор то в 0º, то в 15 градусов. Изменения в программе невелики. Рассмотрим пример на RobotC:

int k1=3, k2=15, u, alpha; nMotorEncoder=0; ClearTimer(T1); while(true)

alpha=timer100%2*k2; u=k1*(alpha-nMotorEncoder); motor=u;

Этот прототип барабанщика наносит удары по столу через одинаковые промежутки времени. Главное, стартовать в нужной позиции. Используя целочисленную математику, можно задать и более сложный ритмический рисунок, например (табл. 7.1):

alpha = T 1 % 5 % 2 ∙ k 2.

center = S3.

Коэффициент определяется в цикле:

k 1 = c + (S 3 - center ) / k 2.

Рис. 7.36. Движение по линии на пропорциональном регуляторе с плавающим коэффициентом.

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

ПИД-регулятор

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

Рис. 7.37. Схема ПИД-регулятора.

Это упрощенная схема. На вход регулятора подается значение динамической ошибки e (t ), а на выходе вырабатывается управляющее воздействие u (t ):

u (t ) = p + i + d = k p ∙ e (t ) + k i ∙ ò t

e (τ)d τ + k d ∙

de .

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

Интегральная составляющая накапливает отрицательный опыт (суммирует ошибки) и вырабатывает компенсирующее воздействие. При минимальных отклонениях пропорциональная составляющая «слабеет» и интегральная, за счет своего быстрого увеличения суммированием, помогает «дотянуть» регулируемую величину до уставки.

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

С пропорциональной составляющей мы уже знакомы, дифференциальная описана в предыдущей главе 6. Возьмемся за интегральную. Эта составляющая определяется динамически, суммируясь с предыдущим значением:

i = i + ki × e(t) × dt .

Физический смысл величины e (t ) × dt состоит в том, что она про-

порциональная длительности нахождения системы в состоянии ошибки. Поскольку коэффициент k i выносится за скобки, можно говорить о величине i как сумме длительностей ошибок. Таким образом, мы находим интеграл путем суммирования.

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

Формат RAW

Данные с датчиков поступают в контроллер NXT в необработанном «сыром» виде. Все датчики передают операционной системе цифровое значение от 0 до 1023, которое затем обрабатывается соответствующим драйвером и приводится к более понятному виду (расстояние 0...255, освещенность 0...100, касание 0 или 1 и т. д.). Но данные можно получать и, минуя драйвер, напрямую. Такой необработанный формат принято называть RAW (от англ. «сырой»). В некоторых случаях с помощью него можно получить бóльшую точность. Так, например, диапазон значений датчика освещенности может увеличиться примерно в 10 раз. Именно эта возможность использована далее.

Получать данные в формате RAW можно и в Robolab, и в RobotC. Для этого датчик инициализируется соответствующим образом, а данные с него считываются с использованием специальной предопределенной переменной.

Балансирующий робот

Конструкция робота-сигвея изображена на рис. 7.38: вертикально расположенный контроллер, близко поставленные колеса и датчик освещенности, направленный вниз. Алгоритм будет несколько сложнее.

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

При отклонении назад показания датчика понижаются и робот начнает движение назад. За все это отвечает пропорциональная составляющая. На роль интегральной и дифференциальной составляющих отводится страховка от перерегулирования.

Рис. 7.38. Балансирующий робот-сигвей.

На рис. 7.39 представлен алгоритм в Robolab. Бóльшую его часть занимает инициализация переменных. Для повышения точности не только данные c датчика считываются в формате RAW, но большинство переменных объявляется в вещественном формате float. Собственно ПИД-алгоритм находится в цикле.

Рис. 7.39. Алгоритм балансировщика основан на ПИД-регуляторе.

Следуя традиции движения по линии, в качестве уставки используем переменную grey - средние показания датчика освещенности в положении равновесия. Новый параметр scale задает масштабирование управляющего воздействия. По сути, это ослабляющий коэффициент, поскольку вырабатываемое регулятором значение слишком высоко для моторов NXT. Можно было бы внести его внутрь уже имеющихся коэффициентов, но для RobotC этот параметр будет другой, а коэффициенты те же.

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

Аналогичный пример на RobotC несколько отличается в силу ряда причин. Во-первых, быстродействие NXT с прошивкой этой среды выше примерно в 1.4 раза, чем у Robolab, поэтому коэффициент scale следует увеличить. Во-вторых, RAW-значения передаются в правильном порядке и потребуется установить реверс моторов или просто подавать отрицательное управляющее воздействие:

int grey=SensorRaw; int err, errold=0;

float kp=25, ki=350, kd=0.3; float scale=14;

float dt=0.001; float p, i=0, d, u; while (true)

err= grey-SensorRaw; //Отклонение с обратным знаком p=kp*err;

i=i+ki*err*dt; d=kd*(err-errold)/dt; errold=err; u=(p+i+d)/scale; motor=u; motor=u; wait1Msec(1);

Элементы теории автоматического управления в школе1

Важной и интересной методической задачей является «переброска мостика» между областями знаний специалиста и школьника, помогающая учащимся школы увидеть перспективу будущей специальности, т.е. осуществить профориентацию, а студентам увидеть практическую применимость своих профессиональных знаний. Для достижения подобного эффекта были разработаны приемы расчета регуляторов, использующие математический аппарат, не выходящий за рамки школьных программ по математике и физике. В частности, вместо дифференциальных уравнений использованы разностные, хорошо соответствующие дискретному характеру взаимодействия объекта и регулятора при компьютерном управлении.

Рассмотрим, например, задачу построения пропорциональных (П) и пропорционально-дифференциальных (ПД) регуляторов в задаче управления движением мобильного робота вдоль стены. Обозначим через x t расстояние между роботом и стеной, через θt - курсовой угол робота, а через u t - управляющее воздействие в момент с порядковым номером t , соответственно, где t = 0, 1, 2, … - номера моментов изме-

рений. Считается, что опрос датчиков и изменения величины управляющего воздействия производится через равные промежутки времени h . Для задач управления Lego NXT роботами естественно считать, что управляющим воздействием является разность угловых скоростей вращения колес, пропорциональная скорости изменения курсового угла:

Считая отклонения курса от номинального θt =0 малыми, а среднюю скорость робота постоянной: vt=v , динамику изменения переменных состояния робота в первом приближении можно описать линейными уравнениями состояния:

где g = h2vr / b.

Зададим желаемое расстояние до стены x*> 0 и определим цель управления (ЦУ) соотношением

xt → x* при t→∞.

Теперь естественным образом введем на содержательном уровне понятие асимптотической устойчивости, как свойства решений системы (4), обеспечивающего достижение ЦУ (5) при любых начальных условиях, достаточно мало отличающихся от целевых. Легко видеть, что при u t = 0 решением уравнения (4) является любое постоянное значение x t = x* . Но поскольку уравнение (4), соответствующее модели двойного интегратора (двойного сумматора), не обладает свойством асимптотической устойчивости, ЦУ (5) при постоянном управлении не достигается. Это легко демонстрируется как аналитически - суммированием ря-

Эта задача является классической, идейно простая, она может решаться много раз, и каждый раз вы будете открывать для себя что-то новое.

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

В нашем примере будет разобрано три примера робота на основе основной учебной модели Robot Educator.

Для начала, собираем базовую модель учебного робота Robot Educator, для этого можно использовать инструкцию в программном обеспечении MINDSTORMS EV3.

Так же, для примеров нам понадобятся, датчики света-цвета EV3. Эти датчики света, как никакие другие, наилучшим образом подходят для нашей задачи, при работе с ними, нам не придётся забоится о интенсивности окружающего света. Для этого датчика, в программах мы будем использовать режим отражённого света, при котором оценивается количество отражённого света красной подсветки датчика. Границы показаний датчика 0 - 100 единиц, для «отсутствия отражения» и «полного отражения» соответственно.

Для примера мы разберём 3 примера программ для движения по чёрной траектории изображённой на ровном, светлом фоне:

· Один датчик, с П регулятором.

· Один датчик, с ПK регулятором.

· Два датчика.

Пример 1. Один датчик, с П регулятором.

Конструкция

Датчик света устанавливается на балку, удобно расположенную на модели.


Алгоритм

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


Так как на реальной траектории датчик формирует значения во всём своём рабочем диапазоне (0-100), то значением к которому стремиться робот, выбрано 50. В этом случае значения передаваемые функции поворота формируются в диапазоне -50 - 50, но этих значений недостаточно для крутого поворота траектории. По этому следует расширить диапазон в полтора раза до -75 - 75.

В итоге, в программе, функция калькулятора является простым пропорциональным регулятором. Функция которого ((a-50)*1.5 ) в рабочем диапазоне датчика света формирует значения поворота в соответствии с графиком:

Пример работы алгоритма

Пример 2. Один датчик, с ПK регулятором.

Этот пример составлен на той же конструкции.

Вы наверно заметили, что в прошлом примере робот излишне раскачивался, что не давало ему достаточно разогнаться. Сейчас мы постараемся немного улучшить эту ситуацию.

К нашему пропорциональному регулятору мы добавляем ещё и простой кубический регулятор, который добавит изгиб в функции регулятора. Это позволит уменьшить раскачивание робота рядом нужной границей траектории, а так же совершать более сильные рывки при сильном удалении от неё

Одним из базовых движений в легоконструировании является следование по черной линии.

Общая теория и конкретные примеры создания программы описаны на сайте wroboto.ru

Опишу, каким образом мы это реализуем в среде EV3, поскольку есть отличия.

Первое, что необходимо знать роботу – значение “идеальной точки”, расположенной на границе черного и белого.

Расположение красной точки на рисунке как раз соответствует этой позиции.

Идеальный вариант расчета – измерить значение черного и белого и взять среднее арифметическое.

Сделать это можно вручную. Но минусы видны сразу: в течении даже небольшого времени освещенность может поменяться, и высчитанное значение окажется неверным.

Значит, можно заставить это делать робота.

В ходе экспериментов мы выяснили, что измерять и черное, и белое необязательно. Можно измерить только белое. А значение идеальной точки рассчитывается как значение белого, деленное на 1,2 (1,15), в зависимости от ширины черной линии и скорости движения робота.

Рассчитанное значение нужно записать в переменную, чтобы потом обращаться к нему.

Расчет “идеальной точки”

Следующий параметр, участвующий в движении – коэффициент поворота. Чем он больше, тем резче робот реагирует на изменение освещенности. Но слишком большое значение приведет к “вилянию” робота. Значение подбирается экспериментально индивидуально для каждой конструкции робота.

Последний параметр – базовая мощность моторов. Она влияет на скорость движения робота. Увеличение скорости движения приводит к увеличению времени реагирования робота на изменение освещенности, что может привести к вылету с траектории. Значение тоже подбирается экспериментально.

Для удобства, эти параметры тоже можно записать в переменные.

Коэффициент поворота и базовая мощность

Логика движения по черной линии такова: измеряется отклонение от идеальной точки. Чем оно больше, тем сильнее робот должен стремиться вернуться к ней.

Для этого высчитываем два числа – значение мощности каждого из моторов В и С по отдельности.

В виде формул это выглядит так:

Где Isens – значение показаний датчика освещенности.

Наконец, реализация в EV3. Удобнее всего оформить в виде отдельного блока.

Реализация алгоритма

Именно такой алгоритм был реализован в роботе для средней категории WRO 2015

Робототехника — новое интересное направление, которое, по-видимому, будет дальше развиваться в рамках школьных курсов информатики и технологии. Бум робототехники во многом связан с тем, что она позволяет ответить на вопрос: »А зачем же мы, собственно, учим программирование?». Кроме того, в курсе робототехники можно познакомиться с элементарными понятиями теории автоматического управления.

На этой странице представлены разработанные автором тренажёры для программирования и платы Arduino . Они могут помочь в тех случаях, когда по каким-то причинам нет возможности использовать реальное аппаратное обеспечение.

Тренажёры используют возможности HTML5, поэтому будут работать только в современных браузерах (лучше всего использовать Google Chrome или Mozilla Firefox ).

Новости теперь и в Telegram-канале

27 ноября 2015 г.
В тренажёры добавлена трасса «зародыш» (М.В. Лазарев , г. Орехово-Зуево).

13 октября 2015 г.
Теперь в тренажёрах для LEGO-робота можно загружать свои трассы (поля для робота). Как это сделать? Смотрите .
Добавлены новые тренажёры — LEGO-роботы с двумя , тремя , четырьмя датчиками освещённости.

Язык управления роботами

Для управления роботами в тренажёрах используется простой язык программирования, который получил рабочее название SiRoP (Simple Robot Programming ).

Управление роботом с датчиком освещённости

Датчик освещённости позволяет роботу ориентироваться на поверхности стола, например, ехать вдоль границы между белой и чёрной областями (по краю чёрной линии). Фотодиод подсвечивает поверхность, фотоприёмник «ловит» отражённые лучи и измеряет их интенсивность.

Наиболее популярная задача этого типа — движение по линии. С помощью тренажёра можно изучить различные законы управления — релейный, пропорциональный, и даже ПИД-управление (пропорционально-интегрально-дифференциальное).

Примеры программ для робота с датчиком освещённости

Пока 1 { если датчик > 128 { мотор = 100 мотор = 0 } иначе { мотор = 0 мотор = 100 } ждать(10) }

KP = 0.2 пока 1 { u = kP*(датчик-128) мотор = 50 + u мотор = 50 - u ждать(20) }

Main { пока 1 { пока датчик > 128 { мотор = 100 мотор = 100 ждать(10) } назад() поворот() } } назад { мотор = -100 мотор = -100 ждать(260) } поворот { мотор = -50 мотор = 50 ждать(50) }

Управление роботом с двумя датчиками освещённости

Два датчика освещённости позволяют роботу лучше ориентироваться и ехать вдоль тонкой линии. Они вынесены немного вперед и разведены в стороны. Как и для задач с одним датчиком, c помощью этого тренажёра можно изучать различные законы управления.

Примеры программ для робота с тремя датчиками освещённости

Управление роботом с четырьмя датчиками освещённости

Четыре датчика освещённости позволяют роботу лучше определять крутые повороты. Внутренние датчики служат для тонкой регулировки, для них используется пропорциональное регулирование. Два внешних датчика вынесены немного вперед и разведены в стороны. Они используются тогда, когда встречается крутой поворот. Коэффициент усиления для управления по показаниям датчиков внешней пары выбирается больше, чем для внутренней пары (см. Л.Ю. Овсяницкая и др., Алгоритмы и программы движения робота Lego Mindstorms EV3 по линии , М.: «Перо», 2015).

Примеры программ для робота с четырьмя датчиками освещённости

Пока 1 { d0 = датчик > 128 d1 = датчик > 128 d2 = датчик > 128 d3 = датчик > 128 если d1 & !d2 { мотор = 100 мотор = 0 } если!d1 & d2 { мотор = 0 мотор = 100 } если d1 == d2 { мотор = 100 мотор = 100 } если d0 & !d3 { мотор = 30 мотор = 0 } если!d0 & d3 { мотор = 0 мотор = 30 } ждать(10) }

K1 = 0.2 k2 = 0.4 пока 1 { u1 = датчик - датчик u2 = датчик - датчик мотор = 50+k1*u1+k2*u2 мотор = 50-k1*u1-k2*u2 ждать(10) }

Управление роботом с датчиком расстояния (сонаром)

Датчик расстояния (сонар) позволяет во время движения робота определить расстояние до ближайшего препятствия. Он излучает ультразвуковой сигнал и принимает отражённый сигнал. Чем больше время между излучённым и принятым сигналами, тем больше расстояние.

Используя датчик расстояния, можно запрограммировать робота так, что он автоматически пройдёт лабиринт известной формы, но неизвестных размеров.

Пропорциональный регулятор - это устройство, оказывающее управляющее воздействие u(t) на объект пропорционально его линейному отклонению e(t) от заданного состояния x0(t);

e(t)=x0(t)-x(t), где x(t) - состояние в данный момент времени;

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

Движение по линии с одним датчиком освещенности с помощью П-регулятора

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

Вот это и поможет построить П-регулятор.
Определяя состояние работа как показания датчика освещенности, научимся оказывать пропорциональное управляющее воздействие на моторы по следующему закону:
e=s1-grey, где s1 - текущие показания датчика, а grey - заданное значение.

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

Калибровка датчика

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

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

  • оба на белом - движение прямо;
  • левый (s1) не черном, правый (s2) на белом - движение налево;
  • левый на белом, правый на черном - движение направо;
  • оба на черном - движение прямо.
Т.о. при равных показаниях датчика (оба белые или оба черные) робот едет прямо. Перед запуском робота, проведем автокалибровку обоих датчиков. Тогда алгоритм движения по линии с П-регулятором будет выглядеть с.о.:

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


И еще замечание. Встречаются датчики, показания которых расходятся на 10-20%. Желательно их не ставить в паре на регулятор с большим коэффициентом, поскольку при резком изменении общей освещенности даже на однородном белом поле отклонения могут оказаться различными, что приведет к неожиданным последствиям.
 
Статьи по теме:
Планировка и застройка городских и сельских поселений
СП 42.13330.2011 «ГРАДОСТРОИТЕЛЬСТВО. ПЛАНИРОВКА И ЗАСТРОЙКА ГОРОДСКИХ И СЕЛЬСКИХ ПОСЕЛЕНИЙ». Разарботан авторским коллективом: руководитель темы - П.Н. Давиденко, канд. архит., чл.-корр. РААСН; Л.Я. Герцберг, д-р техн. наук, чл.-корр. РААСН; Б.В. Черепан
Основные типы животных тканей Сравнение эпителиальной и соединительной ткани
МОУ «Гимназия» п.г.т. Сабинского муниципального района Республики Татарстан Районный семинар «Повышение творческой инициативы учащихся на уроках биологии путем использования информационных технологий» «Ткани животных: эпителиальная и соединительная» О
Распространенность аллергических заболевании
1 Аллергические заболевания в последние десятилетия все больше привлекают внимание из-за нарастающей распространенности среди населения. В статье представлены результаты исследования распространенности аллергических заболеваний за 2009-2015 годы в Липец
Военные походы александра македонского Походы александра македонского были в
После смерти царя Филиппа II престол занял его сын Александр. Весть о смене правителя разнеслась по предместьям очень быстро, после чего власти в Афинах, Фивах и некоторых других крупных городах попытались изгнать македонские гарнизоны. К тому же начали б