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

В контексте беспилотных автомобилей они играют важную роль в управлении такими параметрами движения, как рулевое управление, ускорение и т. д. Сложные алгоритмы, используемые в беспилотных автомобилях, по сути, рассчитывают траекторию и скорость движения беспилотного автомобиля. Автономность может быть реализована только в том случае, если автомобиль следует по траектории с заданной скоростью. Именно здесь PID-регулятор играет свою роль, обеспечивая соблюдение беспилотным автомобилем рассчитанных параметров. Любое отклонение от рассчитанных параметров может привести к непредвиденным или катастрофическим последствиям.

Данная статья переведена с английского с некоторыми адаптациями. В рамках курса “Построение систем автоматического управления (САУ)”

1. Теория ПИД-регулятора

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

Процесс ПИД-регулирования

Пропорциональный (P): просто берёт некоторую долю от текущего значения ошибки. Доля задаётся константой и обозначается буквами Kp. Используется для вычисления корректирующего воздействия на процесс. Поскольку для формирования пропорционального воздействия требуется наличие ошибки, при её отсутствии пропорциональное корректирующее воздействие отсутствует.

Интеграл (I): учитывает все прошлые значения ошибки и накапливает их с течением времени. Это приводит к росту интегрального члена до тех пор, пока ошибка не станет равной нулю. Когда ошибка устранена, интегральный член перестаёт расти. Если после применения пропорционального регулирования ошибка всё ещё существует, интегральный член пытается устранить ошибку, добавляя накопленное значение ошибки. Это приводит к уменьшению пропорционального эффекта по мере уменьшения ошибки. Интегральная константа обозначается Ki

Производная (D): производная используется для оценки будущего тренда ошибки на основе текущей скорости её изменения. Она используется для добавления в систему демпфирующего эффекта. Чем быстрее происходит изменение, тем сильнее контролирующий или демпфирующий эффект. Константа производной обозначается Kd

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

2. Цель проекта

  • Создайте алгоритм ПИД-контроля для управления автомобилем по трассе.

  • Настройте гиперпараметры PID (Kp, Ki, Kd) таким образом, чтобы автомобиль плавно следовал по дороге, сводя к минимуму поперечную ошибку.

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

3. Реализация алгоритма управления

Алгоритм контроллера был реализован в виде кода на C++. Исходный код состоит из класса PID в файле PID.cpp. Начальные значения ошибки и гиперпараметров PID инициализируются функцией Init(). Ошибка перекрестного отслеживания, возвращаемая симулятором, используется для обновления значений ошибки для P, I и D, а именно текущей ошибки, суммы ошибок и разницы в ошибках в функции UpdateError(). Функция CalculateResponseValue() вычисляет и возвращает отклик PID на основе текущих значений ошибки перекрестного отслеживания.

4. Настройка гиперпараметров ПИД

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

4.1 Настройка гиперпараметров рулевого управления

Настройка Kp: это значение настраивалось путём постепенного увеличения от небольшого значения до тех пор, пока автомобиль не начал отклоняться взад и вперёд, демонстрируя колебания параметра P. Я начал с значения 0,05, но остановился на значении 0,15 как на подходящем. На графике ниже показаны колебания ошибки для разных значений Kp. С увеличением значения Kp частота и амплитуда колебаний увеличиваются, и их необходимо демпфировать.

На видео ниже показаны сильные колебания автомобиля после старта при значении Kp, равном 0,15

Настройка Kd: при значении Kp, равном 0,15, я увеличивал значение Kd до тех пор, пока колебания не прекратились. Я выбрал значение 3,0, чтобы обеспечить плавность хода. На графике ниже показаны кривые для разных значений Kd. Красная кривая соответствует значению 3,0. Интересно отметить, что колебания не затухают, пока значение не достигнет 2,0. Кривые для 2,0 и 3,0 очень похожи, но значение 3,0 хорошо работает на кривых, где градиент ошибки очень высок.

На видео ниже показан привод со значениями Kp и Kd, установленными на 0,15 и 3,0

https://youtu.be/qnvfrmyJpoc 

Настройка Ki: значения Ki теоретически устраняют ошибку в установившемся режиме. Однако наилучшие результаты были получены при значении, близком к нулю (1E-5).

4.2 Настройка гиперпараметров для регулирования скорости

В качестве первого шага значение Kp было постепенно увеличено с 0,1 до 0,25. Но, как показано на графике ниже, при значении 0,25 (разрыв между контрольной линией и синей линией) кривая стабилизировалась на уровне ошибки. Поскольку не было колебаний, которые нужно было бы демпфировать, я оставил значение Kd равным нулю. Чтобы устранить ошибку в устойчивом состоянии, я установил значение Ki равным 1E-4, что в конечном итоге позволило поддерживать желаемую скорость 30 миль в час.

5. Заключение

С выбранными значениями Kp, Ki, Kd для управления рулевым колесом и скоростью я смог провести автомобиль по трассе, не съезжая с неё и не совершая опасных маневров. Я использовал ручную настройку, чтобы понять принцип работы ПИД-регулятора и то, как значения влияют на поведение автомобиля.

Ниже приведены мои выводы:

Kp оказывало значительное влияние на поведение автомобиля, поскольку оно напрямую связано с ошибкой. При очень высоком значении Kp автомобиль будет сильно вилять на поворотах. Более низкие значения Kp приводят к более плавным коррекциям рулевого управления. Однако только Kp без значений Kd и Ki приводит к колебаниям.

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

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

Данная статья переведена с английского с некоторыми адаптациями. В рамках курса “Построение систем автоматического управления (САУ)”

Комментарии (13)


  1. Arastas
    24.10.2024 16:19

    Хотелось бы, чтобы в курсе САУ параметры ПИД не подбирались, а рассчитывались.

    А вы можете убрать статью в чулан и переписать ее в виде интересной/полезной статьи, а не отчет по практическому заданию?


  1. buratino
    24.10.2024 16:19

    перевод сделан совместно с преподавателем курса “Построение систем автоматического управления (САУ)” Андреем Чепига.

    О боги...

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

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

    Откуда считывает, куда возвращает. Если есть ошибка поперечного движения, то куда делась ошибка продольного? А ошибка поперечного движения - она откуда берется?

    При очень высоком значении Kp автомобиль будет сильно вилять на поворотах.

    откуда берутся повороты, если у вас только ошибка поперечного движения?


    1. FaryaRos Автор
      24.10.2024 16:19

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


      1. buratino
        24.10.2024 16:19

        тогда это кейс как не надо писать


    1. randomsimplenumber
      24.10.2024 16:19

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

      Это все равно что 2 раза расстрелять;)

      Вы слишком многого хотите от перевода индусской лабораторной работы


  1. Dynasaur
    24.10.2024 16:19

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


  1. roslovets
    24.10.2024 16:19

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


    1. randomsimplenumber
      24.10.2024 16:19

      В статье ни одной формулы и ни одной строчки кода. В чем полезность?


      1. roslovets
        24.10.2024 16:19

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


        1. randomsimplenumber
          24.10.2024 16:19

          Возьмём этот коеффициент 0.5 а этот 0 - ну, так себе методика настройки ;)


          1. roslovets
            24.10.2024 16:19

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


            1. randomsimplenumber
              24.10.2024 16:19

              Ну от статьи в соавторстве с преподавателем ожидалось большего.


  1. dude_sam
    24.10.2024 16:19

    Как "шутил" наш профессор:

    Кто главный враг "автоматчика"? - Технолог!

    Правильный ответ

    Инерционность!

    ¯\_(ツ)_/¯
    ¯\_(ツ)_/¯