8-900-374-94-44
[email protected]
Slide Image
Меню

Пид регулятор википедия: HTTP 429 — too many requests, слишком много запросов

Содержание

регулятор | это… Что такое ПИД-регулятор?

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

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

Если какие-то из составляющих не используются, то регулятор называют пропорционально-интегральным, пропорционально-дифференциальным, пропорциональным и т.  п.

Содержание

  • 1 Общие сведения
    • 1.1 Пропорциональная составляющая
    • 1.2 Интегральная составляющая
    • 1.3 Дифференциальная составляющая
  • 2 Теория
  • 3 Ссылки

Общие сведения

Пропорциональная составляющая

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

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

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

Интегральная составляющая

Интегральная составляющая пропорциональна интегралу от отклонения регулируемой величины. Её используют для устранения статической ошибки. Она позволяет регулятору со временем учесть статическую ошибку.

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

Дифференциальная составляющая

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

Теория

Назначение ПИД-регулятора — в поддержании заданного значения x0 некоторой величины x с помощью изменения другой величины u. Значение x0 называется заданным значением, а разность e = (x0 − x) — невязкой, рассогласованием или отклонением величины от заданной.

Выходной сигнал регулятора u определяется тремя слагаемыми:

,

где Кp, Кi, Кd — коэффициенты усиления пропорциональной, интегральной и дифференциальной составляющих регулятора, соответственно.

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

В дискретной реализации метода расчета выходного сигнала уравнение принимает следующую форму:

,

где  — время дискретизации. Используя замену можно записать:

В программной реализации для оптимизации расчетов переходят к рекуррентной формуле:

Система управления с обратной связью с участием ПИД-регулятора. Система управляет величиной y(t), т.е. выводит величину y(t) на заданное извне значение u(t). На вход ПИД-регулятора подаётся ошибка e(t), выход ПИД-регулятора является управляющим воздействием для некоторого процесса (для объекта управления), управляющего величиной y(t).

Часто в качестве параметров ПИД-регулятора используются:

  • относительный диапазон
  • постоянные интегрирования и дифференцирования, имеющие размерность времени

Следует учитывать, что термины используются по-разному в различных источниках и разными производителями регуляторов.

Ссылки

  • ПИД-регулирование (ПИД-регулятор) на практических примерах
  • Принципы работы ПИД-регуляторов
  • Реализация ПИД регулятора на C++
  • Перевод статьи «Просто о ПИД-алгоритмах»

PID controller: как этому учить?: ailev — LiveJournal

?

Anatoly Levenchuk (ailev) wrote,

Categories:
  • Технологии
  • Образование
  • Cancel
Робот по линии уже бегает, и теперь нужно заставлять дитенку писать какой-то код, чтобы он:
— не дёргался
— бегал быстрее

Для этого нужно как-то объяснить кусочек теории автоматического регулирования (PID controller, http://en. wikipedia.org/wiki/PID_controller, ПИД регулятор http://ru.wikipedia.org/wiki/%D0%9F%D0%98%D0%94-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80). Современные альтернативы алгоритмам ПИД обсуждаются в спецпрессе (например, http://www.cybosoft.com/newsevents/mfavsother.html — табличка сравнения пяти методов, выигрывает model-free adaptive, MFA), но они явно не проще (поглядите на архитектуру этого MFA — http://www.cybosoft.com/newsevents/mfa.html) — и, похоже, во многих случаях, не лучше. Если уж и учить чему-то третьеклассника на материале робототехники, то для начала именно ПИД:

— первая задача: отсутствие дерганий при остановке на заданном расстоянии от подвижной стенки (http://www.robotc.net/blog/2011/12/05/incredible-video-explaining-pid/)
— вторая задача: невихляющее движение по линии
— третья задача: двухколёсный робот-сегвей (http://www.nxtprograms.com/NXT2/segway/steps.html)
На этом, думаю, можно будет остановиться (а MFA учить через некоторое время — «used as a key component, a multilayer perceptron neural network consists of one input layer, one hidden layer with N neurons, and one output layer with one neuron»).

Сеть изобилует попытками объяснить ПИД «не для PhD» — и по-русски (http://roboforum.ru/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%22%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE_%D0%BE_%D0%9F%D0%98%D0%94-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D1%85%22, http://rutracker.org/forum/viewtopic.php?t=2072337 — тут восхититесь нецифровыми решениями) и по-английски (поищите в Гугле — там море разливанное).

Главный вопрос: как объяснять ПИД третьекласснику?

ПИД — это примерно сотня строк кода в самом общем и навороченном варианте из используемых в любительской робототехнике (http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/), но для учебных целей можно обойтись и двадцатью строками. Поскольку дитенка мой может написать до пятидесяти строк связного кода ненулевой сложности, то я ожидаю, что ему этот код как-то удастся объяснить, но сходу видны проблемы с объяснением параметров и их подбором. Хотя есть варианты:

1.

Математику в силу полной неадекватности для третьеклассника не давать, но показывать много графиков — вдруг поймёт хоть что нибудь? Попытаться объяснить слова «интегральный» и «дифференциальный» — тоже: а вдруг поймёт, или хотя бы запомнит? Как при этом писать код, не очень понимаю.

2. Ровно наборот: взять готовую библиотечную процедуру PID (таковых множество), заколотить гвоздями, сказать «пользуйся», а параметры настраивать самому. Учить тому, что «с ПИД лучше, чем без ПИД — убедись сам». На вопрос, «как оно работает» отвечать: «вырастешь — узнаешь» (если, конечно, такой вопрос будет, что не факт). Код писать не нужно, о ПИД будет главное знание: что он есть, и в чем от него может быть польза.

3. Ничего не говорить про математику, объяснять по программистски: что в переменных программы, что значит каждая строчка коротенького алгоритма, как усложняется пропорциональный алгоритм при учёте очередных особенностей системы. Избегать математических терминов, для «пропорционально» оставить всё как есть, а вот для «интегральный» и «дифференциальный» придумать какие-то более понятные слова («с накоплением отклонения», «с предсказанием отклонения»).

Графиков не рисовать, всё показывать на конкретных роботах и трассах, менять роботов и трассы для того, чтобы обобщить результирующий алгоритм в библиотечный вид. Настройку давать «подбором значений».

Может, кто-то встречал такой курс «ПИД без математики»? Или кто-то может сам придумать, как такое объяснять малым деткам — так, чтобы детки написали свои двадцать строк кода?

Subscribe

  • lytdybr

    Предварительная программа нашей конференции 22-23 апреля сегодня была свёрстана (два дня докладов по двадцать минут каждый вместе с вопросами, как…

  • Заметки с XIII рабочей встречи INCOSE RUS по проблемам системной инженерии

    Политическая информация Русское (по языку, а не по стране) отделение INCOSE продолжает работать по-прежнему, игнорируя любые санкции и попытки…

  • lytdybr

    В «Интеллект-стек (пререлиз)» сегодня добавлен подраздел онтологии, можете смотреть. Release early, release often. Вот его рубрикация: —…

Photo

Hint http://pics.livejournal.com/igrick/pic/000r1edq

  • lytdybr

    Предварительная программа нашей конференции 22-23 апреля сегодня была свёрстана (два дня докладов по двадцать минут каждый вместе с вопросами, как…

  • Заметки с XIII рабочей встречи INCOSE RUS по проблемам системной инженерии

    Политическая информация Русское (по языку, а не по стране) отделение INCOSE продолжает работать по-прежнему, игнорируя любые санкции и попытки…

  • lytdybr

    В «Интеллект-стек (пререлиз)» сегодня добавлен подраздел онтологии, можете смотреть. Release early, release often. Вот его рубрикация: —…

pid — ROS Wiki

Показать дистрибутивы EOL:  

См. PID на index.ros.org для получения дополнительной информации, включая все, что связано с ROS 2.

Состояние документации

Выпущено

Задокументировано

Запуск узла ПИД-регулирования.

  • Статус сопровождающего: разработан
  • Сопровождающий: Andy Zelenak
  • Автор: Andy Zelenak , Paul Bouchier
  • Лицензия: BSD
  • Источник: git https://bitbucket.org/AndyZe/pid.git (ветка: master)

Выпущено

Задокументировано

Запустите узел ПИД-регулирования.

  • Статус сопровождающего: поддерживается
  • Сопровождающий: Andy Zelenak
  • Автор: Andy Zelenak , Paul Bouchier
  • Лицензия: BSD
  • :
  • Источник https:// bitbucket.org/AndyZe/pid.git (ветка: master)

Выпущено

Документировано

Запуск узла ПИД-регулирования.

  • Статус сопровождающего: поддерживается
  • Сопровождающий: Andy Zelenak
  • Автор: Andy Zelenak , Paul Bouchier
  • Лицензия: BSD
  • :
  • Источник https:// bitbucket. org/AndyZe/pid.git (ветка: master)

Выпущено

Документировано

Запустите узел ПИД-управления.

  • Статус специалиста по обслуживанию: поддерживается
  • Сопровождающий: Энди Зеленак
  • Автор: Энди Зеленак , Пол Бушье
  • Лицензия: BSD
  • Источник: git https://bitbucket.org/AndyZe/pid .git (ветвь: master)

Выпущено

Документировано

Запуск узла ПИД-регулирования.

  • Статус сопровождающего: поддерживается
  • Сопровождающий: Andy Zelenak
  • Автор: Andy Zelenak
    , Paul Bouchier
  • Лицензия: BSD
  • Источник: git https://bitbucket.org/AndyZe/pid.git (ветка: master)

Выпущено

Документировано

Запуск узла ПИД-регулирования.

  • Статус сопровождающего: поддерживается
  • Сопровождающий: Andy Zelenak
  • Автор: Andy Zelenak , Paul Bouchier
  • Лицензия: BSD
  • :
  • Источник https:// bitbucket. org/AndyZe/pid.git (ветка: master)

Содержимое

  1. Обзор
    1. Особенности
  2. Установка пакета
    1. Двоичная установка
    2. Установка и сборка из исходного кода
  3. Пример: Запустите servo_sim.launch
    1. . Динамическая реконфигурация коэффициентов ПИД-регулирования
    2. Автонастройка
  4. Узел контроллера
    1. Темы
    2. Параметры
  5. Как использовать функции контроллера
    1. Конфигурация с параметрами, приватными для узла
    2. Динамическая реконфигурация
    3. Поддержка нескольких контроллеров (с примером)
      1. Пример
    4. Опора обратного действия
    5. Авто/ручной
    6. Моделирование быстрее, чем настенные часы
      1. Пример
  6. Другие узлы
  7. Фильтрация
  8. Известные проблемы
  9. Отправить вопросы здесь

Обзор

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

На этой вики-странице используется несколько терминов из теории систем управления:

  • Уставка: желаемое значение контролируемого процесса, например, положение рычага, скорость двигателя и т. д.
  • Состояние установки: фактическое значение контролируемого процесса. Завод — это название процесса, а его состояние — контролируемое свойство, например. положение рычага, скорость двигателя и т. д.
  • Усилие управления: величина усилия, прилагаемого контроллером к управляемому процессу, чтобы попытаться сделать состояние объекта равным заданному значению. Усилие управления можно варьировать, изменяя, например, напряжение, рабочий цикл и т. д.

Особенности

Установка пакета

Вы можете установить пакет pid из двоичных файлов или собрать из исходного кода. Если вы устанавливаете из двоичных файлов, файлы примеров, обсуждаемые ниже, будут в /opt/ros/<релиз>/share/pid

Установка двоичных файлов

Замените «индиго» на ваш выпуск в приведенной ниже команде.

 $ sudo apt-get install ros-indigo-pid 

Установка и сборка из исходного кода

 $ cd catkin_ws/src
Клон $ git https://bitbucket.org/AndyZe/pid.git
$ кд ..
$ catkin_make 

Пример: Запустите servo_sim.launch

В каталоге pid/launch имеется несколько файлов запуска, которые запускают симуляции, демонстрирующие возможности контроллера. Servo_sim.launch является одним из таких, в котором pid-контроллер управляет объектом второго порядка, который имитирует сервопривод, управляющий положением нагрузки. Контур управления работает на частоте 100 Гц.

Roslaunch pid servo_sim.launch, и откроется несколько окон.

 $ roslaunch pid servo_sim.launch 

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

  • /setpoint/data представляет собой график сообщений std_msgs/Float64, которые сообщают ПИД-регулятору желаемое значение, до которого должен управляться сервопривод. Узел в этом примере изменяет уставку между 1,0 и -1,0 каждые 5 секунд.
  • /state/data — график сообщений std_msgs/Float64, поступающих на ПИД-регулятор из управляемой системы; в данном случае имитация сервопривода.
  • /control_effort/data представляет собой график сообщений std_msgs/Float64, которые выводятся ПИД-регулятором и которые применяют корректирующую силу к управляемой системе; в данном случае напряжение на имитируемом сервоприводе.

/setpoint, /state и /control operation — это имена разделов по умолчанию, на которые ПИД-регулятор подписывается и публикует. Их можно изменить, чтобы поддерживать несколько узлов ПИД-регулятора, используя стандартные методы ROS, такие как переназначение, или, альтернативно, с параметрами.

Запустить «rqt_graph». Откроется окно, показывающее узлы в этой симуляции.

Узел setpoint_node публикует свою изменяющуюся во времени уставку для ПИД-регулятора, работающего в узле /left_wheel_pid, который применяет корректировки через тему /control_effort к servo_sim_node. Узел servo_sim_node публикует текущее значение смоделированного положения сервопривода в теме /state, на которую подписывается ПИД-регулятор и на которой основано его усилие управления.

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

Servo_sim.launch также открывает окно rqt_reconfigure:

Нажмите на запись «left_wheel_pid», чтобы отобразить элементы управления, позволяющие динамически перенастраивать параметры Kp, Ki и Kd: пропорциональный ПИД-регулятор, интегральный и производные вклады в /control_effort. У каждого параметра есть раскрывающаяся шкала, которая позволяет вам выбрать степень 10 диапазона ползунка, и ползунок, который позволяет вам установить параметр в диапазоне от -1,0 до +1,0, умноженного на шкалу. Например. если вы установите для раскрывающегося списка Kp_scale значение scale_10, а для ползунка Kp значение 0,5, параметр Kp, используемый контроллером, будет равен 5,9.0005

Попробуйте перетащить ползунок Kd в положение 0, наблюдая за дисплеем rqt_plot. Вы увидите, что значение /control_effort насыщается при параметризованном пределе 10, а также некоторое превышение в /state, которое представляет превышение положения сервопривода.

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

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

Автонастройка

Во время работы servo_sim.launch можно запустить автонастройку Циглера-Николса. Он вычисляет приемлемые значения Kp, Ki и Kd, циклически перебирая диапазон значений Kp и записывая колебания. Я бы не стал использовать это на оборудовании! Метод ZN направлен на быстрое время отклика и обычно приводит к значительному перерегулированию. Для запуска:

 $ rosrun pid autotune 

Если вы хотите настроить автонастройку для своего приложения, необходимо изменить следующие значения в autotune.cpp:

  • nameSpc = «/left_wheel_pid/» (может быть пустым, если вы только запускаете 1 ПИД-регулятор)
  • numLoops (отрегулируйте, как долго автонастройщик наблюдает за объектом для каждого Kp, который он пытается)
  • Kp_min, Kp_max, Kp_step (определение диапазона значений Kp для поиска)

Узел контроллера

Узел контроллера является основным узлом в пакете. Он реализует алгоритм PID и применяет усилие управления, чтобы попытаться сделать состояние установки равным заданному значению.

Темы

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

  • уставка: Контроллер подписывается на эту тему и читает сообщения std_msgs/Float64. Элемент данных сообщения должен содержать желаемое значение измерения состояния контролируемого процесса. 9Состояние 0018
  • : Контроллер подписывается на эту тему и читает сообщения std_msgs/Float64. Элемент данных сообщения должен содержать текущее значение свойства контролируемой установки. Контроллер публикует сообщения std_msgs/Float64 в теме control_effort каждый раз, когда он получает сообщение в теме состояния. Таким образом, скорость, с которой объект публикует состояние, определяет скорость цикла управления — объект должен публиковать состояние с желаемой скоростью цикла.
  • control_effort: Элемент данных сообщения control_effort содержит управляющее усилие, которое должно быть применено к процессу, чтобы привести состояние/данные к равным заданному значению/данным.
  • pid_enable: контроллер подписывается на эту тему и читает сообщения std_msgs/Bool. Элемент данных отключает контроллер, если значение false: контроллер прекращает публикацию control_effort и сохраняет интеграл ошибки равным 0. Значение true снова включает контроллер. Название этой темы можно изменить в файле запуска, если у вас несколько ПИД-регуляторов.
  • pid_debug: публикует массив, который может быть полезен для отладки или настройки. Массив содержит пять чисел: состояние станции, усилие управления, пропорциональный вклад, интегральный вклад, производный вклад

Параметры

При запуске узла считываются следующие личные параметры узла:

  • Kp, Ki, Kd: Значения, используемые для пропорционального, интегрального и производного усиления. Эти значения используются узлом, если они не переопределены динамической реконфигурацией. Kp, Ki и Kd должны иметь одинаковый знак! Используйте все положительные значения для контуров прямого действия (где увеличение усилия управления приводит к увеличению состояния). Используйте все отрицательные значения для циклов обратного действия (где увеличение усилия управления приводит к уменьшению состояния). По умолчанию 1,0, 0 и 0 для Kp, Ki и Kd.

  • upper_limit, lower_limit: максимальный и минимальный пределы для control_effort. По умолчанию 1000, -1000.
  • windup_limit: Максимальный предел интеграла ошибок. Значение по умолчанию — 1000.
  • частота_отсечки: Частота среза фильтра нижних частот на производной (в Гц). Значение по умолчанию составляет 1/4 частоты дискретизации.
  • theme_from_controller: имя темы, в которой будет опубликовано control_effort. Завод должен подписаться на эту тему. По умолчанию «control_effort».
  • тема_от_завода: имя раздела, на которое контроллер подписывается для получения обновлений от завода. Значение по умолчанию — «состояние».
  • setpoint_topic: Название раздела, на которое подписывается контроллер для обновлений до желаемого значения состояния установки. По умолчанию «установленное значение».
  • имя_узла: имя, присвоенное запускаемому узлу. Значение по умолчанию, если не указано иное, — «pid_node».
  • max_loop_frequency, min_loop_frequency: максимальная и минимальная ожидаемая частота, при которой объект выдает сообщения о состоянии, а контур управления работает и генерирует control_effort. Частота управляется скоростью, с которой объект публикует состояние. Это может быть полезно для обнаружения отказа узла или датчика. Значения по умолчанию произвольные: минимум 1 Гц, максимум 1000 Гц.
  • pid_enable_topic: Название раздела, в котором публикуется логическое значение для включения/выключения ПИД-регулятора. Это можно изменить, если имеется несколько ПИД-регуляторов. Значение по умолчанию — «pid_enable».
  • angle_error: установите для этого логического значения значение «истина», если состояние представляет собой потенциально прерывистое измерение угловой ошибки. Он будет поддерживать угловую ошибку между -pi:pi или -180:180. Значение по умолчанию — «ложь».
  • angle_wrap: Относится к angular_error. Помогает поддерживать угловую ошибку (в радианах) между -pi:pi. Можно установить значение 2,0*180,0 для измерения градусов. По умолчанию «2.0*3.14159.»
  • setpoint_timeout: Параметр тайм-аута уставки, чтобы определить, как долго публиковать сообщения control_effort после последнего сообщения об уставке. -1 указывает на неограниченную публикацию, а положительное число устанавливает тайм-аут в секундах

Как использовать функции контроллера

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

Конфигурирование с параметрами, частными для узла

Контроллер ПИД-регулятора интенсивно использует параметры для установки своих рабочих характеристик. файл запуска или задокументированный здесь синтаксис параметра rosrun для установки параметров из командной строки.0005

Следующий фрагмент файла запуска показывает, как запустить узел и установить его параметры из файла запуска.

 
      
      
      
      
      
      
      
      
     

Динамическая реконфигурация

 rosrun rqt_reconfigure rqt_reconfigure 

Узлы pid будут отображаться на левой панели. Выберите любой из узлов, и его элементы управления реконфигурацией Kp, Ki и Kd будут отображаться на главной панели. Настройте каждый контроллер по мере необходимости.

Поддержка нескольких контроллеров (с примером)

Любой реальный робот, скорее всего, будет иметь несколько контуров ПИД-регулятора и, вероятно, реализует несколько узлов контроллера. Проблемы, которые нужно решить:

  • Каждый контроллер должен подписаться на тему состояния предприятия из назначенного ему завода
  • Каждый контроллер должен публиковаться в отдельной теме control_effort, чтобы управлять назначенным ему предприятием.
  • Несколько контроллеров могут подписаться на разные или на одну и ту же тему уставки

ROS обеспечивает два способа поддержки этой потребности в подключении узлов контроллера к разным именам тем, а узел pid-контроллера предоставляет третий:

  1. Поместите каждый узел контроллера в его собственное пространство имен (возможно, вместе с его растением). Затем к именам тем контроллеров добавляется префикс пространства имен. Книга «Нежное введение в ROS» Джейсона О’Кейна, глава 6, раздел 6.3, описывает технику и дает примеры.

  2. Переназначить имена тем таким образом, чтобы имя темы, которое публикует или на которую подписывается каждый контроллер, было переназначено на что-то подходящее. См. «Нежное введение в ROS», глава 6, раздел 6.4, где приведены пояснения с примерами.

  3. Сообщите ПИД-регулятору, какие разделы публиковать/подписываться с помощью параметров. Этот метод специфичен для pid-контроллера — см. раздел параметров.
Пример

Roslaunch Пример pid Differential_Drive_sim.launch. Файл запуска запускает две пары контроллер/объект, имитируя левый и правый приводные двигатели и контроллеры робота с дифференциальным приводом. Как это иногда бывает, одному колесу нужно положительное напряжение, чтобы двигать робота вперед, а другому нужно отрицательное напряжение (чтобы повернуть колесо в другую сторону), чтобы двигать робота вперед.

На рисунке ниже показан граф узлов.

Каждый контроллер и связанная с ним симуляция предприятия помещены в отдельное пространство имен, обозначенное как «left_wheel» и «right_wheel». См. свойство «ns=left/right_wheel» в элементах узла. Поскольку имена тем по умолчанию, используемые контроллером и растением, являются относительными именами, ROS добавил их пространства имен к путям имен тем, и, таким образом, каждый узел контроллера подключен только к правильному узлу предприятия.

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

Фрагмент файла запуска, показанный ниже, создает экземпляры двух узлов и их объектов, правильно соединяя темы с использованием методов проталкивания вниз и переназначения. Свойство «ns» помещает контроллер вниз в пространство имен. Элемент remap переназначает тему узла /namespace/setpoint на глобальную тему /setpoint.

 
      
      
      
      
      
      
      
      
      
      
     
    
      
    
    
      
       0" />
      
      
      
      
      
      
      
      
     
    
      
      
     

График результирующей симуляции с двумя контроллерами показан ниже. Примечание: параметры Kp, Ki и Kd намеренно немного отличаются для каждого моделируемого колеса, чтобы различать графики.

Поддержка обратного действия

В приведенном выше фрагменте файла запуска Kp, Ki, Kd все положительные в контроллере left_wheel и все отрицательные в контроллере right_wheel. Это приводит к тому, что контроллер правого колеса выдает сигнал control_effort, полярность которого противоположна ошибке.

Авто/Ручной

Ручное управление означает, что ПИД-регулятор прекращает публиковать сообщения control_effort, а интеграл ошибки равен нулю. Автоматическое управление означает, что контроллер применяет control_effort для уменьшения разницы между уставкой и состоянием. Контроллер запускается в автоматическом режиме. Отправьте контроллеру сообщение std_msgs/Bool с набором данных false, чтобы перевести его в ручной режим. Сообщение с набором данных true возвращает его в автоматический режим. Контроллер прослушивает тему pid_enable. При необходимости переназначьте его, чтобы перевести отдельные контроллеры или их группы в ручной или автоматический режим.

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

Моделирование быстрее, чем на настенных часах

Узел контроллера (и другие узлы в пакете pid) предназначены для поддержки запуска симуляций быстрее, чем на настенных часах, используя для этого стандартную поддержку ROS. Установив значение параметра «use_sim_time» в значение true, roscpp следит за временем, чтобы увеличить время, как указано в новых значениях времени, опубликованных в теме /clock.

Контроллер ожидает, пока время не станет ненулевым, прежде чем начать работу. После этого его вызовы примитивов времени, таких как ros::Rate::sleep(), будут действовать на основе опубликованного времени, а не системного времени.

Пример

Roslaunch pid sim_time.launch — запускает моделирование контура управления быстрее, чем настенные часы. Откроется окно rqt_plot, показывающее смоделированный контур регулирования температуры в действии. Посмотрите на шкалу времени — она работает в 4 раза быстрее.

Это достигается следующими операторами файла запуска:

 
        
      
     

Установка глобального параметра «use_sim_time» в значение true вызывает roscpp и rospy (которые все узлы используют для служб времени ros, таких как Duration, ros::Time::now() и ros::Rate::sleep( )) вести себя так, как будто время идет в соответствии с маркерами времени, опубликованными в теме /clock, а не по времени настенных часов.

Узел sim_time публикует маркеры времени в разделе /clock с шагом 10 мс со скоростью, заданной параметром sim_speedup. Этот файл запуска запрашивает sim_speedup, равный 4, поэтому он будет публиковать приращение времени на 10 мс каждые 2,5 мс времени настенных часов. Примечание: время моделирования может также работать медленнее, чем настенные часы.

Другие узлы

Пакет pid содержит несколько других узлов, поддерживающих файлы запуска демо:

  • setpoint_node. Публикует значение уставки, которое меняется от +1 до -1 каждые 5 секунд
  • завод_узел. Подписывается на control_effort и публикует состояние. Имитирует объект первого или второго порядка (по выбору). Параметры:
    • plant_order: 1 или 2 выбирает завод первого или второго порядка. По умолчанию: 1
    • reverse_acting: true, чтобы вызвать увеличение усилия управления для уменьшения состояния. По умолчанию: false
  • узел sim_time. Публикует 10-миллисекундные приращения времени в теме /clock. Параметр:
    • sim_speedup: Делитель для задержки времени настенных часов между генерацией приращений времени 10 мс. По умолчанию: 1

Фильтрация

Фильтрация важна для устранения шума в цифровых сигналах, особенно при дифференциации. На следующем снимке экрана (Николас Пейн, 2012 г.) показана зашумленная вторая производная, когда сигнал не фильтруется. Частота среза по умолчанию (1/4 частоты дискретизации) должна подойти для большинства приложений. Если вы предпочитаете вообще не фильтровать сигнал, просто установите очень высокую частоту среза (например, 10 000).

Известные проблемы

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

Отправить вопросы сюда

Отправить вопросы сюда: проблемы с битбакетом

Век мощного ПИД-управления

Главный блогер, лидер отдела социального маркетинга

История пропорционально-интегрально-дифференциального (ПИД) регулирования уходит вглубь веков, но, согласно статье в Википедии, ПИД-регулятор был формализован в 1922.

…мы теперь называем ПИД-регулирование или трехчленное управление, впервые было разработано с использованием теоретического анализа русским американским инженером Николасом Минорским. [9]  Минорски исследовал и проектировал автоматическое рулевое управление кораблем для ВМС США и основывал свой анализ на наблюдениях рулевого. Он отметил, что рулевой управлял кораблем, основываясь не только на текущей ошибке курса, но и на прошлой ошибке, а также на текущей скорости изменения; [10]  это было затем подвергнуто математической обработке Минорским. [4]  Его целью была стабильность, а не общий контроль, что значительно упростило задачу. В то время как пропорциональное управление обеспечивало устойчивость к небольшим возмущениям, его было недостаточно для работы с устойчивыми возмущениями, особенно с сильным штормом (из-за установившейся ошибки), что требовало добавления интегрального члена. Наконец, производный член был добавлен для улучшения стабильности и контроля.

Итак, теперь, столетие спустя, я хотел осветить серию из 5 статей на ControlGlobal.com, написанную членом Зала славы автоматизации процессов Грегом Макмилланом «Раскрытие скрытого PID».

  • Раскрытие скрытого PID, часть 1 – комитет ISA 5.9 направлен на уточнение и продвижение возможностей PID с помощью технического отчета
  • Раскрытие скрытого PID, часть 2 – Пять ключевых информационных целей технического отчета ISA 5.9
  • Раскрытие скрытого ПИД-регулятора, часть 3. Как контроллеры с двумя степенями свободы оптимизируют отклик уставки и минимизируют влияние возмущений нагрузки
  • Раскрытие скрытого PID, часть 4. Понимание тонкостей PID для улучшения и оптимизации производительности контура и процесса
  • Раскрытие скрытого PID, часть 5. Интервью с Ямей Ченом и Чери Хаармейер о практических вопросах претворения в жизнь технического отчета ISA, а также с Джеймсом Биллом о некоторых ключевых преимуществах отчета

В части 1 Грег отметил, как легенда автоматизации процессов Грег Шински:

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

Грег объяснил, что с помощью отчета «Алгоритмы и производительность контроллера ISA5.9» и своих многочисленных книг он стремился:

…сохранить свое наследие [Шински] через мои публикации и сообщество автоматизации через его техническое общество, сочиняющее и выдача развернутого технического отчета.

Я не буду пересказывать всю серию из 5 частей, но приведу пример того, чему вы можете научиться.

Показатели ПИД-регулятора особенно зависят от типа реакции процесса и ухудшаются из-за увеличения времени простоя. Основными типами реакции процесса являются саморегулирующаяся, интегрирующая и неконтролируемая. Реакция разомкнутого контура саморегулирующегося процесса достигнет установившегося состояния для заданного изменения выходного сигнала ПИД-регулятора при условии отсутствия помех во время испытания. В приближении первого порядка плюс мертвое время (FOPDT) отклик характеризуется общим мертвым временем контура (Θo), постоянной времени разомкнутого контура (Τo) и коэффициентом усиления саморегулирующегося процесса разомкнутого контура (Ko). . Если общее время простоя контура намного превышает постоянную времени без обратной связи, процесс классифицируется как процесс с доминирующим временем простоя. Если общее мертвое время контура примерно равно постоянной времени без обратной связи, процесс называется сбалансированным. Если общее мертвое время контура намного меньше, чем постоянная времени без обратной связи, процесс называется доминирующим запаздыванием и, возможно, классифицируется как почти интегрирующий. Реакция разомкнутого контура истинного интегрирующего процесса представляет собой рампу без устойчивого состояния. В приближении FOPDT отклик характеризуется временем простоя полного контура и коэффициентом усиления процесса интегрирования без обратной связи (Ki). Реакция разомкнутого контура неуправляемого процесса представляет собой ускоряющую переменную процесса (PV) без устойчивого состояния. В приближении FOPDT отклик характеризуется временем простоя полного контура, постоянной времени положительной обратной связи (Τo’) и усилением процесса разгона без обратной связи (Ko’). Часто вторичная постоянная времени (Τs) включается в идентификацию истинных интегрирующих и неуправляемых откликов процесса из-за ее резкого влияния на производительность и преимущества компенсации за счет изменения скорости. Нижние индексы «p» обозначают процесс, «o» обозначает разомкнутый контур, «i» обозначает интегрирующее действие, «d» обозначает производное действие, «v» обозначает клапан или частотно-регулируемый привод, «m» обозначает измерение и «a» обозначает анализатор.

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

Популярные сообщения

Комментарии

Главный консультант

Поделись этим:
Похожие посты

Следуй за нами

Мы приглашаем вас подписаться на нас в Facebook, LinkedIn, Twitter и YouTube, чтобы быть в курсе всех последних новостей, событий и инноваций, которые помогут вам решать самые сложные задачи.

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

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