Как стать автором
Обновить

Разжёвываем линейно-квадратичный регулятор для управления перевёрнутым маятником

Время на прочтение 8 мин
Количество просмотров 33K
Всего голосов 36: ↑34 и ↓2 +32
Комментарии 60

Комментарии 60

О, мы такую штуку делали в МИФИ в 1994 или 95 году на АВК-6. Надо сказать, никаких энкодеров не было и в помине. Был потенциометр (положение каретки), и два концевика (максимальное отклонение маятника).
Ну, люди это делают на таймере 555 с фотодиодом, который тянется к свету :)
На аналоговой рассыпухе?
Там не рассыпуха, там именно блоки — интеграторы, сумматоры, но да, всё аналоговое, тёплое, местами (осциллоскоп) — ламповое.
Вот тут хорошо написано АВК-6
Не, мы на чем-то другом работали — на 12й кафедре была лаба с аналоговыми компами (запамятовал как звались, но выглядели не так)
Точно, оно! :)))
Красиво. Если продолжать погружаться в LQR, то для оценки скорости надо построить линейный стационарный наблюдатель (фильтр Калмана), так как это близкие родственники.
Спасибо. Именно этим я и планирую заняться, тем более, что мне интересно работать не по энкодерам, а по гироскопу/акселерометру, а текущая машинка так, для разогрева. Насколько я понимаю, Калман + LQR = LQG и используется крайне часто.
Можно и Льюбергом, там без шумов и для оценки детерминированного вектора он покошернее.
Если Вы имеете ввиду наблюдатель Люенбергера, то это тоже самое и будет.
Крутецкая штука! Интересно, насколько сложно сделать самообучающуюся систему, которая сможет работать с маятником произвольной длины и массы?
Да, можно. Более того, прямо как есть оно довольно устойчиво к изменениям параметров маятника.
да, на видео заметно, что очень хорошо держит
Не очень. Можно (со стороны теории управления) сделать адаптивную систему, а можно (со стороны computer science, сам не делал, но слышал) реализовать машинное обучение.
а с коленом маятник на два плеча? он тоже стабилизируется. У нас на кафедре Теории управления и динамики машин такое тоже делали.
На самом деле, добавить колено или даже два не так сложно математически, как дорого механически. У меня таких денег и доступа к такого уровня станкам нет.
Так и подмывает достроить эту модель до полной State Space Representation, т.е. к матрицам A и B добавить почти тривиальную матрицу C. (Cм: en.wikipedia.org/wiki/State-space_representation, вариант Continuous time-invariant). Затем перевести State Space в представление нули-полюса. Для минимально фазовой части сделать контроллер, т.е. инвертировать все нули/полюса кроме полюсов в правой полуплоскости + интегратор, конечно. Если кому интересен такой подход, то могу попробовать проделать это на выходные.
Я такое «чудо» наблюдал в году 91-ом в Мюнхенском «Немецком музее» (Deutsches Museum). (тогда еще в ФРГ).
Ваш пример очень наглядно демонстрирует «принцып» модели, но реализация — слабовата с учетом 25ти летнего «роста» технологий.
В то время у меня небыло возможности снять «сэлфи» да и фотки на «смена8м» не очень получались в тусклых помещениях музея. Но поведение их аналогового «чудо-девайса» я запомнил.
Основное отличие от Вашей реализации — маятник не имеет механического «указателя» положения. Использовалась оптическая система. Другими словами, «палка» просто висела на каретке на зубчатом ремне. А вот что было у них киллерр-фичей так это то, что эта самая палка подымалась вверх без помощи devhand-разработчика.
Ах да, к чему это я. Да к тому, что кидать свиньями по пирамидкам мы могли и на БК 0010. Теперь «гуру» реализуют все это с помощью 4-х ядерных процессоров с частотами в гигагерцы. Похвально, что люди начинают освоение столь высоких технологий с задач «как развалить сарай». Может я и перегибаю, но если так и дальше будет продолжаться еще лет 20 — провал, между понимающими и умеющими будет уже катастрофическим. И тогда ничего не останется, как покупать готовые «узлы» для решения простых задач при полном непонимании происходящего процесса.
Проходите мимо, не задерживайте движение.
Ок, тогда вопрос к тем «кто умеет»:
Почему ваша «система» в состоянии равновесия вечно «плывет то в одну то в другую сторону.
ЗЫ: Так вы свой „Союз“ никогда не посадите ;)
Вы статью пробовали читать? Там есть ответ на ваш вопрос.
Читал, а вы не пробовали разобраться как работает фокусировка лазера в CD-проигрывателе?? Может, на первый взгляд сложные вещи давно имеют простое решение? ;).
Ни в коем случае не хотел «критиковать» ваш материал а тем более проделанную работу. Но наблюдая тенденции последних десятилетий прихожу к выводу, что люди тратят силы совсем не на продуктивные вещи, скорее на реализацию давно реализованного но с помощью «расспределенных вычислений на GPU» и это при том, что аналоги работали на 8 транзисторах еще 40 лет назад.
ЗЫ: очень хороший тому пример: «задачка комивояжера» на 10-20 точек и ее решение на «водяном» компьютере.
Вы не поверите, а кто-то вообще футбол под пиво смотрит, а ведь силы и время уходят!

А вообще как мне кажется, вы не очень уловили суть происходящего. Текущая машинка — не самоцель, а лишь иллюстрация. И в частности поэтому тратить много денег на доведение её до ума у меня нет ни малейшего желания.
сокращу свои хаотичные мысли до одного тезиса:
Вы выбрали не совсем удачный инструмент для реализации хорошо разжеванной и продуманной систтемы ;).
А как бы было круто посмотреть в наше время на пример реализации такого чуда на «аналоге», сумматорах, компараторах, усилителях ПТ :).
Зы: кстати, тогда в музее меня поразило быстродествие реакции системы. При достаточно резких ударах по «палке» рукой — она отскакивала всего на 10-15 см и не падала. Длина «хода» от края до края была порядка см 80-90. Да и там не шаговики были а обычные двигатели ПТ.
Поясните пожалуйста, вы про какой инструмент и про какую систему именно?

К слову сказать, про резкий удар и отскок каретки на 10 см не верю. Или маятник весил пуд, а не 80 граммов, как у меня.
не пуд, но там был железный пруток порядка 10-12 мм в диаметре и длиной см 50-60. Явно не 80 гр :)
Как ни крути, но чтобы создать, что-то прорывное надо повторить пройденный путь.
Какой смысл критиковать увлечение? Так же можно сказать и детям, зачем вы рисуете, уже давно все нарисовано.
Другой вопрос где и как данный механизм можно применить в жизни?
Конкретно данный механизм нигде в жизни применять не надо, это чистая иллюстрация и проверка того, насколько я усвоил пройденный материал. Но в планах у меня сделать другие, которые в жизни вполне могут быть полезны. Например, мне интересно автоматическое управление мотоциклом.
«Перевёрнутый маятник» не так давно на баржу сел.
Справедливости ради, взлетел тоже перевернутый маятник.
Один только вопрос.
Просмотрев Ваши многочисленные статьи по тегом tutorial (!!!) я хотел бы получит ответ.
У Вас маятник работает (фактически) на основе изложенных в статье рассуждений и формул?

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

Вот если бы статьи были оформлены так:
1. Вот работающий маятник. с такими то и такими то параметрами и результатами. с графиками прихода в уравновешенное состояние при внешнем воздействии.
2. А вот теперь математика и моя теория, которую я использовал… (не по классике «теория правления»)
Во было бы все корректно и правильно.

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


А что с тегом не так-то?

У Вас маятник работает (фактически) на основе изложенных в статье рассуждений и формул?


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

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


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

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




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


Такие заявления неплохо бы подкреплять ссылками.
прошу прощения. Промахнулся и в основную ветку ответ написал.
А что с тегом не так-то?

Наверное я предвзят, но использовать тег «учебник» для своих личных альтернативных рассуждений и подходов к решению классической задачи считаю несколько некорректно.
Почему альтернативным, потому что управление обратным маятником — это задача решаемая в рамках теории управления.
А ее курс стандартно изучают в тех. вузах.
Вот если бы я увидел результат похожий на то что видел у других (youtube)…

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

Извините. Но Вы действительно считаете, что эта система на вашем видео с незатухающими колебаниями такого размаха — это реализация задачи маятника?! (pendulum inverted)
Я подумал, что это просто демонстрация какого то промежуточного этапа работы, не более.
С Вашим оборудованием (высокого класса) маятник должен приходить в равновесие за сек и стоять мертво!

к примеру:
https://www.youtube.com/watch?v=a4c7AwHFkT8
https://www.youtube.com/watch?v=MWJHcI7UcuE
https://www.youtube.com/watch?v=XWhGjxdug0o

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

https://geektimes.ru/company/npf_vektor/blog/274096/
Никакой магии. Классическая теория управления (3 курс).

своих личных альтернативных рассуждений и подходов к решению классической задачи


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

Извините. Но Вы действительно считаете, что эта система на вашем видео с незатухающими колебаниями такого размаха — это реализация задачи маятника?! (pendulum inverted)
Я подумал, что это просто демонстрация какого то промежуточного этапа работы, не более.
С Вашим оборудованием (высокого класса) маятник должен приходить в равновесие за сек и стоять мертво!

к примеру:
https://www.youtube.com/watch?v=a4c7AwHFkT8
https://www.youtube.com/watch?v=MWJHcI7UcuE
https://www.youtube.com/watch?v=XWhGjxdug0o


Ясно-понятно, ещё один персонаж, текст не читавший. К слову сказать, на всех ваших ссылках оборудование стоит минимум на порядок, а то и на два больше моего. И мёртвого хода, например, в их приводах нет. Я бы был вам благодарен, если бы вы сбавили спеси: вообще говоря вы обещали уточнения по местам накопления ошибки, по автоколебаниям и тому подобному. А взамен кидаетесь дерьмом.

https://geektimes.ru/company/npf_vektor/blog/274096/
Никакой магии. Классическая теория управления (3 курс).


Я не знаю, насколько вы волшебник на досуге, но при чём тут магия-то вообще?

Мда…

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

Цитата из приведенной мной ссылке. https://geektimes.ru/company/npf_vektor/blog/274096/
Профессионала в этой области. Это он конечно ехидно сказал. Но имеет право.
Кстати, из чего делаю вывод что по приведенной ссылке вы даже не ходили. Иначе поняли бы о чем я.

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

К слову сказать, на всех ваших ссылках оборудование стоит минимум на порядок, а то и на два больше моего. И мёртвого хода, например, в их приводах нет.

Похоже приведенные ссылки Вы просто не смотрели… Я специально подобрал варианты, наиболее близки по оборудованию. Но есть и примеры где народ делает и на энкодерах от мышки. И ничего… подергиваясь но выходит в 0 быстро.
То есть, имея текущую скорость (состояние системы), мы легко можем посчитать напряжение, которое нужно приложить, чтобы получить необходимое ускорение.

Концептуальная ошибка вот в этом постулате. И с этой концептуальной ошибкой Вы лучше результата, чем показанный на вашем ролике елозящую туда сюда каретку, не получите. Как раз Ваш ролик и демонстрируют эту ошибку.
И не надо пенять на люфты в редукторе и пр.
Давайте приведём полный список необходимых для этого физических величин:
•m: масса маятника
•2l: длина маятника (l — это расстояние от петли до центра масс маятника)

Вас не настораживает момент на всех видео (pendulum inverted), когда сверху накладывают дополнительный вес, меняя и центр масс и массу маятника, специально демонстрируя, что управление продолжает поддерживать маятник?
Нет? А зря…
Это вторая ошибка в выбранном Вами способе.
Ясно-понятно, ещё один персонаж, текст не читавший.

Читавший… все читавший.
Итак, как я и говорил в своей прошлой статье, у меня есть студенты, которые панически боятся математики,

Пришли ко мне за советом. А я ни бум-бум вообще в теории управления, никогда и близко не подходил.

Это цитаты из ваших же статей.

Общаться дальше просто не интересно. Советовать преподавателю почитать учебник, как то не комильфо.

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

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


Позвольте не согласиться, несколько разные задачи. В задаче удержания сервопривода сила чаще всего (локально) постоянная и не меняет знака.

Дальше, то, что вы утверждаете, что люфт не мешает, указывает на то, что вы даже не пытались решить задачу, пусть и умозрительно. Люфт вносит лаг в систему. Чтобы это прочувствовать, давайте его увеличим: если люфт эквивалентен метру положения тележки, то маятник давно упадёт, когда тележка соизволит сдвинуться с места.

Вас не настораживает момент на всех видео (pendulum inverted), когда сверху накладывают дополнительный вес, меняя и центр масс и массу маятника, специально демонстрируя, что управление продолжает поддерживать маятник?
Нет? А зря…


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

Концептуальная ошибка вот в этом постулате


Это голословное утверждение. С моей стороны я даже привёл выкладки, с вашей только пока пустой воздух.
Позвольте не согласиться, несколько разные задачи. В задаче удержания сервопривода сила чаще всего (локально) постоянная и не меняет знака

Вы серьезно? Ну хотя бы видео в той статье посмотрите, где автор именно демонстрирует то что вал двигателя остается неподвижным при знакопеременных нагрузках.
А про ЧПУ, где нужно удерживать позицию при знакопеременных нагрузках я и не говорю уж.

Поскольку в выбранной вами конструкции требуется не удержать маятник строго вертикально (гироскопа/акслерометра же нет), а удержать позицию энкодера — то это ну один в один типичная задача позиционирования вала двигателя по экодеру. И все равно, для классического алгоритма (со звеньями PID, которые вам так не нравятся), сколько промежуточных механических передач присутствует между двигателем и датчиком (энкодером).
Никто не строит мат. модели ЧПУ станка. Все гораздо проще… Не нужно усложнять.

Дальше, то, что вы утверждаете, что люфт не мешает, указывает на то, что вы даже не пытались решить задачу, пусть и умозрительно. Люфт вносит лаг в систему. Чтобы это прочувствовать, давайте его увеличим: если люфт эквивалентен метру положения тележки, то маятник давно упадёт, когда тележка соизволит сдвинуться с места.

Не надо утрировать и передергивать. Люфт редуктора. О другом люфте я и не говорил. Люфт обычного редуктора с эвольвентным профилем. Сомневаюсь что люфт у Вас больше 1-2 градусов на выходном валу (ну для самых убогих и дешевых мотор/редукторов). Это вызовет в худшем случае мелкую вибрацию около 0 удержания. Не более.

Это голословное утверждение. С моей стороны я даже привёл выкладки, с вашей только пока пустой воздух.

Вы построили мат. модель и рассчитали коэф. для ускорения/скорости и напряжения в конкретных условиях наблюдения. И почему то считаете что «посчитать именно модель для гладких кривых, приближающих реальность».
Т.е. мат модель ближе к реальности чем реальная система?!

Да изменятся в параметры (да хоть смазка загустеет, другое положение маятника даже..) и…

А в самом начале графика реальное поведение весьма непредсказуемо (трение покоя, например или на какой обмотке щетка стоит или… да все мат. моделью в принципе не предусмотреть) и будет весьма далеко от «гладкой кривой мат. модели».
А как раз именно это место (начало движения) важно для того что бы «маятник стоял как влитой».

В результате на Вашем видео я и вижу раскачку туда сюда маятника в режиме «почти упал — подхватили».
Или у Вас еще одно видео? где «ловя отклонения маятника очень маленькими движениями»

Никакой магии. Классическая теория управления (3 курс).

Справедливости ради, та теория, что использует автор с своих постах про маятник, тоже изучается на 3-4 курсе по направлению ТАУ.
Подход автора:
1. Создаем математическую модель системы и считаем что она совпадает с реальной в некотором приближении.
2. Все константы вычисляем и частично подбираем вручную (что бы наблюдаемый процесс приближался к реальному). Константы фиксированные.
3. То что выходит за рамки модели в реальном наблюдении называем «шумом» и отбрасываем.

В принципе стандартный вариант создание математической модели процесса. А что что его (этот подход) изучают не только в ТАУ — вполне нормально.

Но только в ТАУ еще и про другие вещи говорятся…

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

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

У меня нет слов… я привожу примеры (видео!) что это возможно, а мне говорят «не сможет»…
Да. В концепции автора (математическая модель с фиксированными коэф. по конкретным массам и длинам) это не может работать.

Почему она не стоит как вкопанная на нулевой позиции, ловя отклонения маятника очень маленькими движениями?

Мелкими движениями!? Ну я же вижу это видео в статье!
Это мелкие движения? Да это скорее ближе к автоколебаниям.
Интересно, сколько у автора заняло времени подобрать параметры мат. модели (и что будет если на маятник навестить грамм 10 груза, не меняя коэффициенты?

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

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

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

Но параметры мат. модели то фиксированные. Под фактический реальный мир она не подстраивается.
Т.е. один раз создали модель с каким то приближением. Проверили что в определенных (довольно узких условия эксперимента) она более менее близка к «железке» с конкретными параметрами (масса/длина и пр.).
И сказали: «Это реальность». Все. модель (программа) полностью детерминирована (конкретному параметру на входе соответствует значение на выходе).

Но обычно делают так, что бы мат модель подстраивалась динамически под реальный мир. Самый простой и классический способ — PID (из самых простых, но можно и посложней придумать исходя из модели)

Автор почему то не любит PID…
Поясните, пожалуйста, как связано PID регулирование и «подстройка» математической модели под реальный мир? Какая именно модель подо что подстраивается? Забудем пока про маятник, посмотрим на задачу управления положением ДПТ.
Ну к примеру ДПТ с энкодером (двигатель постоянного тока же имели в виду?) и мат. модель реализованная программно с неизменными коэффициентами.

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

Но эти константы получены для конкретных условий! Но при других условиях (другой массе каретки, трение покоя при старте) нужны чуть (или ничуть) другие коэфициенты. А они не меняются.

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

PID они будут корректироваться или вообще другим алгоритмом… это уже на выбор.

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

Рассмотрим, в качестве примера, именно эту статью.
По факту реализации (в программном коде):
1. На входе модели два параметра: позиция каретки и угол маятника.
3. Все параметры модели полностью заданы заранее как результат расчета по конкретным физ. параметрам (масса, длинна и пр.)
3. На выходе скорость (хотя на самом деле — это напряжение/скважность ШИМ).

Т.е. подразумевается, что скорость физическая однозначна будет соответствовать «напряжению» на двигателе (вычисленной скорости).

Но:
1. Столь упрощенная модель двигателя в реальной жизни будет работать с большой погрешностью.
2. Любое существенное изменение параметров (чашка кофе на маятнике, как на одном из видео в примера реализации обратного маятника) и в данной концепции мат. модель перестанет соответствовать.

п1. можно компенсировать двумя способами:
1. Адаптивно менять коэффициенты расчета ШИМ для заданной скорости.
2. Поддерживать скорость с PID (с существенно более высокой частотой).

п2. в данном способе решения (мат модель процесса) не решается в лоб вообще.

— Как решаются такие задачи на практике (промышленные решения) — я давал ссылку на очень полезную статью. https://geektimes.ru/company/npf_vektor/blog/274096/

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

Я неделю (вечера) потратил на эксперименты с идеей: «Не хочу подбирать коэф. PID, у меня же есть гениальная идея. Щаз сделаю модель, по которой буду выставлять ШИМ исходя из скорости». Ровно так как автору. И даже такие же графики рисовал.
Все замечательно работает на участках начиная от 3-5 мм/сек.
Но вот для меньших скоростей нет. Да еще вешаешь на каретку другой груз — вообще все меняется.
Позиционирование с заданной точностью вообще не получилось (как раз по этой причине).

Плюнул на все и вернулся к классике (PID двух звенный). Все заработало.
А после того как по совету автора статьи (https://geektimes.ru/company/npf_vektor/blog/274096/) дискретизацию увеличил, так вообще все плавно и точно стало.

Самое главное, что и по первому варианту худо бедно работало. Но вот именно, что «худо бедно».
Впрочем, свои грабли, тщательно выструганные и отполированные всегда любимые же?

Вы плохо читали мой текст. Вход: позиция, угол, скорость, угловая скорость. Выход: сила, которую необходимо приложить к каретке. Исходя из необходимой силы И уже имеющейся скорости, рассчитывается напряжение.
Да видел я, конечно, графики и формулы и программу в первую очередь.
set_speed(u*255./24.);

А какая в сущности разница? Cила и скорость в общем то однозначно взаимосвязаны.

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

В частности, мотор всегда при подаче на него определенного напряжения (ШИМ), и в определенных параметрах (текущая скорость) он будет везти себя одинаково (развивать один и тот же момент) и полностью по рассчитанным коэф.

Разве не это Ваша программа предполагает?

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

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

Вот обязательно нужно за собой последнее слово оставить :)
Для заданного dt сила и скорость однозначно связаны.
Но Вы все равно же поняли что я хотел сказать. Я же про неоднозначную связь напряжения и всех остальных значений (включая производные).

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

Ну да. практика — критерий истины. На youtube полно роликов с обратным маятником на подобном оборудовании. Есть с чем сравнивать.
Будет что продемонстрировать с исходниками программы — будет видно.
для заданного dt сила и скорость однозначно связаны.


Не согласен.

А про последнее слово: вы поймите, как выглядите со стороны: вы путаете ускорение и скорость, вы утверждаете, что ПИД подстраивает параметры, вы путаетесь в термине обратная связь и тп. Но при этом пишете крайне категорично и апломбом…
Мда…
Обвинение «путаете ускорение и скорость»… это уже за гранью добра и зла.
Оставляю на Вашей совести.

для заданного dt сила и скорость однозначно связаны


Сила — это ускорение. Какой бы ни был dt, скорость и ускорение — это не одно и то же. Скорость на вход, желаемое ускорение на выход. Связь между ними и называется управлением.
«Не хочу подбирать коэф. PID, у меня же есть гениальная идея. Щаз сделаю модель, по которой буду выставлять ШИМ исходя из скорости»

Судя по описанию, Вы пытались сделать open-loop управление, то есть по значению желаемой скорости взять из какой-то калибровочной таблицы или формулы значение управляющего сигнала, при котором эта скорость достигается. И при этом не глядя на реальную текущую скорость. Я Вас правильно понял? Если да, то, конечно, разомкнутый контур будет чувствителен к дрейфу параметров.
Разработку автора же, фактически, можно рассматривать как два контура, скорости и положения, где в каждом контуре стоит П регулятор. То есть его система замкнута по измерениям.
Судя по описанию, Вы пытались сделать open-loop управление, то есть по значению желаемой скорости взять из какой-то калибровочной таблицы или формулы значение управляющего сигнала, при котором эта скорость достигается. И при этом не глядя на реальную текущую скорость. Я Вас правильно понял? Если да, то, конечно, разомкнутый контур будет чувствителен к дрейфу параметров.

Начал с этого варианта. Потом заместил что есть существенная зависимость от начальной скорости. В результате стал использовать двумерную калибровочную таблицу (благо размер памяти STM32F103VT6 позволял. Калибровка путем 15 минут калибровочных прогонов.
От попытки аппроксимировать данные полученной калибровочной таблицы отказался почти сразу. Хоть и кривая весьма похоже была на ту, которая у автора статьи, но в самом начале была с некоторым горбом (трение покоя?).

Конечна таблица с шагом 1 mm/c — (предел определения скорости для моей конструкции) это дискретно, но не думаю, что именно это мешало.

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

Да именно так. Только я, на основе своего опыта, считаю что только пропорциональной составляющей не хватит.
Нашел обрывки записей (1.5 года назад).
ШИМ = f(текущей скорости, нужной скорости, dt), где dt — константа в 100ms
Фактически это ШИМ для нужного ускорения. функция по калибровочной таблице (с линейной апроксимацией)
калибровочная таблица с шагом ШИМ 5 (из диапазона 500-950 для полного диапазона 1000). При скважности 500/1000 = 50% двигатель вообще не стартует. 9500/1000 = 95% — предел из за выбранной схемы управления мостом на полевиках.

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

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

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

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

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

то слова бы не сказал против! Вполне нормальная исследовательская цель.

Но вот сейчас, пробежавшись по тексту статей, я такого пояснения не вижу.
Возможно пропустил…

В лифтах 9ти этажек тоже lqr работает?

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории