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

oleg70
ИльяПРо:

тот же самый фильтр Махони даст такие же результаты, если коррекцию по акселерометру сделать большой, а по магнитометру маленькой

У него (Махони) всего две настройки - Kp и Ki (вторая, как правило, не используется), а тут есть и пороги для коррекции “биасов” и раздельный Kp для акселя и мага, так что свободы уж точно больше…

ИльяПРо:

не показано долгое линейное или центростремительное ускорение,

надо проверить как динамический коэф. усиления работает, а там видно будет…

ИльяПРо

Если оставить только Kp то весь фильтр выродится в обычный альфа-бета комплиментарник, так что Ki используется. Kp надо естественно раздельный для акселя и для мага, тут иначе нельзя. Несколько сообщений назад Алексей Москаленко писал

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

Тут я с ним согласен, это обычный комплиментарник, динамический коэффициент не рабочая идея.

jShadow
oleg70:

У него (Махони) всего две настройки - Kp и Ki (вторая, как правило, не используется), а тут есть и пороги для коррекции “биасов” и раздельный Kp для акселя и мага, так что свободы уж точно больше…

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

oleg70:

надо проверить как динамический коэф. усиления работает, а там видно будет…

Динамический Kp ИМХО идея дохлая, пробовал, заметных улучшений нет.

rual
jShadow:

Динамический Kp ИМХО идея дохлая, пробовал, заметных улучшений нет.

Не уверен, тут весьма важны правильные критерии этого самого подбора Kp.

alexeykozin
oleg70:

всё работает как на видео

неправильный на видео кальман
в ардукоптере 3.3 и старше если подносишь магнит то компас исключается из решения задачи и не влияет на ориентацию

oleg70
rual:

тут весьма важны правильные критерии

Согласен полностью …, например в данном случае авторы берут текущую длину магнитного вектора (?) и сравнивают ее с длиной вектора гравитации (?)… типа так: error=(m_vect - g_Kvect)/g_Kvect и по этой ошибке уже изменяют Kp…
У меня непонятки полные пока на этот счет, g_Kvect у них = 9.8 м/сек указан (константа), ну и как можно (а главное зачем) сравнивать несравнимые вещи ?
Что это за критерий такой, не пойму, может кто просвятит ?

ИльяПРо

Разобрался в некоторой степени со знаменитым фильтром Калмана.
Я бы выделил несколько ключевых “фокусов” алгоритма.
Магия Калмана заключается в нахождении нескольких матриц ковариации (они завуалированы в выражениях стандартного Калмана).
Первая считает ковариацию( меру похожести или линейной зависимости между двумя величинами) между переменными вектора состояния. А это приводит к очень интересной магии, а именно, если задать некоторые зависимости(можно довольно сложные) между переменными, фильтр их статистически обнаружит и использует для своих корыстных целей (минимизации квадрата ошибки вектора состояния). Простой пример - Вектор состояния (X) состоит из позиции и скорости, матрица преобразования (A) преобразует вектор состояния таким образом - скорость сейчас равна скорости в прошлый момент времени, а позиция равна позиции в прошлый момент времени ПЛЮС скорость. Наблюдая только позицию можно предсказать скорость!!! то есть мы нигде не писали, что скорость - это дифференциал по времени, фильтр выяснил это СТАТИСТИЧЕСКИ. В перспективе фильтр может оценить очень сложные аналитические зависимости, тем самым делая работу за разработчика. Главное связать переменные. То есть фильтр может оценивать как наблюдаемые переменные, так и ненаблюдаемые!!
Вторая матрица ковариации оценивает зависимость между вектором состояния и показаниями датчика . По сути она определяет коэффициент Калмана. Но у нее есть одно неочевидное свойство - отбраковывать левые показания! то есть если датчик показывает какие-то левые данные, ковариация между ними и вектором состояния уменьшится и коэффициент соответственно тоже уменьшится.
В итоге имеем то, что у нас есть автоматически адаптивный коэффициент влияния и неявные зависимости между переменными.
Последнее свойство кстати используется для определения параметров (parametr estimation), а это наталкивает на определенные мысли о адаптивном управлении, где система управляет объектом, определяя его параметры динамически, соответственно подстраиваясь под изменения (Dual estimation Kalman filter).
Теперь самое интересное - почти всегда вместо матриц A и H используются нелинейные уравнения, что приводит к тому что их приходится линеаризовывать каждый раз в окрестности данного вектора состояния, чтобы определить искомые оценки ковариаций и мат. ожиданий. Линеаризация обычно происходит разложенением в ряд Тейлора, по просту дифференцированием. Это порождает кучу проблем (не все можно дифференцировать, точность не всегда достаточно) которые приводят к неустойчивости фильтра, вследствие заниженной оценки шума. Так вот придумали новый метод оценки ковариации и мат ожидания вектора состояния с нелинейными уравнениями, называется UT (Uncsented transform). Кратко - мы просто берем несколько точек в окрестности нашей оценки и прогоняем через нелинейные уравнения, находим ковариацию и мат ожидание. Метод очень крутой, используется в UKF(Uncsented Kalman Filter) устойчивость выше чем у EKF.
Собственно, скоро выложу результаты пробы UKF, результаты и выводы мне показались довольно интересными, своеобразными.
P.S. Если где то ошибся - поправляйте и дополняйте, тема очень интересная

jShadow
ИльяПРо:

Разобрался в некоторой степени со знаменитым фильтром Калмана.

Здорово! Может нам объединить усилия над проектом INAV?

oleg70
ИльяПРо:

Собственно, скоро выложу результаты пробы

А замысел то какой (касаемо нашей темы) ? в смысле - что наблюдаем , что оцениваем, что регулируем, или чего хотим добиться.?

SergejK
ИльяПРо:

Разобрался в некоторой степени со знаменитым фильтром Калмана.

А по каким материалам или учебникам разбирались?

ИльяПРо
jShadow:

Здорово! Может нам объединить усилия над проектом INAV?

Что за проект? На какой стадии? Какие цели проекта? Над чем в данный момент работаете?

А замысел то какой (касаемо нашей темы) ? в смысле - что наблюдаем , что оцениваем, что регулируем, или чего хотим добиться.?

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

SergDoc
ИльяПРо:

Простой пример - Вектор состояния (X) состоит из позиции и скорости, матрица преобразования (A) преобразует вектор состояния таким образом - скорость сейчас равна скорости в прошлый момент времени, а позиция равна позиции в прошлый момент времени ПЛЮС скорость. Наблюдая только позицию можно предсказать скорость!!!

помнится - там получается всего навсего интеграл от прошлой скорости - рассчётная позиция - матрица А - предположение (предсказание)… магия не в этом месте…

ИльяПРо
SergejK:

А по каким материалам или учебникам разбирались?

советую искать не научные публикации, а лекционные материалы для студентов, презентации в основном. После понимания основ, можно почитать публикации касательно конкретных применений, сформировать картину как оно на самом деле. Далее почитать уже конкретно о EKF, UKF. Параллельно изучая код с конкретными реализациями. Ну и попробывать самому. Сразу скажу изучать придется буржуйскую литературу. (На хабре не стоит читать имхо)
Вообщем то у меня сформировался примерно такой список по мере осваивания:

  1. ru.wikipedia.org/wiki/Фильтр_Калмана
  2. Учебный курс на Udacity.com: Artificial Intelligence for Robotics
  3. Introduction to Estimation and the Kalman Filter Hugh Durrant-Whyte Australian Centre for Field Robotics The University of Sydney - там прямо все по полочкам разложили.
  4. Касательно UKF - The Unscented Kalman Filter Barry Sherlock University of North Carolina - все очень подробно.
  5. we.easyelectronics.ru/…/sigma-tochechnyy-filtr-kal…
    6)Sigma-Point Kalman Filters for Probabilistic Inference in Dynamic State-Space Models Rudolph van der Merwe & Eric Wan - конкретные применения UKF
  6. Проект AutoQuad - очень все по-умному сделано, основательный проработанный подход. Открытый код. Собственно код я взял оттуда, само ядро фильтра универсальное, вам как разработчикам нужно только проинициализоровать, задать матрицы шумов, написать функции f(x), h(x).
  7. и всякий раз гуглить, что то непонятно - гуглить. гуглить, гулить и еще раз гуглить. Тут надо определить границу, где можно самому сделать работу, а где взять готовое и не изобретать велосипед, ведь все уже до нас изобрели, надо только поискать (ИМХО).
SergDoc:

помнится - там получается всего навсего интеграл от прошлой скорости - рассчётная позиция - матрица А - предположение (предсказание)… магия не в этом месте…

Я вас не понял вообще.

SergDoc
ИльяПРо:

Я вас не понял вообще.

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

ИльяПРо

магия не в ней я ж четко написал:

Магия Калмана заключается в нахождении нескольких матриц ковариации

Магия заключается в матрице ковариации между переменными вектора состояния Pxx, а не в матрице A( другое обозначение F) (вы говорите именно про A). Именно матрица ковариации может оценить ненаблюдаемую скорость из наблюдаемой позиции.

SergDoc
ИльяПРо:

Магия заключается в матрице ковариации между переменными вектора состояния Pxx, а не в матрице A( другое обозначение F)

ну нет там никакой магии - посмотрите из чего она состоит - единицы по главной диагонали и дельта т - выше неё - и вы её умножаете на ваш вектор из прошлых показаний…
ваши слова:

Простой пример - Вектор состояния (X) состоит из позиции и скорости, матрица преобразования (A) преобразует вектор состояния таким образом - скорость сейчас равна скорости в прошлый момент времени, а позиция равна позиции в прошлый момент времени ПЛЮС скорость. Наблюдая только позицию можно предсказать скорость!!!

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

вот где самое неудобное место: деление на матрицу (умножение на обратную) - это жестко… и каждый находит эту обратную матрицу как попало…

ИльяПРо

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

SergDoc:

ну нет там никакой магии - посмотрите из чего она состоит - единицы по главной диагонали и дельта т - выше неё - и вы её умножаете на ваш вектор из прошлых показаний…

это не та матрица.
Цитата из вики:
\textbf{P}_{k|k} — апостериорная ковариационная матрица ошибок, задающая оценку точности полученной оценки вектора состояния и включающая в себя оценку дисперсий погрешности вычисленного состояния и ковариации, показывающие выявленные взаимосвязи между параметрами состояния системы
ru.wikipedia.org/wiki/Фильтр_Калмана
в матрице ковариации - по диагонали содержаться дисперсии самих переменных вектора состояния, а в нижнем и верхнем треуголнике (матрица симметрична) ковариации(попросту коэффициенты похожести, влияния) одной переменной вектора состояния на другую.

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

oleg70
ИльяПРо:

Все то же, получение наиболее точных данных координат коптера из искаженных

А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

ИльяПРо
SergDoc:

вот где самое неудобное место: деление на матрицу (умножение на обратную) - это жестко… и каждый находит эту обратную матрицу как попало…

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

oleg70:

А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

Не правильно, можно все что угодно подпаять если правильно их связать.

SergDoc
oleg70:

а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…

а вот магия к припаять тут никакого отношения не имеет - вектор какой угодно размерности задать можно…

oleg70
ИльяПРо:

если правильно их связать.

Пытаюсь уловить самое ценное - физический смысл…
пока вот не понял (извиняюсь), как например, “правильно связать” угловые скорости и линейное положение “тела” в пространстве ?

SergDoc:

вектор какой угодно размерности задать можно…

компоненты вектора должны как то осмысленно с ним быть связаны ? или например в “вектор положения” можно включать всё что угодно ? и будет толк ?