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

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.

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

jShadow
ИльяПРо:

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

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

ИльяПРо:

Чем не устраивают опенсорсные прошивки?

Отвечу вопросом на вопрос - что из имеющегося в природе умеет полет по точкам на контроллере за $10? INAV умеет и INAV открытый.

ИльяПРо

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

jShadow
ИльяПРо:

цели у меня немножечко другие - научиться матану

По-моему реализация фильтра Калмана вместо Альфа-Бета-Гамма фильтра вполне тянет на “научиться матану” 😁

ИльяПРо:

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

Я тоже. Велкам, как говорится. В INAV очень нужна поддержка Optical Flow и других методов навигации в локальных координатах.

alexmos
ИльяПРо:

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

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

jShadow
alexmos:

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

Я тоже так считаю. Кальман на самом деле штука линейная, если в векторе состояния нет нелинейных составляющих, Кальман их не найдет.