Движение с одним датчиком освещенности



Рассмотрим пример трехколесного Lego-робота с одним датчиком освещенности, который должен двигаться по плоской поверхности вдоль границы черного и белого (рис. 7.3).

 

Рис. 7.3. Движение вдоль границы черного и белого.

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

Подключим левый мотор на порт B, пра-

вый — на порт C (рис. 7.4). Стартовая позиция

Рис. 7.4. Расположение

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

 

task main() { int grey=45; while (true)

{ // grey - значение серого if (SensorValue[S1]>grey)

{

motor[motorB]=100;  motor[motorC]=0;

} else {  motor[motorB]=0;  motor[motorC]=100;

} wait1Msec(1);

}

}

Значение «серого» (grey) может быть константой для данной системы или вырабатываться в результате предварительной калибровки как среднее арифметическое черного и белого.

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

Программа для движения по линии с помощью релейного регулятора в Robolab показана на рис. 7.5.

 

Рис. 7.5. Алгоритм движения вдоль границы черного и белого на релейном регуляторе.

Движение с двумя датчиками освещенности

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

 оба на белом — движение

прямо;  левый (S1) на черном, правый (S2) на белом — движение нале-

во;  

 левый на белом, правый на черном — движение направо;  оба на черном — движение Рис. 7.6. Варианты расположения двух датчиков освещенности над черной линией.

прямо. 

Этот регулятор реализуется программно с помощью вложенных ветвлений:

 

task main() {

int grey1=45, grey2=45; while(true) { if(SensorValue[S1]>grey1) {

if(SensorValue[S2]>grey2) { // Оба на белом  motor[motorB]=100;  motor[motorC]=100;

}

else { // Правый на черном  motor[motorB]=100;  motor[motorC]=-100;

} } else {

if(SensorValue[S2]>grey2) { // Левый на черном      motor[motorB]=-100;  motor[motorC]=100;

}

else { // Оба на черном      motor[motorB]=100;  motor[motorC]=100;

} } wait1Msec(1);

} }

То же самое в Robolab (рис. 7.7):

 

Рис. 7.7. Алгоритм движения вдоль черной линии с двумя датчиками на релейном регуляторе.

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

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

Описание

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

 

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

 

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

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

 

u0(t) = ke.

 

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

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

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

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

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

 

u = k ∙ (45 – e1).

 

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

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

 

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

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

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

 

task main() { int k=5, u; nMotorEncoder[motorA]=0; while(true) {

u=k*(45-nMotorEncoder[motorA]); motor[motorA]=u; wait1Msec(1);

}

}

 

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

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

В контроллере NXT есть четыре встроенных таймера, каждый из которых может отмерять время в десятых, сотых и тысячных долях секунды. Освоим первый таймер, который за секунду совершает 10 «тиков». В Robolab он обозначается T1 или Timer100ms1, а в RobotC — timer100[T1].

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

 

alpha = k2 ∙ T1.

 

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

 

u= k1 ∙ (alphae1).

 

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

(рис. 7.9).

 

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

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

 task main() {

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

alpha=timer100[T1]*k2; u=k1*(alpha-nMotorEncoder[motorA]); motor[motorA]=u; wait1Msec(1);

}

}

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

 

alpha = T1 / 10 ∙ k2.

 

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

 

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

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

 

alpha = T1 % 2 ∙ k2.

 

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

 

task main() {

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

alpha=timer100[T1]%2*k2; u=k1*(alpha-nMotorEncoder[motorA]); motor[motorA]=u; wait1Msec(1);

}

}

 

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

 

alpha = T1 % 5 % 2 ∙ k2.

 


center = S3.

 

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

 

k1 = c + (S3 - center) / k2.

 

 

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

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

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

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

 

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

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

t

de

u(t) = p + i + d = kp ∙ e(t) + ki  ∙ e(τ)dτ + kd  . dt

0

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

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

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

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

 

i = i + k i e(t) dt .

 

Физический смысл величины e(t) dt состоит в том, что она пропорциональная длительности нахождения системы в состоянии ошибки. Поскольку коэффициент ki выносится за скобки, можно говорить о величине 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-значения передаются в правильном порядке и потребуется установить реверс моторов или просто подавать отрицательное управляющее воздействие:

 

task main() {

int grey=SensorRaw[S3]; 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[S3]; //Отклонение с обратным знаком p=kp*err; i=i+ki*err*dt; d=kd*(err-errold)/dt; errold=err; u=(p+i+d)/scale; motor[motorB]=u; motor[motorC]=u; wait1Msec(1);

}

}

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

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

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

 

     θt +1 = θt + ut hr / b,                                                                        (1)

 

где r — радиус колес, b — база транспортного средства (расстояние между колесами). Легко также видеть, что расстояние робота от стены за время h изменится на величину h sin θt, т.е. имеет место соотношение

 

    xt + 1 = xt + vt h sin θt .                                                                     (2)

 

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

 

    xt + 1 = xt + vhθt , θt + 1 = θt + ut hr / b.                                             (3)

 

Исключая переменную θt, приходим к разностному уравнению 2-го порядка, непосредственно связывающему управляющую и регулируемую переменные:

 

    x t + 2 2 x t +1 + x t = gu t ,                                                                 (4)

 

где g = h2vr / b

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

 

     xt→ x* при t→∞.                                                                            (5)

 

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

 После такой демонстрации весьма естественно ввести понятия регулятора и обратной связи по результатам измерений и они легко осваиваются школьниками. Сначала рассматривается простейший пропорциональный регулятор (П-регулятор):

 

     ut = K0(x* – xt),                                                                               (6)

 

где K0 — коэффициент усиления регулятора. Подстановкой (6) в (4) получаем уравнение замкнутой системы 

 

    xt +2 2 xt +1+ (1 + gK0)xt = gK0x*.                                              (7)

 

Переходя к уравнениям для отклонений yt =x* – xt , получим однородное уравнение 

 

     yt+2 2 yt+1+ (1+ gK0)yt = 0.                                                       (7a)

 

Возникающий вопрос об устойчивости системы (7) теперь можно решить в случае общей однородной системы 2-го порядка: 

 

     xt+2 + a1xt+1 + a0xt = 0,                                                                   (8)

 

записав ее общее решение в виде суммы двух геометрических прогрессий со знаменателями λ1 и λ2 (возможно, комплексными) равными корням квадратного трехчлена λ2 + a1λ + a0. Условием асимптотической устойчивости оказывается пара неравенств |λ1| < 1, |λ2| < 1, означающая, что обе геометрические прогрессии являются бесконечно убывающими. Теперь стандартное условие устойчивости в терминах коэффициентов

 

     a0 < 1, 1+ a0> | a1|                                                                         (9)

 

школьники могут вывести самостоятельно.

Применяя правило (9) к уравнению системы с П-регулятором (7), убеждаемся в том, что неравенства (9) несовместны, т.е. что не существует числа K0, делающего систему (7) асимптотически устойчивой. Таким образом, П-регулятор оказывается неработоспособным, и для решения задачи поиски нужно продолжить.

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

 

      ut = K0(x* – xt) + K1(xt+1 – xt),                                                     (10)

 

где K1 — коэффициент усиления по разности (дифференциальный). Поскольку в момент времени t измерить xt+1 невозможно, для реализации регулятора (10) можно воспользоваться соотношением

 

xt+1 – xt = vhθt = vhθt–1 + ut–1 vh2r / b

 

Подставляя в (10), получим ПД-закон управления в виде ut = [K0(x* – xt) + K1vht–1 + ut–1 hr / b)], (11)

 

т. е. для применения (11) требуется помнить значения курсового угла и управления на предыдущем шаге. Для исследования устойчивости и выбора коэффициентов ПД-регулятора подставим (10) в (4). Получим уравнение замкнутой системы:

 

     xt+2 (2 + gK1)xt+1 + (1 + gK0 + gK1)xt = gK0x*.                       (12)

 

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

 

      K0 > 0, K0 + K1 < 0.                                                                     (13)

 

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

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

 

Глава 8. Задачи для робота


Дата добавления: 2019-02-22; просмотров: 1026; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!