Создание собственной системы стабилизации
Опять же, классическая формула П+И+Д, даёт вместо стабилизации какой-то расколбас.
Знаки уточни… недоруливание, переруливание… дифференциальная составляющая что тормозит или разгоняет?
Опять же, классическая формула П+И+Д, даёт вместо стабилизации какой-то расколбас.
Вот и хотелось бы узнать, в чем ошибка, какие нюансы не учтены?
Никакого расколбаса если правильно выставлены коэффициенты. Если расписать все составляющие ПИД по ролям:
П: основная составляющая, регулирующее воздействие (РВ) пропорциональна ошибке. При отклонении от заданного угла ЛА “догребает” в сторону равновесия, но если возмущающее воздействие (ВВ) продолжает действовать, например в сторону сместился ЦТ, “догрести” до нулевой ошибки у П-регулятора не получится, ибо когда ошибка уменьшиться, то и РВ уменьшиться до равенства РВ=ВВ. Соответственно ошибка перестанет уменьшаться. Для того чтобы приблизить ошибку к нулю перейдем к следующему пункту))
И: РВ пропорционально накопленной суммарной ошибке. Даже если ошибка мала, то накапливаясь в интеграторе она постепенно увеличивает значение РВ, до тех пор пока ошибка не перейдет нуль и не изменит знак на обратный. Это увеличивает точность регулятора, но способствует “расколбасу” из-за задержки реакции РВ на ошибку. Для того чтоб избежать автоколебаний переходим к следующему звену.
Д: РВ пропорционален скорости (первой производной) ошибки. Позволяет “притормозить” (демпферировать) регулятор когда он “разогнался” исправлять ошибку благодаря звену И и может проскочить равновесное положение. Также звено Д позволяет быстро парировать кроткое и сильное ВВ, например порыв ветра.
какие нюансы не учтены?
Пожалуй, лучше чем верхний пост, и не скажешь про ПИД… От себя могу только добавить, что “Д” компонента находится в определенной связке с “П” компонентой - она как бы “смягчает” влияние первой, посему надо их настраивать совместно и поэтапно (есть известная методика…) , это тоже надо учитывать…
кстати, от “И” можно в принципе вовсе отказаться…
от “И” можно в принципе вовсе отказаться…
это в идеальной системе, нужна она для наших целей…
вот дифференциальная почти линейно зависит от пропорциональной, опенпилоты в cc и cc3d её автоматом считают не вынося отдельно в настройки там только P I …
в идеальной системе (в немецких курсах) считали PD регулятор, так удавалось за доли секунды выровнять положение с заоблачными значениями пропорции и без всяких осцилляций…
Мне кажется , что необходимо ввести положительные коэф пида и отрицательные. Для перехода через ноль используем одни коэф, а при переходе ниже нуля второй набор. Поскольку инерция системы при положительном и отрицательном воздействии различна. Ну это сугубо мои наблюдения и выводы. И подбираться они должны в режиме автотюне.
Виталий, чёт я ничё не понял ))) запутаю ещё больше - то что положительно для одной - отрицательно для другой стороны )))
А если я понял правильно, то это можно сделать не в ПИД-е, а в микшере, тупо - если один мотор +1, то противоположный -0.8 …
Сергей, я имел ввиду, что инерция воздействия винтов на коптер при повышении оборотов и при понижении разная.
Имеется 2 набора пид коэфициентов. Когда (дельта)ошибка в положительной области значений, то используем первый набор,если в отрицательной области, то второй набор.
блин, так, а я про что, микшер устроен так, что увеличение с одной стороны=уменьшение с другой, я и говорю что плюс одной стороны - это минус другой… и достаточно учесть это в микшере (ну попробовать хотя бы), а не городить сложнейший регулятор…
посмотри в микшер трикоптера в базефлайте - кто-то решил и посчитал что передних движков 2 задний 1, и составил микшер, я не пересчитывал, но визуально видно, что скорость полёта вперёд значительно выше чем назад, и токи заднего мотора на много выше…
кстати, от “И” можно в принципе вовсе отказаться…
Виталий Олег, плохо прочитали пункт “и” моего поста(или я плохо написал;)).
Можно без “и”, но придётся очень точно устанавливать ЦТ коптера. Иначе получится вот что:
Имеем квадрик (“плюс” для простоты) который висит при тяге двигателей в 400 попугаев (ппг). Допустим мы подвесили на левый луч доп.груз весом 150 ппг. Соответственно, чтобы компенсировать крен, регулятор должен добавить тягу в 150 ппг. Динамику для простоты опустим, оставим пропорциональный регулятор П, с коэффициентом 1гр = 10 ппг. Отсюда получаем, что компенсирующую тягу квадрик получит только при крене в 150(ппг)/10(гр/ппг) = 15 гр. И останется с данным креном до снятия доп.нагрузки!
То есть квадрик перестанет переворачиваться влево только когда достигнет крена в 15гр, и благополучно полетит в левую сторону. Интегратор (И) же в течении нескольких dt накопит эти самые 150 ппг и создаст постоянный подпор на левый двигатель.
я имел ввиду, что инерция воздействия винтов на коптер при повышении оборотов и при понижении разная.
Имеется 2 набора пид коэфициентов.
Это уже динамика, Виталий. Я скажу более, на разных оборотах у одной и той же ВМГ разная приёмистость (способность за определенное время создать потребную тягу). Поэтому кстати при определенных конфигурациях коптеры болтает на снижении, т.к. ВМГ имеет средние обороты значительно меньше оборотов висения, и параметры ПИД не оптимальны для текущей передаточной характеристики ВМГ (приёмистости).
Тут вариант только один - адаптивный регулятор. Но это ещё сложнее - ПИД, параметрами которого управляет другой ПИД (конечный автомат, нечеткая логика ). Да и отрицательные коэффициенты тут мимо кассы, ибо если при переходе через точку равновесия сменить знак коэффициента, то РВ вместо того чтобы стать отрицательным и начать разгонять процесс обратно к точке равновесия, радостно продолжит разгоняться дальше от неё. А сам ПИД (из скольких букв он бы не состоял) потеряет своё главное свойств - перестанет быть ОТРИЦАТЕЛЬНОЙ обратной связью и превратиться в ПОЛОЖИТЕЛЬНУЮ.
упс… ошибся с адресатом 😵
Виталий, плохо прочитали пункт “и”
Это Олег )))
плохо прочитали пункт “и” моего поста
“можно” != “надо” … (😃) , в простейшем случае, для управления “ручками” вполне пойдет…
(не все же сразу хотят “летающего робота”)
Это Олег )))
да, это я (😃)
Имеем квадрик
Александр, я тут размышляю - как поудобней останавливать процесс калибровки магнитометра (?)…
Другими словами программа ищет максимумы/минимумы по осям пока мы крутим аппарат,
а как ей понять что “достаточно”… (?)
У “фантома” например непонятно, калибровка как то сама заканчивается в определенный момент (то ли по времени ограничена, то ли еще как…).
Делал с “пищалкой”, но опять городильня лишняя, а вручную как то не “феншуй”… никак не придумаю что то…
есть какие мысли ??
а как ей понять что “достаточно”… (?)
Олег, критерий совершенно простой - постоянство длины вектора магнитометра (у меня вектор нормирован к единице). Т.е. алгоритм ждёт пока за некоторый период времени длина вектора будет попадать в заданный допуск.
пока за некоторый период времени
Ну да, получается, что всё ж привязка к периоду времени необходима… Я то хотел найти некий признак без ограничения времени “кручения” аппарата, что б поиск min/max по осям сам останавливался… ограничить этот поиск каким либо значением нельзя (теряется смысл)…
Придется всеж пищалку ставить, и выключать вручную… (зато надёжно)
Я то хотел найти некий признак без ограничения времени “кручения” аппарата, что б поиск min/max по осям сам останавливался… ограничить этот поиск каким либо значением нельзя (теряется смысл)…
Дык тут нет именно “ограничения времени кручения”, задержка времени нужна алгоритму для того чтобы засекать изменения изменение длинны вектора. Если ты перестанешь крутить ЛА на время этой задержки, то перестанет меняться длина вектора, и алгоритм поймёт, что калибровку ты решил прекратить.
и алгоритм поймёт, что калибровку ты решил прекратить.
Да, именно так, всё хорошо, но есть некоторые неприятные моменты при таком подходе (проверял) :
если при “кручении” держать аппарат не параллельно/перпендикулярно вектору магнитной индукции (а он находится под углом (?) к ЗЕМЛЕ), то изменение max/min прекратится - но калибровка получится не “идеальной” (а это не наш метод 😃)
… хотя и вполне рабочей…
А я тут опенпилотовскую методику осваиваю калибровки компаса - на шару не пошло ставил примерно на глаз по осям (в смысле по сторонам света) - получил 45 градусов отклонение!!! ищу - куда же дети мой мех. компас дели - надо по нему откалиброваться… и никак не догоню термокалибровку баро и ДУС-ов, что-то я не так делаю или у меня в коде что-то не работает - короче отдельная песня…
кстати на кого бы скинуть это мероприятие, а то щас Макс придёт скажет “делом надо заниматься, девочки, делом, а развлечения потом” © )))
и параметры ПИД не оптимальны для текущей передаточной характеристики ВМГ (приёмистости).
Все еще хуже 😃) Параметры ПД(И оставим в покое) оптимальны только для определенного возмущающего воздействия. Если настроить пару ПД на импульс Х, то для импульса 2*Х регулятор говоря Вашим языком “проскочит” - т.е. перерегулирование. И соответственно наоборот.
вот тут я пытался это наглядно показать, замедлено в 10 раз
Когда то пробовал считать через mV=Ft. Но расчетные обороты моторов разбегались с истинными(еще бы 😃, а мерить реальные мне стало лень 😃 - просто сменил работу 😃
PS На всякий случай уточню. Если коптеру на луч повесить грузик с ПД - получим постоянное вращение(до неприличных углов), с П И Д наклон. Адаптацию я так ниасилил сделать. По этому в ВИЕ добавил множители на каждый мотор и настраивал в висение в горизонте без постоянного наклона с И=0. Так он себя вел на порядок лучше. Дело же не только в ЦТ - каждый китайский мотор уникален 😃)
Параметры ПД(И оставим в покое) оптимальны только для определенного возмущающего воздействия
Оптимальны - это значит обеспечивают достаточное ( входящее в окно нормы) регулирование в результате воздействия проектного (нормированного) внешнего воздействия. В нашем случае серединой этого окна является режим висения в приемлемо возмущенном воздухе.
вот тут я пытался это наглядно показать, замедлено в 10 раз
Виталий, было бы наглядно, но нужно хотя бы легенду ваших абстракций нарисовать. И было бы не плохо ещё и график во времени.
Вообще всякие регуляторы мне прививали моделировать в VisSime . Довольно удобно, просто и наглядно.
и никак не догоню термокалибровку баро и ДУС-ов
В даташитах на датчики (ms5611 не в счёт, там всё понятно) температурная компенсация по встроенному “термометру” практически не освещается… типа - “она должна быть”, а что , куда, непонятно …, приходится самому вылавливать тенденции уплывания показаний по осям… (при помощи жёнского фена, и льда из холодильника 😃)…
температурная компенсация по встроенному “термометру”
Давным-давно (в нашей голагтеке) была такая FY-21AP от фейтех… так в отличие от остальных своих поделок они зачем-то отключили калибровку гир. До +5 работала, а ниже кирдык - сумашедшее вращение. Обогревающие лампочки над гирой помню спасали. Температура с баро шла.