Страницы

воскресенье, 27 марта 2022 г.

Какой регулятор лучше: ПИД или на нечёткой логике?

 Какой регулятор лучше:
ПИД или на нечёткой логике?

Недавно по работе закончил сравнение работы двух регуляторов: Пропорционально-интегрально-дифференциальный (ПИД) и на основе нечёткой логики (Fuzzy logic). Получил весьма интересные результаты. Представляю обзор результатов исследований.

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

Разбавлю текст фотографиями блока управления:



 Для реализации устойчивой работы ПИД регулятора, кроме подбора параметров, пришлось компенсировать ступеньку порога открывания гидроклапанов, а также добавить форсирующую цепочку на выход регулятора. Только в этом случае получилось подобрать такие коэффициенты ПИД регулятора, которые обеспечили достаточное качество регулирования без колебательных процессов. Причём на подбор и проверку параметров ПИД регулятора ушло около недели экспериментов, поездок в поле, анализа результатов. В результате я получил не самый быстрый переходной процесс и постоянное наличие сигнала управления на выходе, даже в режиме удержания устоявшегося процесса. Нет, я не спорю, наверное возможна лучшая комбинация параметров регулятора, но в треугольнике «Скорость – Точность - Устойчивость» (выберите два параметра из трёх) я пожертвовал скоростью ради двух других. К тому же, нужно было обеспечить устойчивость регулирования на разных оборотах двигателя. Устройство работало стабильно, но какая-то неудовлетворённость всё-таки осталась.

Вот пример промежуточного результата настройки переходной характеристики:

Чуть позже я заинтересовался регулятором на основе нечёткой логики (Fuzzy logic), и написал свою библиотеку реализации такого регулятора. Принципы построения нечёткого регулятора описаны довольно подробно здесь и здесь, можете ознакомиться. Если коротко, то нечёткие логические функции оперируют не с двумя фиксированными состояниями (истина/ложь), а со всеми промежуточными значениями от ложь (0.0) до истина (1.0), и выдают на выход также любое значение от 0.0 до 1.0. Это позволяет определить такие промежуточные состояния, как «скорее всего, да», «не уверен», или «практически не соответствует». И описать логику работы регулятора с любым количеством входных параметров и их взаимосвязью на человеческом языке. "Если ситуация такая-то, действуем так". Правила работы так и называются «правила по данным эксперта».

Библиотеку работы Fuzzy регулятора я специально написал без привязки к конкретной платформе, на Си, чтобы её можно было использовать как на целевом микроконтроллере, так и в библиотеке Matlab, и даже в симуляторе на языке Си в компьютере. Для управления гидроцилиндром я использовал два параметра: 1) сигнал ошибки в данный момент времени, 2) разница между сигналом ошибки сейчас и за некоторое время до этого. Правила написал «по данным эксперта», по собственному разумению, чем немало порадовал свой ЧСВ.

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

Воодушевлённый полученным успехом, я интегрировал Fuzzy регулятор в систему более высокого уровня: управление движением трактора по траектории. Здесь также был использован ПИД регулятор, и также были проблемы с треугольником «Вхождение в траекторию - Точность - Устойчивость» при разном расстоянии до линии и углу вхождения. В качестве входных параметров мы с коллегами использовали дистанцию до линии траектории и разницу между углом движения трактора и направлением линии траектории. Вначале было моделирование системы в Matlab. В этой системе есть встроенный модуль Fuzzy logic и модель трактора. Мы создали модель ПИД регулятора и модель Fuzzy logic регулятора для сравнения. Добившись хорошего качества регулирования, мы создали внешний модуль для Matlab на основе моей библиотеки и полученных правил для верификации работы библиотеки. Результаты работы встроенного модуля и внешней библиотеки были близки.

Вот сравнительная картинка моделирования:

Синий график - ПИД регулятор, красный – Matlab, жёлтый – Fuzzy logic библиотека.

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

В итоге, настройка Fuzzy регулятора на реальном сложном объекте выполнилась в три раза быстрее, я получил отличное и безопасное управление на двух различных объектах. Fuzzy logic выиграл у ПИД со счётом 2:0. Я рад, что познакомился с таким необычным регулятором.


 

Комментариев нет:

Отправить комментарий