Создание собственной системы стабилизации

alexmos
SergDoc:

нее… мпу я изменять не собираюсь))) разве что только с adxrs )))

А какой из MPU?
Я слышал мнение, что самый продвинутые сенсоры у Frescale, по датащиту так и есть. Кто-нибудь сравнивал с MPU6500 и гирами от ST?

rual
alexeykozin:

наверное лучше нарисовать .

Картинку приложил, взята из неплохой методички kafpson.kpi.ua/bins1.pdf
Красным выделена как раз схема коррекции положения от ГНСС, а ты Алексей, как я понял говорил про блок 5, тот что осредняет смещение осей акселя, включая g.

При этом сигналы скорости и радиус вектор, которые входят в блок 2 влияют на вычисление ориентации.

alexeykozin:

по идее ахрс может определять положение координат для инс а линейные и центрифугальные ускорения могут исправлять горизонт в ахрс

Да, если АХРС представляет собой только угловой интегратор сигналов с гиры, я же не хочу разделять ахрс и инс, ибо там много взаимосвязей, и для меня это идеологически единая система, а ахрс и инс это только выходные функции ориентации и кинематики соответсвенно. Чистая ахрс дает истинную ориентацию только ограниченное время или длительно в состоянии покоя.

alexeykozin:

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

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

alexeykozin:

кроме того коэфициент коррекции гироскопа горизонта от “акселя” регулируется коэфициентом
собственно к вектору акселя логично сумировать горизонтальные ускорения для вычисления “надира” и уже к этому надиру тянуть горизонт.

Да, всё верно.

SergDoc
alexmos:

А какой из MPU? Я слышал мнение, что самый продвинутые сенсоры у Frescale, по датащиту так и есть. Кто-нибудь сравнивал с MPU6500 и гирами от ST?

6500 он же 9250-9255 (компАс в расчёт не берём), 6000 - как бы он не был хорош но устаревает, корпус большой и у 6500 - 9255, как уже говорил фильтры дус и акселей раздельные…
Freescale - это который в кролике, mma-чего-то там - 12-14 битные аксели для иму зажатые фильтрами может и да но не для ins, немцы вон до сих пор летают на аналоговом от ST, но у них ДУС-ы на несколько порядков лучше, но покупать 1 по цене всего моего контроллера (а их нужно 3) как-то страшновато))) можно конечно так: docs.google.com/spreadsheets/d/…/pubhtml но это уже совсем другая история (

alexmos:

Кто-нибудь сравнивал с MPU6500 и гирами от ST?

примерно одинаково, а вот с акселями ST как-то накосячили (но не со всеми - аналоговые работают хорошо, значит в обработке и фильтрации напортачили), компасы тоже ничего - можно сказать содраны с HMC

rual:

Да, всё верно.

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

alexeykozin

мануал и схему буду тщательно изучать, сходу проникнуться неполучилось.

Тимур облетывает мои эксперименты по построению инерциалки (за что ему преогромнейшее спасибо)
вот что он обнаружил - что достаточно спокойное поведение при входе в удержание позиции из нулевой скорости
но очень плохой эффект если в режиме удержания позиции попробовать разогнаться и резко тормознуть - начинается раскачка.
мои наблюдения таковы- у данной системы есть частота собственных колебаний!
причем ка не меняй коэфициенты притяжки частота меняется мало.
приблизительная частота 1/5 герца . тоесть цикл за 5 секунд.

идея в том что неспроста в родном арду коде хранится история ошибки учитывающая задержку жпс данных.
чтто получается - у меня идет подтяг к отстающей позиции жпс (как минимум переодически ошибка сотсавляет 0,2 сек т.к. используется частота обновления жпс 5 гц) при этом подтяг к устаревшей позиции приводит к нарастанию обратной скорости инав, за это время жпс дает отставшие данные по позиции “вперед” но коптер уже удетел назад и подтяг начинает обратную работу - отсюда источник раскачки…

пока не разобрался в принципе работы интегратора Александра Русакова, возможно он и позвляет корректировать позицию не к чистым жпс данным а к данным жпс + краткосрочный прогноз инав за короткое время определенное временем задержки данных жпс модуля.
поскольку основное свойство инерциалки - достоверность результата обратно пропорциональна времени измерения,
т.е. гипербола где по оси икс время а по игреку - достоверность.
поскольку за короткое время задержки жпс данных данные инерциалки не успеют устареть то думаю попробовать такой вариант подтяга

вместо
инав_позиция = инав_позиция * 0.998 + жпс_позиция * 0.002

на
инав_позиция = инав_позиция * 0.998 + (жпс_позиция + прогноз_инав_за_время_задержки_жпс) * 0.002

аналогично со скоростью
пока вопрос в выборе незатратного алгоритма.
решение в лоб - сохранять ускорения и dt в массиве,
считать прогноз за константу времени задержки жпс (константу определить экспериментально)
т.е
суммировать ускорения из массива истории пока DT не достигнет времени задежки жпс
дельта позиция = at**2
дельта скорость = at
но имхо просядет производительность

SergDoc
alexeykozin:

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

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

alexeykozin

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

SergDoc

Амортизатором служит только дифференциальная часть - всё остальное это по сути управление… Так вот вернёмся к КУК-у там как раз угловая скорость служит пропорцией угол- интегральной составляющей - развивая дальше мысль, можно пересмотреть пид для инерциалки, где скорость будет служить пропорцией, путь - интегральной составляющей, а ускорение дифференциальной! Главное в этом то, что нет лишних интеграторов!

alexeykozin

ИМХО
если говорить о “идеальной инерциалке” должны быть не P I D смешивания датчиков а коэфициенты к лагам компонетов системы.
к примеру знаем что жпс запаздывает на 0,1 или 0,2 сек и компенсируем это
знаем скорость деградации инерциальной скорости по времени - принимаем ее изменения в пропорции с достоверностью

безусловно пиды. втч с ОС нужны, с тем чтобы скомпенсировать собственные погрешности датчиков но как бы фиксированный лаг жпс перекрывать пидом тоже как то неразумно

SergDoc

лаг ЖПС у тебя перекрывается уже здесь: инав_позиция = инав_позиция * 0.998 + жпс_позиция * 0.002 и служит это дело для долгосрочной коррекции “уплывания” интегратора и совершенно пофиг, что оно лагает пока ЖПС “доплывёт” до пределов способных существенно влиять на интегратор - оно усреднится так, что мама не горюй… короче показания будут правдоподобны…

rual
SergDoc:

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

Вот, золотые слова!

alexeykozin:

знаем скорость деградации инерциальной скорости по времени - принимаем ее изменения в пропорции с достоверностью

Как раз “угадывающие” фильтры с этим борятся, экстраполируя первообразные из производных, полученных с “быстрых” датчиков (ускорение, угловая сскорость/ускорение), подбирают коэффициенты экстраполятора по результатам сравнения с “медленными” датчиками абсолютных величин (скрость, путь, высота). В ПИДе экстраполятором является компонент И, демпфером Д.

alexeykozin
SergDoc:

лаг ЖПС у тебя перекрывается уже здесь: инав_позиция = инав_позиция * 0.998 + жпс_позиция * 0.002 и служит это дело для долгосрочной коррекции “уплывания” интегратора и совершенно пофиг

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

rual
alexeykozin:

накручен сильно то может и подпортить - позиция слишком интенсивно будет догонять жпс.
и кроме позиции еще ведь подтягивется скорость…

я вчера писал про демпфер по дельте ошибки, он притормозит проскок равновесия. В этом кстати причина раскачки.

alexeykozin
rual:

я вчера писал про демпфер по дельте ошибки, он притормозит проскок равновесия.

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

SergejK
DChernov:

может ли быть отсутствие “коробочки” следствием неточностей в компенсации наклонов?

Может как раз с этим связаны осцилляции? Всетаки при резком оттормаживании углы меняются очень сильно.

alexeykozin
SergejK:

Может как раз с этим связаны осцилляции? Всетаки при резком оттормаживании углы меняются очень сильно.

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

SergejK

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

SergDoc

Что-то мне подсказывает, что я щас возьму всё по@ерю и начну проект с нуля - задолбало в чужой код вклинивать свои задумки, а потом мужественно искать тот-же барометр 😦
если честно пугают 2 вещи:
станция - вообще не представляю как это рисовать и общаться потом с ней
модули и драйвера - нарисовать не проблема, а как их “зацепить” и контролировать - х.з. я тут намедни hardfault поймал с SPI - наверно неделю не мог догнать, что нога cs2 = 1 не существует, есть cs1 = 0 компилятор пропустил я в отладке дооолго не мог понять что за порт у меня такой - вот такой из меня программер))) а всё потому что spi и датчики в одном файле, а процедура общения с ними в другом… короче надоело…
ладно за зиму что-нибудь накорякаю, блин да ещё под 2 железяки - ну эт не страшно обе помню, если других проблем не будет, надо ж как-то арду допиливать, а я совсем в другую степь пошел…

SergejK:

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

не ну вроде ж так все и делают)))

alexeykozin
SergDoc:

Что-то мне подсказывает, что я щас возьму всё по@ерю и начну проект с нуля - задолбало в чужой код вклинивать свои задумки, а потом мужественно искать тот-же барометр

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

SergDoc

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

alexeykozin
SergDoc:

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

это тоже проходили… анализируя чужой опыт решили сразу строить…
вот что получилось my.mail.ru/mail/kozinanatoliy/photo/138
я папе посылал эскизы - он мне обмеры и руководил там.
зы прошу прощенья за отклонение от темы

rual
alexeykozin:

зы прошу прощенья за отклонение от темы

Тоже немного отклонюсь )) Как человек мало в чем искушенный (особо в строительстве), удивлен, что сначала ставили декоративную стену, а потом внутри обкладывали пеноблоком. Дом отличный получился!

Теперь, как обещал Алексею, выложу наработки по “виртуальной лаборатории”. Вот так я это назвал )))
Вот демка, прошу прощение за качество, снято авторегистратором

для связи АП с симом использовал “прокладку” на Питоне.
Если кому интересно может сам запустить на STM32F4Discovery или F4BY. Спрашивайте, расскажу как запустить. Полётник подключается к компу через порт GPS, визуализация (тоже написанная на питоне) соединяется через USB или модемный порт. Приемник подключается по SBUS или SPPM. Прошива и питоновские скрипты в архиве.

Облако (2).zip