Адаптивное управление сервомашинкой. Часть 2.

Началось все со следующей модели сервы.



Здесь, i — ток двигателя, v — скорость, x — положение, T — период дискретизации, U, R, L — напряжение источника, активное сопротивление двигателя и его индуктивность, К и E — коэффициенты BEMF двигателя, они связаны. Это простая линейная модель.


Но я тогда ещё не хотел измерять ток, в таком случае имеем только x, а надо найти все остальное. Не слишком ли много неизвестных надо определить по одной переменной? Я решил, что слишком, и упростил модель.



Здесь неизвестны только a и b. Такая модель не учитывает переходные процессы в двигателе и хорошо аппроксимирует систему только на низких частотах дискретизации, где этими переходными процессами можно пренебречь.

Изменив единицы измерения скорости и привязав их не к секундам а к периоду, можно избавиться от T в уравнениях.



Это избавление от лишнего умножения и уменьшения диапазона скоростей немного упрощает реализацию. Преобразование изменяет b, делая его больше в T раз, а т.к. T меньше единицы, то и b становится меньше.

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



После предыдущей модификации стало ясно, что можно учесть что угодно. Например постоянную силу.



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

Дальше можно записать наблюдатель, но он получается как всегда, только бумагу портить.



Здесь, z — измерение положения, x с верхним индексом u — обновленная оценка состояния, это и есть результат работы наблюдателя. Обозначения не очень удачны.



В левой и правой части разные x, рекурсии тут нет :)

Для наглядности указал примерные значения K. Для их выбора вполне можно использовать и фильтр Калмана, прогнав несколько итераций offline. Но для этого понадобится точная информация о шуме, которой нет. Поэтому все равно надо будет играться с параметрами Q и R и смотреть на результат. Проще тогда играться напрямую с K.

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

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



Как видно и сюда прокралась разность. Которая все и портит едва появляется шум.

В более общем виде такие уравнения записываются следубщим образом.





Есть два основных метода решения, градиентный и МНК.

В градиентном все просто, вытаскиваем ошибку.



Вводим функцию оценку.



Находим производные по элементам тетта.




Сам процесс адаптации это градиентный спуск.



Двойка значения не имеет, т.к. шаг h может быть любым, его выбор подобен выбору K в наблюдателе.



Я использую значения ~100e-6.

В случае МНК изменяется определение функции J.



Находим производные и приравниваем нулю.











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

Результат обоих методов был верным только в отсутствии шума измерения z. Как только добавлялся даже очень маленький шум, решение уезжало от истинного очень далеко. Другими словами система уравнений плохо обусловлена. Малое изменение в ней приводит к большому изменению решения. Что с этим делать я так и не нашел ответа. Это проблема скорее всего именно этот системы, но никак не методов.

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



Здесь e это ошибка которую использует наблюдатель. На случай четырех неизвестных.



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

Итог, вопросы все ещё есть, хотя и результат тоже.

Преред тем как бросаться кодить все это на AVR я сделал численную модель в octave. Тогда ещё использовалось релейное управление. Его то там и можно увидеть.









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



Все параметры можно найти в прицепленном файле, они довольно близки к реальным.

Почитать могу рекомендовать следующее.

[1] Ким Д. П. Теория автоматического управления. Т. 2. Много-
Многомерные, нелинейные, оптимальные и адаптивные системы: Учеб.
пособие. — М.: ФИЗМАТЛИТ, 2004. — 464 с. — ISBN 5-9221-0534-5.
[2] Квакернаак, Сиван — Линейные оптимальные системы управления
[3] www-bcf.usc.edu/~ioannou/Robust_Adaptive_Control.htm
[4] arri.uta.edu/acs/ee4314/lectures/Lecture%205.pdf
  • +2
  • 28 августа 2012, 17:10
  • amaora
  • 1
Файлы в топике: servo.m.gz

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

RSS свернуть / развернуть
За статью спасибо. Но после ее прочтения моя самооценка упала на несколько пунктов :)
+1
  • avatar
  • e_mc2
  • 28 августа 2012, 19:17
хорошо, что не на несколько десятков, как у некоторых =)
0
«Горе — от ума». (C) Грибоедов.

Не вижу особого смысла в применении высшей математики для малопредсказуемых процессов. Ну, посчитали вы теоритическую модель для одной сервы, и то с кучей допущений и непредсказуемостей. А завтра она немного под'износила редуктор, или грязь туда попала, или смазка высохла… Уж не говоря о том, что типов этих серв — сотни, а то и тысячи, разных фирм, разных размеров и усилий. От 2х граммовых на полкило, до полукилограммовых с усилием 32 кг на см. И для каждой — считать свои модели?

Когда, нормальные люди — делают прикидку по основным параметрам, выбирают в ближайшем магазине примерно подходящую (с учетом цены, тоже весьма разной), и пользуются ими… Не нравится — ставят другую. Чего их курочить — то?
Мороки много, а реальный вымгрыш — сомнителен, так как в готовом устройстве, кроме самой сервы, еще куча всякой механики, и нагрузки не всегда предсказуемы. Будь то ветровая нагрузка на модель самолета, или рука робота в разных положениях с разными захваченными предметами… Как ни считай, а все равно всего не учтешь.

Да и нет особой нужды в этом. Не ракету же в космос запускаем. Крутит, к примеру, серва камеру в роботе, — ну и пускай себе крутит, чего там с теорией заморачиваться. Все равно результат оптимизации со стороны никто не заметит. Только автор и будет знать, чего там у него насчитано. Вертеться — то будет одинаково. Вес самой камеры — грамм 20-30, усилие самой маленькой из серв — на порядок больше. Быстрей крутить — смысла нет, все равно картинка смажется… Особенно на камерах со сжатием.
+2
  • avatar
  • SWG
  • 28 августа 2012, 20:03
Видимо, он хочет китайскими сервами противоракеты наводить :)

Летать-то неплохо получается и с обычными.
0
Летать-то неплохо получается и с обычными.
Да уж…
Бешеный Шайтан-Дубина, однако. Вот бы его пилота в него засунуть…
0
Гравитация? Инерция? Не, не слышал…
0
Ну во первых, это адаптивная схема, суть именно в том, что мне и не надо знать точные данные сервы, система подстраивается сама во время работы.

Во вторых, это может дать некоторые интересные возможности. Те самые непредсказуемые нагрузки можно будет измерять, для примера. Да и простая возможность сделать хороший контроллер сервы. Не говоря уже о том, что это просто интересная задача, даже если результат нигде не понадобится.
+1
Не хочу обидеть автора, но…
В современной науке очень популярны супер-пупер синтезы, относительно хар. уравнения системы с учетом большого количества параметров и внешних воздействий… с заданием корней уравнения (биномиальное, мин.времени п.п., минимум колебательности, и т.д.… ) и когда это все начинает работать — то работает идеально!
Проблемы начинаются когда в результате работы что-то меняется… и тут наступает абзац всей системе=))
0
При правильном проектирование абзаца не наступит. Все эти изменения вносятся в систему как возможные возмущения и все компенсируется.
0
«- Мы разучились делать маленькие глупости. Мы перестали лазить в окно к любимым женщинам…»
(Тот самый Мюнхаузен)

Уважаемый SWG, при всем к Вам уважении (я говорю это абсолютно искренне) я совершенно не понимаю Вашу позицию.

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

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

Вам это все, безусловно, известно.

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

Я абсолютно не понимаю, когда в однородной среде энтузиастов появляется деление на «нормальных» и «ненормальных». Если кому-то не интересно мат. моделирование системы – это не значит, что такой подход является неправильным. Никто не заставляет Вас идти по этому пути. Каждый может найти для себя тот уровень погружения в предметную область, который ему интересен. Кто-то останавливается на детском радиоконструкторе, кто-то пытается воспроизвести технологию изготовления микросхем в домашних условиях. Каждому свое …
+3
Категорически поддерживаю, трудно сказать точнее. До Вашего уровня, или до уровня уважаемого amaora мне очень далеко, но… Такие статьи, как Ваши или его, для меня являются одним из самых значимых стимулов читать этот ресурс.
0
До уровня amaora мне тоже далеко. Но, «дорогу осилит идущий» :)
0
Когда «нормальные люди» покупают товар в ближайшем магазине, другие люди (наверное, «ненормальные») сидят и что-то проектируют, чертят схемы, паяют. Результат их работы, зачастую, недотягивает до «магазинного» аналога, а они продолжают гнуть свою линию, и радуются каждому изготовленному устройству.
Вам это все, безусловно, известно.
Естественно, известно.
Но, как правило, в разработках «для души», — наоборот идут по пути сознательного упрощения. Для рассчета большинства схем достаточно знания закона Ома и быстрого счета в уме.

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

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

Конечно, может, вам интересен сам процесс ее обсасывания, да и полученные в вузе знания матанализа куда-то же надо применить, пока окончательно не забылись… Но с точки зрения конечного результата — эффект невелик. Уж лучше бы вы робота делали. Там есть над чем голову поломать. Даже при использовании стандартных узлов и датчиков.

А так, ну, обсчитаете вы по науке эту серву. А что потом? Что это изменит? Практически — ничего. Какой бы супер-пупер алгоритм вы в нее не засунули, сделав ей свой контроллер, — на ее потребительские качества это практически не повлияет. Даже если время перекладки с одного положения в другое уменьшится на полпроцента, или еще чего…
Всегда можно будет найти другую серву, у которой этот параметр будет еще лучше, безо всякой переделки. И часто — за ту же цену… Сейчас уже этими сервами все завалено, каких только нет. На любой вкус.
0
Статья больше обучающая, а не практическая. А раз обучающая, то какая разница что тут в модели?
0
По идее да, обучающая, но по реализации она скорее глазорасширяющая)
0
Но, как правило, в разработках «для души», — наоборот идут по пути сознательного упрощения.
Все правильно, но ключевое слово здесь «для души». А у разных людей интересы и приоритеты могут быть разными.

Вы утверждаете, что тратить столько усилий на разработку сервы нерационально. Лично я с вами согласен. Но это хобби, кто сказал, что оно должно быть рациональным. Если автору нравиться «процесс ее обсасывания» — замечательно. Он не призывает всех идти по его пути, просто делится своими наработкам.

А так, ну, обсчитаете вы по науке эту серву. А что потом? Что это изменит?

Как минимум – приобретение опыта, который потом можно применить в других проектах, там где эта «наука» действительно необходима.

Уж лучше бы вы робота делали.

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

про горе от ума — это я всегда так говорю, когда простые вещи усложняют
0
я вообще забыл матан, срочно нужно флеш обновить…
0
  • avatar
  • Amigo
  • 28 августа 2012, 20:39
хорошо, если бутлоадер цел :)
0
А вот это:
[1] Ким Д. П. Теория автоматического управления. Т. 2. Много-
Многомерные, нелинейные, оптимальные и адаптивные системы: Учеб.
пособие. — М.: ФИЗМАТЛИТ, 2004. — 464 с. — ISBN 5-9221-0534-5.
[2] Квакернаак, Сиван — Линейные оптимальные системы управления
в электронном виде еззь?
0
  • avatar
  • Vga
  • 29 августа 2012, 09:32
[1] Ким Д. П. Теория автоматического управления. Т. 2. Много-
Многомерные, нелинейные, оптимальные и адаптивные системы: Учеб.
пособие. — М.: ФИЗМАТЛИТ, 2004. — 464 с. — ISBN 5-9221-0534-5. есть здесь rutracker.org/forum/viewtopic.php?t=1521411
[2] Квакернаак, Сиван — Линейные оптимальные системы управления — Недавно скачивал, но ссылка не сохранилась. Хорошо ищется в гугле.
0
[2] Квакернаак, Сиван — Линейные оптимальные системы управления — rutracker.org/forum/viewtopic.php?t=936786
0
А почему бы не применить сам фильтр Калмана? Там коэффициент Калмана рассчитывается на каждом k-м шаге по ошибке, получившейся на k-1 -м шаге, а все шумы при измерении координаты (и скорости после вычитания) можно считать случайной погрешностью и описать через СКО
0
Можно к любой подобной задаче применить скажем UKF. Надо будет только определится с набором наблюдаемых переменных и предоставить фильтру уравнения наблюдаемой системы, остальной код общий. Ну и убедится в наблюдаемости системы, это всегда надо. Вот только в этом случае может понадобится быстрый dsp вместо avr.

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

Там коэффициент Калмана рассчитывается на каждом k-м шаге по ошибке, получившейся на k-1 -м шаге
Ошибка не влияет на выбор K напрямую. Косвенно через изменение состояния, если используется нелинейная модель, да.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.