Математические принципы реализации автоматического управления
5.1. Введение
Благодаря стремительному развитию технологий появляются новые средства разработки и прототипирования, в том числе и автономных устройств, способных самостоятельно передвигаться и выполнять механические действия. При этом сейчас есть широкий выбор платформ способных перемещаться по земле, воздуху и даже в воде. Универсальные принципы построения этих платформ позволяют программисту работать с ними, порой даже не обладая специальными техническими знаниями. Кроме того, появляются универсальные робототехнические наборы, позволяющие быстро и просто конструировать прототипы моделей роботов, от разработчика, как правило, требуется лишь знание стандартных языков и инструментов программирования. Таким образом, становятся широко востребованной теория автоматического управления, т.к. при проведении технических исследований и реализации экспериментальных проектов разработчики сталкиваются с типовыми задачами и трудностями. В этой главе будут рассмотрены типовые задачи, в общем, без конкретной привязки к конкретным р обототехническим наборам, однако примеры будут приведены на языке RobotC, разработанного для популярных и широкодоступных наборов. Читатели, не сталкивавшиеся до этого с этим языком, могут воспринимать его как некоторый псевдокод.
Одной из главных задач теории автоматического управления является управление системами с обратной связью. В таких задачах можно выделить четыре основных компонента:
- управляемую систему (объект управления) - то, чем мы хотим управлять;
- цель управления - то, чего мы хотим достичь при помощи управления, т.е. желаемое поведение объекта управления;
- список измеряемых переменных (или выходов) - то, что мы можем измерять;
- список управляющих переменных (или входов) - то, что мы можем менять для того, чтобы воздействовать на объект управления.
Еще один важный компонент - регулятор - устройство (или программа), вырабатывающее входные величины, необходимые для достижения заданной цели. Этот пятый элемент появляется после того, как теоретическое решение задачи найдено. Под решением проблемы управления будем понимать нахождение закона управления (алгоритма управления), обеспечивающего достижение цели. Как только искомый закон найден, он может быть использован для вычисления управляющих входов по измеренным значениям выходов объекта управления. Полученные значения входов в виде некоторых сигналов подаются на исполнительное устройство.
В формировании этих сигналов может принимать участие микропроцессор, производящий достаточно сложные вычисления в соответствии с заданным алгоритмом.
Будем рассматривать простейший случай, когда задача состоит в поддержании системы в определенном заданном состоянии. Тогда можно говорить о задаче регулирования как частном случае задачи автоматического управления. Для осуществления автоматического регулирования к объекту подключается комплекс устройств, представляющих собой в совокупности регулятор.
В данном случае под регулятором будем понимать устройство, которое с помощью чувствительного элемента (датчика) измеряет регулируемую величину и в соответствии с законом регулирования вырабатывает воздействие на регулирующий орган объекта. Система, стоящая из объекта и регулятора, называется системой управления, или замкнутой системой управления.
Исполнительное устройство, осуществляющее механическое перемещение регулирующего органа, обычно называется сервоприводом.
5.1.1. Релейный регулятор
Релейным двухпозиционным регулятором называется регулятор, у которого регулирующий орган под действием сигнала от датчика может принимать одно из двух крайних положений: "открыт" - "закрыт". При этом приток энергии к регулируемому объекту может быть только максимальным или минимальным.
5.1.1. Движение с одним датчиком освещенности
Рассмотрим пример трехколесной (одно колесо пассивное) роботизированной тележки с одним датчиком освещенности, который должен двигаться по плоской поверхности вдоль границы черного и белого.
Регулирующим органом объекта в данном случае будут два колеса, подключенные к сервоприводам. Регулируемая величина - положение датчика освещенности, привязанное к конкретному значению уровня освещенности. Нагрузка на объект (возмущающее воздействие) - это движение робота вперед вдоль линии границы. Поскольку линия может быть кривой, а также вследствие других факторов при отсутствии регулирующего воздействия робот непременно съедет с линии.
Подключим левый мотор на порт В, правый - на порт С (такой выбор портов - традиция для наборов Mindstorms NXT). Стартовая позиция робота - датчик на белом. Построим программный регулятор, который обеспечит движение по дуге в сторону черного, пока робот на белом, и движение по дуге в сторону белого, пока робот на черном. Для этого выключается или резко понижается мощность одного из моторов. Вот реализация на RobotC.
while (true) { // grey - значение серого if (SensorValue[S1]>grey) { Motor[MotorB]=100; Motor[MotorC]=0; } else { Motor[MotorB]=0; Motor[MotorC]=100; } wait1msec(1); }
Здесь SensorValue[S1] обозначает получения результатов измерения датчика подключенного к порту S1, в данном случае подразумевается, что это датчик освещённости. Команда Motor[MotorC]=100 устанавливает скорость вращения мотора C на 100% вперёд, диапазон при этом от -100 до 100. Команда wait1msec(1) устанавливает задержку в одну миллисекунду, необходимую для того, что бы устройство успело выполнить подаваемую команду.
Значение "серого" (grey) может быть константой для данной системы или вырабатываться в результате предварительной калибровки как среднее арифметическое черного и белого.
Под управлением такого регулятора робот движется вдоль линии границы по ломаной кривой, периодически наезжая то на черное, то на белое. Скорость его невысока, стабильность тоже, а траектория движения оставляет желать лучшего. Все это издержки использования двухпозиционного релейного регулятора.
5.1.2. Движение с двумя датчиками освещенности
Правильно проехать перекресток с одним датчиком освещенности довольно сложно. Если требуется сделать это с достаточно высокой скоростью, нужны хотя бы два датчика, поставленные на расстоянии в две-три ширины линии (или шире). Для начала воспользуемся релейным регулятором, с помощью которого можно обработать четыре возможных состояния датчиков:
- оба на белом - движение прямо;
- левый (S1) на черном, правый (S2) на белом - движение налево;
- левый на белом, правый на черном - движение направо;
- оба на черном - движение прямо.
Этот регулятор реализуется с помощью условных операторов.
while(true) { if(S1>grey1) { if(S2>grey2) // Оба на белом { Motor[MotorB]=100 ; Motor[MotorC]=100; } else // Правый на черном { Motor[MotorB]=100; Motor[MotorC]=-100; } } else { if(S2>grey2) // Левый на черном { Motor[MotorB]=-100; Motor[MotorC]=100; } else // Оба на черном { Motor[MotorB]=100; Motor[MotorC]=100; } } }
Вот такой, довольно длинный и малоэффективный алгоритм первым приходит в голову. Чтобы не сбиться с линии, приходиться значительно усложнять его, вводить дополнительные проверки и, конечно, калибровку датчиков под конкретную освещенность. Однако достаточно немного измениться окружающим условиям, как устройство будет терять линию, поскольку значения были жестко фиксированными. И так будет продолжаться до тех пор, пока не будут использоваться базовые принципы автоматического регулирования.