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

ИльяПРо
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:

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

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

SergDoc
ИльяПРо:

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

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

oleg70:

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

Как выше сказал Илья - главное правильно связать - EKF применяемый сейчас уже наверно в любом проекте кроме мультивия “отслеживает” 14-16 состояний…

ИльяПРо
oleg70:

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

ну вообще то угловые скорости влияют на ориентацию тела в глобальной СК. ориентация в свою очередь влияет на проекции локальных ускорений акселя на оси в глобальной СК. эти ускорения в глобальной СК дважды интегрируются до позиции - вот вам и связь. Мое предположение, что фильтр даже при таких неявных сложных, запутанных связях определяет коэффициенты ковариации ненулевыми, а значит связь есть. И тут есть самое волшебное - но сразу скажу, что это только предположение: При активных маневрах, можно обойтись вообще без магнитометра vis.asta об этом писал, я это только недавно понял. При активных маневрах разница показаний между ЖПС и естиматором будет корректировать курс! то есть если мы будем стоять, то дрейф будет, если жы мы двигаемся, то можно обойтись без магнитометра! Вот именно из-за того что фильтр может находить самые неочевидные, но полезные связи между переменными, его делают одним большим из 17-22 переменных состояния, а не много маленьких! Вот это самое предположение о исключении магнитометра из оценки во время движения и включения его во время зависания я хочу проверить.

oleg70
ИльяПРо:
  • вот вам и связь.

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

ИльяПРо
oleg70:

эдак можно и влажность воздуха к позиции привязать…

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

kasmirov:

Самое простое объяснение Калмана
www.bzarg.com/p/how-a-kalman-...s-in-pictures/

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

jShadow
ИльяПРо:

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

Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav

ИльяПРо
SergDoc:

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

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

jShadow:

Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav

А что в итоге хотите получить? какие цели проекта?

jShadow
ИльяПРо:

А что в итоге хотите получить? какие цели проекта?

В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.

alexmos
ИльяПРо:

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

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

ИльяПРо
alexmos:

Если все зависимости известны - скорость, ускорение, угловые скорости, все калибровки датчиков - связываются простыми формулами - то зачем тогда калман и его фишка в поиске неизвестных зависимостей?

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

alexmos:

Ещё один минус я вижу в том, что он подстраивается итеративно, т.е. требуется время, чтобы система настроилась и подорала коэффициенты… А в реальности нужно начать правильную работу сразу после включения питания.

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

jShadow:

В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.

А в конечном итоге какова цель? Заработать денег? Или просто хобби? Чем не устраивают опенсорсные прошивки?