Что такое пид регулятор в робототехнике

Как настроить ПИД-регулятор для гоночного робота?

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Что такое ПИД-регулятор? Как сделать расчет рассогласования и обратную связь для движущегося по линии робота? Как не перерегулировать? Рассказывает Вячеслав Нефедов (GoodLancer.com).

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Что такое «регулятор»?

Само понятие ПИД-регулятор пришло из теории автоматического управления. Кто читает по-английски, то там эта дисциплина называется control theory. Эта наука занимается исследованием систем автоматического управления, а такие системы мы встречаем на каждом шагу. Автопилоты, системы наведения торпед и ракет, системы управления температурой в химическом производстве, регуляторы положения поглощающих стержней в атомном реакторе, система регулирования температуры в кондиционерах, поплавковый клапан в сливном бачке унитаза — это всё системы автоматического управления.

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Для демонстрации работы ПИД-контроллера дальше мы используем робота нашего клиента Марка из Казахстана.

Расчет рассогласования

Первый расчетный блок в этом перечне — расчет рассогласования. Как пример расчета согласования можно взять такой: считаем, что в нашей линейке датчиков каждый датчик даёт выходной сигнал, например, 200 на белом поле и 1000 на черной линии. В этом случае мы можем считать, что если датчик показывает больше, чем 600, то он находится над линией. Меньше или равно 600 — над белым полем.

Этот алгоритм для системы из восьми датчиков линии на Arduino будет выглядеть примерно так:

Здесь signal — массив для хранения результатов замера сигнала с каждого из восьми датчиков, а qtr.read(signal) — это функция, которая заполняет массив значениями с датчиков. Нетрудно убедиться, что данная функция вернет 0 в том случае, если линия находится точно посередине линейки датчиков и положительное или отрицательное значение — в случае, если робот отклонился вправо или влево.

Это сильно упрощённый расчет рассогласования, который обычно требует большого количества датчиков (8-14 на робогонках). Есть другой вариант — рассчитывать дробное значение положения робота на линии, пользуясь тем, что наш датчик по мере приближения с белого поля к черной линии будет показывать промежуточные значения между 200 и 600. В каких-то ситуациях при такой схеме даже робот с массивом из трёх датчиков линии может показывать хороший результат.

Обратная связь

Второй расчетный блок — обратная связь. Для простого робота обычно обратная связь реализована таким образом — регулятор рассчитывает величину поправки, которая добавляется к скорости одного мотора и вычитается из скорости другого мотора.

П-регулятор

Буква «П» в названии П-регулятора означает слово «пропорциональный». П-регулятор берет в расчет текущее отклонение робота от линии и рассчитывает управление пропорционально текущему отклонению.

Например, наш расчет рассогласования написан таким образом, что смещение робота на пол-датчика в сторону от линии выдает ошибку рассогласования в одну единицу. Т.е. в случае если робот отклонился на полдатчика, то мы получим ошибку 1, если на один датчик, то ошибка будет 2, а если робот сместится на два датчика в сторону, то величина ошибки на выходе у нашей функции bot_position() будет четыре.

В этом случае мы можем написать П-регулятор так:

int avgSpeed = 150; // средняя скорость моторов
int kP = 10; // коэффициент пропорциональной обратной связи
int error; // Это ошибка положения
error = bot_position();
correction = kP * error;
motor1.move(avgSpeed*(1+correction));
motor2.move(avgSpeed*(1-correction));

Как мы подберем коэффициент kP? Робот с низким kP называется недорегулированным. Такой робот не умеет поворачивать достаточно резко для того, чтобы оставаться на линии. Робот с высоким kP называется перерегулированным. Он начинает «дергаться» и двигаться зигзагами, отклоняясь от линии то вправо, то влево. На видео выше видно, что робот немного перерегулирован — он двигается не «как влитой», а колеблется, причем бывает, что колебаниями линейку отводит влево от линии, несмотря, что робот в этот момент совершает поворот влево. Нормально отрегулированный робот с П-контроллером всегда поворачивает вправо когда нос находится слева от линии и влево — когда нос находится справа от линии, т.к. он «ищет потерянную линию».

Давайте посмотрим на робота со значительно перерегулированным П-контроллером и мы увидим, что он колеблется постоянно:

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

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

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

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

int prev_error;
void loop(void)
<
int avgSpeed = 150; // средняя скорость моторов
int kP = 10; // коэффициент пропорциональной обратной связи
int kD = 1; // коэффициент дифференциальной обратной связи
int error; // Это ошибка положения
error = bot_position();
correction = kP * error + kD * (error-prev_error);
prev_error = error;
motor1.move(avgSpeed*(1+correction));
motor2.move(avgSpeed*(1-correction));
delay(10);
>

Мы добавили здесь переменную prev_error, расчёт дифференциальной коррекции kD * (error-prev_error), а также задержку в цикле — delay(10). Д-регулятор как видно из формулы, борется с высокой скоростью изменений ошибки. Т.е. он борется с инерцией и с колебаниями, и является обязательным для роботов, которые двигаются с высокими скоростями.

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

Второй недостаток Д-регулятора — подверженность шумам. Случайные скачки освещенности могут привести к неожиданному его срабатыванию.

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

Давайте уменьшим коэффициент kD и мы увидим, что робот стал идти намного ровнее, чем на П-контроллере, более того, теперь мы можем даже уменьшить коэффициент kP и робот все-равно будет успешно проходить трассу. Этот робот может на ПД-контроллере идти более чем вдвое быстрее, чем на П-контроллере.

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

И-регулятор

Обратите внимание на предыдущем видео — робот в повороте движется «на крайних датчиках», сильно смещаясь от середины линии. Это особенность работы П-регулятора, для его корректной работы нужно чтобы робот двигался с ошибкой, а если нет ошибки, то нет и коррекции.

Тем не менее, есть простой регулятор, который отвечает как раз за движение робота в точности по центру линии. Это И-регулятор (интегральный регулятор). Посмотрите на видео ниже — робот с хорошо настроенным И-регулятором движется уже четко посередине линии, даже в повороте.

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

В этом коде вы уже видите полноценный ПИД-регулятор. Робот с настроенным ПИД-регулятором уже идет посередине линии. А что будет если И-регулятор перенастроить, задать слишком большие значения коэффициента kI? В этом случае I-регулятор будет мешать работать П-регулятору и робот опять начнет дёргаться, как это видно на видео ниже.

Порядок настройки ПИД-регулятора

Обычный порядок настройки робота такой:

Источник

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

ПИД регулятор – один из самых распространенных автоматических регуляторов. Он настолько универсален, что применяется практически везде, где нужно автоматическое управление. Например температурой: специальные печи, холодильники, инкубаторы, паяльники, сопло и стол 3D принтера, ИК паяльные станции и прочее. Поддержание частоты оборотов мотора, например для станков. Всевозможные балансирующие штуки, гироскутеры, сигвеи, левитирующие магнитные платформы, и конечно же квадрокоптеры и самолёты с автопилотом. Это всё ПИД регулятор. Почему именно ПИД? Существуют и другие регуляторы, превосходящие ПИД по адаптивности к управляемой системе и стабильности, например линейно квадратичный. Но, чтобы грамотно синтезировать такой регулятор, нужно быть гораздо больше чем “семи пядей” во лбу, а настройка ПИД регулятора дело хоть и неприятное, но фактически очень простое и под силу любому, а сам ПИД регулятор универсален для почти любого процесса.

Система управления

Прежде чем переходить непосредственно к пиду, очень важно понять и запомнить несколько базовых понятий, из которых состоит автоматическая система. В первую очередь это регулятор, который всем заправляет и находится в центре системы. Регулятор в данном понимании – математический алгоритм или часть программы, которая крутится на микроконтроллере. Регулятор, как алгоритм, работает с обычными числами. Объект управления – это девайс, которым мы управляем, например печка или мотор. Для этого у нас есть управляющее устройство, например диммируемый тен или драйвер мотора. Управляющее устройство получает от регулятора управляющий сигнал, то есть конкретное число. Это может быть заполнение шим сигнала, от 0 до 255, а может быть угол поворота сервомашинки от 0 до 180, потому что регулятору без разницы чем управлять. В объекте управления у нас стоит датчик, с которого регулятор получает управляемую величину, то есть текущий сигнал с датчика. Это – обратная связь, которая и даёт возможность системе ирчно поддержать заданное значение. В случае с печкой это температура, а с мотором – частота оборотов. Ну и наконец регулятор получает установку (уставку), то есть число, к которому он должен привести текущее значение с датчика. Установка может задаваться каким угодно образом: крутилкой, ползунком, энкодером, кнопками, да хоть смской или голосовым вводом. Регулятору это неважно, для него это просто цифра. Задача регулятора состоит в том, чтобы сравнивать текущее значение с установкой и выдавать управляющий сигнал на управляющее устройство. То есть в программе это будет выглядеть условно так: регулятор получил установку, регулятор получил значение с датчика, регулятор выполнил вычисления и выдал нам управляющий сигнал, опять же число. Если это шим – мы его подаём через функцию генерации шим. Есть ещё один момент – регулятор должен делать расчёты и применять управляющий сигнал через равные промежутки времени, то есть с равным периодом или частотой. Эта частота называется частотой дискретизации системы, а период обозначается как dt, прямо как период интегрирования. Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Под капотом у ПИД регулятора

ПИД регулятор состоит из трёх составляющих: пропорциональной P, интегрирующей I и дифференциирующей D, формируется просто как сумма трёх значений, умноженных каждая на свой коэффициент. Эта сумма после вычислений становится управляющим сигналом, который подаётся на управляющее устройство, обозначим его как out.

kP, kI и kD это и есть те самые коэффициенты, которые нужно настроить для работы ПИДа. Значения тут могут быть самые разные, от 0.001 то десятков и тысяч, это зависит от конкретной системы. Тут есть ещё один момент: любой коэффициент может быть равен нулю, и в таком случае обнуляется вся его компонента. То есть регулятор можно превратить в П, ПИ, ПД, и прочие сочетания. Разные системы требуют разного подхода, именно поэтому ПИД регулятор такой универсальный. В дальнейшем будем пользоваться следующими названиями переменных:

P составляющая

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

Данная разность называется ошибкой регулирования, то есть насколько далеко находится система от заданного значения. Получается чем больше ошибка, тем больше будет управляющий сигнал и тем быстрее система будет приводить управляемую величину к заданному значению. Коэффициент kP тут влияет роль усиления ошибки и настраивается вручную. Но в то же время, если система пришла к заданной величине, ошибка станет равной нулю, и управляющий сигнал тоже! Другими словами, п регулятор никогда не сможет привести к заданному значению, всегда будет некая ошибка. П составляющая является основной в ПИД регуляторе и так сказать тянет самую большую лямку, регулятор может неплохо работать только лишь на ней одной. P составляющая исправляет ошибку в текущий момент времени.

I составляющая

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

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

D составляющая

Дифференциальная составляющая представляет собой разность текущей и предыдущей ошибки, поделенную на время между измерениями, то есть на ту же dt, которая общий период регулятора. Иными словами – это производная от ошибки по времени.

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

Настройка регулятора

Для настройки регулятора нужно варьировать коэффициенты:

Вот так выглядит процесс стабилизации при изменении коэффициентов: Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике Настройка регулятора – дело не очень простое. Начальные коэффициенты для подбора можно получить по следующему алгоритму: сначала выставляем все коэффициенты в 0. Плавно увеличиваем kP до появления незатухающих колебаний. Значение kP, при котором они появились, запишем и обозначим как kP1. Далее замеряем период колебаний системы в секундах, обозначим как T. Итоговые коэффициенты получим так:

Например, незатухающие колебания появились при kP 20, период колебаний составил 3 секунды. Период dt в системе будет 50 мс (0.05 с). Считаем:

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

Реализация на C++

Соединяя все рассмотренные выше уравнения, получим:

Это готовая функция, которая принимает значение с датчика, установку, три коэффициента и время, а также ограничение выхода с регулятора. Как пользоваться этой функцией: функция должна вызываться с некоторым периодом, причем длительность этого периода нужно будет передать в функцию в секундах. Если попроще, можно использовать задержку. Но делать так не рекомендуется, лучше сделать таймер на миллис и работать с ним. Функция возвращает управляющий сигнал, то есть можно подать его например как ШИМ. Период dt имеет такой смысл: чем инерционнее у нас система, тем реже можно вычислять пид. Например для обогрева комнаты период можно поставить 1 секунду или больше, а для контроля за оборотами двигателя надо будет поставить пару десятков миллисекунд, то есть около сотни раз в секунду.

Видео

Источник

ПИД-регулятор доступно и просто

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Методист по олимпиадной робототехнике Университета Иннополис Алексей Овсянников рассказывает про алгоритмы регуляторов. Освоив урок, вы научитесь программировать движение робота по границе линии, удерживать подводного робота на заданной глубине, регулировать скорость тележки при подъеме и спуске и решать другие задачи.

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Продолжаю публиковать материалы для слушателей курсов повышения квалификации по подготовке к Innopolis Open in Robotics. Ранее я уже рассказал про подготовку моделей МанИРС для симулятора и про отслеживание показаний энкодеров у роботов на Arduino. Я обязательно продолжу эти темы, но чуть позже. Пока что хочется немного переключиться на алгоритмы. На всех наших КПК сильный акцент делается именно на них — мы не знаем, на чем в дальнейшем будут писать свои программы слушатели-педагоги и их ученики, поэтому важно объяснить принципы, логику работы программ. В каждом курсе рассматриваются свои алгоритмы (фильтрация и нормализация показаний датчиков, алгоритмы поиска объектов на изображении, алгоритмы навигации и поиска пути в лабиринте), но почти во всех соревнованиях, у всех возрастов, на всех этапах используются регуляторы. В этой статье я хочу рассмотреть, что же это за зверь такой, регулятор? И постараться рассказать это доступным языком.

Итак, что же такое регулятор? В робототехнике и автоматизации под этим понимают алгоритм, удерживающий систему (или робота) в нужном состоянии, чтобы датчики видели нужные показания. Чуть реже под этим понимают устройство, реализующее подобный алгоритм, но в DIY и образовательной робототехнике подобное редко встречается. Гораздо чаще регулятор прописывают как программу или часть программы управляющего контроллера.

Остановимся в этом месте и еще раз вчитаемся в предыдущий абзац, что мы поняли? Что регулятор — это алгоритм, программа. Если Вы собираете собственного робота из Lego или VEX’а, то не найдете у них какой-то особенной «детали-регулятора», вам придется описывать его в программе.

Второй важный момент — регулятор держит и направляет системы так, чтобы датчики видели заданное значение. То есть, регулятор всегда настраивается на показания одного или нескольких датчиков. Они позволяют определить, находится ли система в заданном состоянии. Без сенсоров регулятор не имеет смысла — непонятно будет, что сейчас происходит с роботом и как корректировать его поведение. Например, у нас есть коптер (робот-вертолет) и мы хотим, чтобы он летел на высоте 100 метров. Датчик робота видит 95 метров, следовательно ему нужно немного взлететь. Если датчик видит 110 метров, то коптеру нужно немного снизиться. Программа, которая будет автоматически управлять взлетом и снижением робота и будет регулятором. Если бы у робота не было датчика, то он не понимал бы, на какой он высоте и надо ли ему взлетать или снижаться.

Подобных примеров можно придумать очень много, почти в каждом соревновании:

Алгоритм «удерживания» нужного состояния можно реализовывать разными способами. Принято выделять четыре. Самый простой — релейный регулятор. Он подобен устройству реле. Это такой переключатель, который может иметь всего два состояния (выдавать два вида сигналов). Чаще всего это «вкл/выкл». Классический пример релейного переключателя — поплавковый клапан. Пока уровень воды низкий клапан открыт и вода продолжает поступать в емкость. Как только воды становится достаточно и поплавок всплывает, он закрывает клапан и вода перестает поступать:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Если температура в печи ниже заданной, то нагревательный тэн включается, иначе — выключается.

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Для этого как раз подойдут три остальных способа регулирования:

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

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

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

Уставка — желаемое состояние системы (или робота), то есть, желаемые показания датчиков. Чаще всего ее задает сам разработчик-программист, ее можно запоминать в какой-то момент времени (когда система в нужном нам состоянии) и далее удерживать. Например, робот-футболист запоминает азимут на ворота противника и движется в их сторону по датчику-компасу.

Управляющее воздействие — сигнал от регулятора, который должен влиять на систему, возвращая ее в состояние уставки. Оно складывается из всех частей регулятора: пропорциональной, интегральной и дифференциальной.

Учитывая эти термины, давайте рассмотрим

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Давайте теперь эти понятные слова «переобуем» в математику, чтобы стало непонятно. Ничего страшного, я ее объясню. Рассмотрим на примере движения робота по одному датчику вдоль линии:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

S — показания датчика;

ust — уставка (требуемые показания датчика);

P — пропорциональная составляющая;

kp — коэффициент пропорциональности;

U — управляющее воздействие;

Vleft, Vright — скорости левого и правого моторов робота;

Vbase — базовая скорость, которая должна быть у моторов, если робот в состоянии уставки.

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

Рассмотрим, как это работает. Уставку задает сам программист. Для робота, движущегося вдоль линии, за уставку принимаются показания датчика на границе. Например, на черном датчик видит 10, на белом видит 80, на границе примерно среднее арифметическое между этими числами:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

То есть, уставку делаем равной 45. Коэффициент пропорциональности — это просто число. Студенты и ученые рассчитывают его, исходя из математической модели робота, его физических параметров, электромеханических свойств моторов и т.д. В проектах детей его можно просто подобрать. Например, возьмем этот коэффициент равным 2. Базовая скорость пусть будет 50.

Предположим, что в момент запуска датчик видит как раз 45, получим:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

В какой-то момент линия начнет поворачивать, а робот поедет прямо. Предположим, что линия ушла вправо и датчик робота стал видеть 50:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Предположим, что робот проскочил границу линии и датчик теперь видит 40:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

И чем больше будет значение (модуль) ошибки, тем больше будет получаться пропорциональная часть, тем сильнее она будет тянуть робота к линии.

Рассмотрим коэффициент пропорциональности. Как уже было сказано, это просто число и его можно просто подобрать. Число не должно быть отрицательным (иначе робот станет не возвращаться к уставке, а убегать от нее), оно может быть не целым. Подбор kp можно сделать буквально «на глаз» — если система слишком слабо реагирует на изменение состояния, то kp слишком мал и его надо поднять. Если система начинает резко реагировать на изменения и дергается, то kp слишком большой. Начинать можно с числа 1 или 2 и подбирать коэффициент несколькими итерациями.

Даже при самом идеально подобранном коэффициенте kp система с П-регулятором неизбежно будет «раскачиваться» вокруг состояния уставки. На примере робота, движущегося вдоль линии наглядно видна причина: если робот немного отклонился, то, возвращаясь к границе, находит состояние уставки. В этот момент он едет прямо, но куда это относительно линии?

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Успокоить эти колебания, позволив роботу плавно выйти на линию, позволяет дифференциальная составляющая.

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

D — дифференциальная составляющая;

kd — коэффициент дифференциальности;

errold — ошибка на предыдущем шаге.

Коэффициент дифференциальности у меня получается обычно примерно в 10 раз меньше, чем kp. Подобрать его «на глаз» уже сложнее, для этого лучше делать специальные вычисления. Оставим пока их за скобками, я расскажу о них на КПК и в следующих статьях. Примем kd равным единице для простоты вычислений.

Рассмотрим вычисления на трех шагах: начало движения и ошибка равна 0, далее резкий поворот и ошибка равна 15, затем робот начинает приближаться к линии и ошибка уменьшается до 10:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Еще один очень важный момент состоит в том, что дифференциальная часть зависит от времени. Мы оцениваем скорость изменения ошибки, а скорость — это изменение чего-либо за единицу времени. Если итерации цикла будут выполняться с разной скоростью, то и разница (err-errold) будет принимать разные значения. А итерации будут разными по самым разным причинам: на некоторых шагах будут происходить сложные вычисления дальнейшего маршрута, на некоторых шагах будет происходить долгое считывание медленных датчиков и многих других. И после каждой долгой итерации робот будет немного (или сильно, смотря какой порядок задержки) дергаться.

Избежать этого можно разными способами. Идеально вычисление Д-части делать по следующей формуле:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

В первом математическом описании дифференциальной части я делал задержку на 5 миллисекунд командой pause(0.005). Это один из самых простых способов — я намеренно делаю большую паузу на каждой итерации. Предполагается, что все вычисления выполняются за более короткое время, примерно за 50 микросекунд. Я делаю паузу в 100 раз больше и получаю длину одной итерации 50+5000=5050 микросекунд. Даже если какой-то шаг будет вычисляться значительно дольше обычного, 500 микросекунд, общая длина шага получится 500+5000=5500 микросекунд, то есть всего на 9% дольше. И далее я могу принимать dt за константу (постоянную величину) и подбирать не kd, а kd/dt.

Еще один способ, применимый на Arduino (с использованием регистров микроконтроллера ATMega) или STM — выполнение каждого нового вычисления регулятора по прерываниям таймера. В этом случае промежуток времени тоже строго определен и заранее задан в таймере, ситуация аналогична предыдущему способу.

Осталась всего одна компонента регулятора, переходим к ней.

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

Математически полный регулятор, содержащий все три компоненты, в том числе накапливающую ошибку И-часть, выглядит следующим образом:

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

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

Коэффициент интегральности ki должен быть на несколько порядков меньше kp. Например, если ki меньше kp в 100 раз, то И-часть станет такой же по силе как и П-часть только через 100 шагов (с заданной выше паузой — через 0,5 секунды).

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

Что такое пид регулятор в робототехнике. Смотреть фото Что такое пид регулятор в робототехнике. Смотреть картинку Что такое пид регулятор в робототехнике. Картинка про Что такое пид регулятор в робототехнике. Фото Что такое пид регулятор в робототехнике

Тут используется та же самая dt. И теми же способами можно от нее избавиться (сделать паузу или запускать вычисления по таймеру).

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

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

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

Конечно, наш народ хитер на выдумки и придумал огромное количество вариаций. Например, я встречал накапливание И-части с «забыванием» давних значений ошибки; в книге С.А. Филиппова «Робототехника для детей и родителей» упоминается кубический регулятор; многие используют плавающие коэффициенты, возрастающие на резких поворотах и плавно ведущие по прямым линиям. Надеюсь, каждый из Вас найдет свой собственный вариант, адаптированный для конкретного робота. Начните с классического ПИД-регулятора и творите!

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *