Заголовок сообщения: Что лучше: PID регулятор, или Fuzzy logic?
Добавлено: Пн мар 28, 2022 13:32:51
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Хочу спросить у сообщества, кто имел дело с регулятором на нечёткой логике (Fuzzy logic regulator)? Какие впечатления? Я недавно занялся этим вопросом и просто в восторге. В двух моих проектах регулятор на Fuzzy logic положил на обе лопатки ПИД регулятор. Причём настройка регулятора на нечёткой логике оказалась на порядок проще и понятнее. В моём блоге я обрисовал сравнение более подробнее, но хочу спросить, есть ли ещё кто-нибудь, кто занимался нечёткой логикой? И почему при таких преимуществах (быстрое регулирование, отсутствие вынужденных колебаний, лёгкость настройки) нечёткая логика не заменила ПИД в устройствах регулирования?
Fuzzy логтикой не занимался, но читал в книжке Валвано (книжку не рекомендую). Там в 17-й главе обзорно рассмотрены типы регуляторов, начиная от релейных и заканчивая этой нечеткой логикой. Да, расписано красиво, но я вынес из этой главы, что чтобы это реально работало, нужно достаточно хорошо знать контролируемую систему. Иначе заполучить возбуждение и все остальные прелести - раз плюнуть. А если систему хорошо знаешь - тот же ПИД работает хорошо.
А по коду, больше или меньше чем у пид регулятора?
Вопрос скорее в другом. Является код общедоступным из открытых источников или нет. Если код общедоступен, то тогда возможно тестирование таких устройств независимыми специалистами. А если нет, то тогда это очередной "сименс".
Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
Добавлено: Вт мар 29, 2022 11:02:25
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Добрый день. По размеру кода вполне сопоставимо с ПИД регулятором. Поскольку Fuzzy logic регулятор разработан в рамках контрактных обязательств, раскрыть его пока не могу. Но есть два нюанса: 1) по ссылке в статье есть открытая реализация регулятора. Она тоже вполне применима. 2) Моя библиотека сделана на Float переменных, чтобы избежать масштабирования входных и выходных параметров. Я хочу перевести её на целочисленную логику, чтобы ускорить работу. Правда придётся отказаться от экспоненциальной функции. Тогда нужно масштабировать переменные, но эта библиотека будет открытой, так как сделана вне работы. Правила нечёткой логики могут реализовывать достаточно сложные функции регулирования, совершенно недоступные ПИД регулятору. Например, вхождение в траекторию, или принятие решений.
Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
Добавлено: Ср апр 20, 2022 22:07:32
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Перевёл библиотеку на целочисленную логику. Теперь её можно использовать на микроконтроллерах без поддержки float. Это заняло некоторое время, так как нужно было приводить величины к масштабным единицам +-127 и 0..255. Также нужно было протестировать все новые функции и написать шпаргалку в хедере. Но теперь всё оформил так, как сам понимаю. Поскольку эта версия библиотеки не используется на работе, я её выложил в открытый доступ на гит: https://github.com/Garmin59/Fuzzy_logic_integer Подробнее описание будет у меня в блоге несколько позже, сюда также выложу информацию. Если кому будет интересно посмотреть и попробовать, пишите мнения и вопросы в эту ветку, буду отвечать.
Совпадение, не иначе... Несколько дней ищу в интернете практические примеры реализации данного алгоритма, что бы можно было поручить выполнять это микроконтроллеру.Абсолютно случайно попалась на глаза ваша тема.Позвольте высказать свое мнение. Большей частью, людям хватает простых регуляторов "релейного" типа с гистерезисом, максимум ПИ-регулятр. Будем честны, зависимость эта и потребность обусловлена областью применения.Для бытовых нужд типа, подогрев рассады, регулировка температуры в помещении, инкубаторы и т.д. хватит примитивного алгоритма и будет работать.Разумеется, для максимального комфорта и эффективности можно ввести "умные регуляторы", но в тоже время и без них будет работать... К чему я подвожу, тема действительно Очень и интересная и незаслуженно обделена вниманием и если на зарубежных сайтах она хоть мало мальске затрагивается, то у нас с этим проблема.Не смотря на это есть предчувствие, что тема не сыскает популярность.В данном конкретном случае как у вас, эта система оправдана, для автопилота RC моделей она актуальна, для многого она избыточна.Мало у кого получается правильно настроить коэффициенты ПИД-регулятора... Субъективное мнение, впрочем как и выше, приведите пример, ну предположим термостата под управлением нечеткой логики, что бы люди могли попробовать без сильного погружения в "науку", а кто оценит, тот пойдет дальше. Повторюсь, тема действительно интересная и не раскрытая!Поэтому желаю удачи в творчестве!
Заголовок сообщения: Re: Что лучше: PID регулятор или Fuzzy logic?
Добавлено: Чт апр 21, 2022 12:04:35
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Написал простейшую программу П регулятора. Нагреватель начинает уменьшать нагрев при разнице температур 10 градусов. Можно подобрать под свойства реального нагревателя Вначале формируем правила оценки разницы температур. Затем правила управлением нагревателем. Поскольку параметр один, то и логические функции передают первый параметр на выход без изменений. Спойлер
Код:
********************* P heating regulator sample code ***********************/ // Input temperature in degree - t_measure variable -127..127 // Setup temperature in degree - t_setup variable -127..127 // output value = 0 - cold, 100 - full hot 100% // one input variable
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
Сходу замечу, что приведенный пример "Написал простейшую программу П регулятора." у меня так и не заработал. Я его пытался вкорячить в 8051 проц.. Вкорячил. Но не работает. Ради проверки вкорячил за десять минут в ардуину. Тоже выдает нули.
Учитывая что эти коэффициенты как раз и дают Кп = 10 как (100-0) / (0 - (-10)) --, то на таком примере преимущество нечеткой логики не очевидно. Какая разница, для какого регулятора потребуется подобрать Кп = 10 - для П-регулятора или регулятора на нечеткой логике?
Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
Добавлено: Вс май 01, 2022 18:04:22
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Отлично, что у вас заработало на 51 процессоре! Библиотеку проверял на пк в Vision Studio Code. Опечатку поправлю. Насчёт примера - это ведь первый "HELLO world" в использовании регулятора. Количество правил и входных переменных неограничено. Например, можно добавить интегральную или дифференциальную ошибку и добавить правила для полного ПИД реглятора. Когда в голове складываются "правила по данным эксперта", то можно сделать управление всем, чем угодно. Сейчас, например, отлаживаем управление курсом сельхоз. трактора на поле по линии. Две переменные - расстояние до линии и курс трактора. На выходе - угол поворота передних колёс. Пять состояний в каждой переменной, двадцать пять правил. Описывают подход к линии, постепенный въезд в неё и поддержание отклонения не более 2 см. Другие пилят управление коптером или моделью самолёта. Преимущество нечёткой логики в том, что можно построить нелинейные правила, больше всего подходящие к данному процессу управления.
1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался? 2) Где бы наискать информацию для дальнейшего изучения, чтобы сделать регулятор посложнее-поточнее.
----
Цитата:
Отлично, что у вас заработало на 51 процессоре!
Ну это не так радостно, на самом деле. Я правил код в Keil, и ограничений этого компилятора это специфическое развлечение. Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию. В аппноте https://www.keil.com/appnotes/files/apnt_129.pdf страница 4 указано, что аргументы функции, вызываемой через указатель на функцию, должны размещаться в регистрах, а это не более трех аргументов. Поэтому более сложные правила, чем low/high, которым будет нужен p3, сходу не пойдут.
Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.
Спойлерf1 = f = fuzzy->start_ffunc; while (1) { f->y = f->func(fuzzy->input, f->a, f->b, f->c); f = f->next; if (f == f1) break; }
вопросы 1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался?
В некоторых функциях нужны три переменные, например трапеция. Если они не нужны, убираем предупреждение компилятора
Цитата:
2) Где бы наискать информацию для дальнейшего изучения, чтобы сделать регулятор посложнее-поточнее.
Я искал в гугле, пару ссылок оставил в блоге, остальное не сохранил, на английском находил толковые статьи. Для меня самое сложное было понять, как из нечётких результатов получать чёткое решение Потом понял про весовые коэффициенты, и паззл сложился. Для оценки правил отлично подошёл вариант построения трёхмерной поверхности из результатов и входных переменных. Сразу показывает, где ошибся в правилах:
Цитата:
Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию.
В вашем случае можно использовать только один указатель, на структуру параметров, но надо править код библиотеки
Цитата:
Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.
А как PI регулятор сделать? Для нагревателя. Вход: Уставка, температура. Выход: % мощности нагревателя, 0-1000 (шаг 0.1%).
В статье на хабре https://habr.com/ru/post/500268/ есть вроде как подходящая "база правил для регулятора" (если заменить "скорость" на "отклонение температуры"):
если отклонение больше или (отклонение норма (0) и скорость растет), то воздействие больше. если отклонение в норме, то воздействие 0. если отклонение меньше или (отклонение норма (0) и скорость падает), то воздействие меньше.
Но тут непонятный момент - "воздействие больше/ноль/меньше" - т.е. получается, что на выходе такого регулятора надо реализовать интегратор? В принципе это не проблема.
Но основной вопрос - как в принципе всё это описать в функциях и правилах?
Заголовок сообщения: Re: Что лучше: PID регулятор, или Fuzzy logic?
Добавлено: Пн май 02, 2022 17:54:42
Держит паяльник хвостом
Карма: 16
Рейтинг сообщений: 196
Зарегистрирован: Вс дек 02, 2012 16:58:33 Сообщений: 910 Откуда: от туда
Рейтинг сообщения:0
Тут всё просто. Три шага: 1) Входные величины - это ошибка в данный момент, и разность ошибок сейчас и некоторое время назад. Это две входные переменные (отклонение и скорость). Их заносим во входной массив с индексами 0 и 1 соответственно. Теперь надо определится с правилами фуззификации: "отклонение в норме" это от куда до куда. Например, от -5 до +5 градусов. Можно применить треугольную функцию с центром 0 и базой 5 градусов. Можно взять и кубическую аппроксимацию Гаусса с сигмой 2,5 но пока не нужно. "меньше" тогда будет ниже 5 градусов. Возьмём функцию low с параметрами -5 и 0. Похоже будет "больше". Три функции для параметра отклонение. Для ваших правил нужны ещё две функции для параметра скорость. Думаю, нужно будет умножать на 10, так как скорость будет в величинах меньше единицы. Вот и повод использовать функцию in_scaling. Определите в числах, сколько и в какой функции будет "скорость растёт" и "скорость падает" (функции low и high подойдут). Итого пять правил, определяющих понятия входных переменных. Кстати, всё это описано в fuzzy_logic.h, просто почитайте внимательно. 2) Теперь определите выходные воздействия. Например, "больше" это 100, "ноль"-0, "меньше" -100. 3) И напишите ваши три правила в пять строк, так как сложные правила пишутся последовательными бинарными выражениями. Всё это тоже есть в примере на гите. Насчёт интергатора на выходе - можете попробовать применить, никто не запрещает. Запускайте ваш регулятор - получаете результат.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения