Создание собственной системы стабилизации
Простой пример - Вектор состояния (X) состоит из позиции и скорости, матрица преобразования (A) преобразует вектор состояния таким образом - скорость сейчас равна скорости в прошлый момент времени, а позиция равна позиции в прошлый момент времени ПЛЮС скорость. Наблюдая только позицию можно предсказать скорость!!!
помнится - там получается всего навсего интеграл от прошлой скорости - рассчётная позиция - матрица А - предположение (предсказание)… магия не в этом месте…
А по каким материалам или учебникам разбирались?
советую искать не научные публикации, а лекционные материалы для студентов, презентации в основном. После понимания основ, можно почитать публикации касательно конкретных применений, сформировать картину как оно на самом деле. Далее почитать уже конкретно о EKF, UKF. Параллельно изучая код с конкретными реализациями. Ну и попробывать самому. Сразу скажу изучать придется буржуйскую литературу. (На хабре не стоит читать имхо)
Вообщем то у меня сформировался примерно такой список по мере осваивания:
- ru.wikipedia.org/wiki/Фильтр_Калмана
- Учебный курс на Udacity.com: Artificial Intelligence for Robotics
- Introduction to Estimation and the Kalman Filter Hugh Durrant-Whyte Australian Centre for Field Robotics The University of Sydney - там прямо все по полочкам разложили.
- Касательно UKF - The Unscented Kalman Filter Barry Sherlock University of North Carolina - все очень подробно.
- 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 - Проект AutoQuad - очень все по-умному сделано, основательный проработанный подход. Открытый код. Собственно код я взял оттуда, само ядро фильтра универсальное, вам как разработчикам нужно только проинициализоровать, задать матрицы шумов, написать функции f(x), h(x).
- и всякий раз гуглить, что то непонятно - гуглить. гуглить, гулить и еще раз гуглить. Тут надо определить границу, где можно самому сделать работу, а где взять готовое и не изобретать велосипед, ведь все уже до нас изобрели, надо только поискать (ИМХО).
помнится - там получается всего навсего интеграл от прошлой скорости - рассчётная позиция - матрица А - предположение (предсказание)… магия не в этом месте…
Я вас не понял вообще.
Я вас не понял вообще.
Матрица экстраполяции - по сути дела большой интеграл - там интегрируется всё, что только можно - т.е. найти углы из угловых скоростей, скорости из ускорений, путь из скорости и т.д. …
далее мы получаем новые данные и их и по ним корректируем рассчётные данные, а так же исходя из разницы рассчётных и полученных данных - корректируем коэффициенты для следующей итерации…
магия не в ней я ж четко написал:
Магия Калмана заключается в нахождении нескольких матриц ковариации
Магия заключается в матрице ковариации между переменными вектора состояния Pxx, а не в матрице A( другое обозначение F) (вы говорите именно про A). Именно матрица ковариации может оценить ненаблюдаемую скорость из наблюдаемой позиции.
Магия заключается в матрице ковариации между переменными вектора состояния Pxx, а не в матрице A( другое обозначение F)
ну нет там никакой магии - посмотрите из чего она состоит - единицы по главной диагонали и дельта т - выше неё - и вы её умножаете на ваш вектор из прошлых показаний…
ваши слова:
Простой пример - Вектор состояния (X) состоит из позиции и скорости, матрица преобразования (A) преобразует вектор состояния таким образом - скорость сейчас равна скорости в прошлый момент времени, а позиция равна позиции в прошлый момент времени ПЛЮС скорость. Наблюдая только позицию можно предсказать скорость!!!
да не спорю, скорость можно найти но не дифференцируя путь, а интегрируя ускорение…
магия заключается именно в подборе коэффициентов усиления - а вот тут всё плохо…
вот где самое неудобное место: деление на матрицу (умножение на обратную) - это жестко… и каждый находит эту обратную матрицу как попало…
Нет, вы меня не поняли, у нас нет ускорения, в моем примере у нас есть только две переменные - позиция и скорость. Позицию мы измеряем датчиком - это наблюдаемая переменная, а скорость - ненаблюдаемая, фильтр оценивает ее основываясь на матрицу ковариации.
ну нет там никакой магии - посмотрите из чего она состоит - единицы по главной диагонали и дельта т - выше неё - и вы её умножаете на ваш вектор из прошлых показаний…
это не та матрица.
Цитата из вики:
\textbf{P}_{k|k} — апостериорная ковариационная матрица ошибок, задающая оценку точности полученной оценки вектора состояния и включающая в себя оценку дисперсий погрешности вычисленного состояния и ковариации, показывающие выявленные взаимосвязи между параметрами состояния системы
ru.wikipedia.org/wiki/Фильтр_Калмана
в матрице ковариации - по диагонали содержаться дисперсии самих переменных вектора состояния, а в нижнем и верхнем треуголнике (матрица симметрична) ковариации(попросту коэффициенты похожести, влияния) одной переменной вектора состояния на другую.
Коэффициент калмана подбирается в зависимости от матрицы ковариации. По простому - чем больше одна величина похожу на другую, тем больший коэффициент наблюдаемая переменная будет оказывать на ненаблюдаемую.
Все то же, получение наиболее точных данных координат коптера из искаженных
А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…
вот где самое неудобное место: деление на матрицу (умножение на обратную) - это жестко… и каждый находит эту обратную матрицу как попало…
Так давно уже есть численные методы нахождения обратной матрицы, то же разложение Холецкого или еще лучше QR разложение + транспонирование. Не вижу в этом проблему.
А именно: из GPS и акселерометра, так ?? , ДУС и магнитометр тут не подходят, а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…
Не правильно, можно все что угодно подпаять если правильно их связать.
а больше то и нет никаких, я правильно понимаю ? или “магия” настолько сильна, что можно всё что угодно “припаять”…
а вот магия к припаять тут никакого отношения не имеет - вектор какой угодно размерности задать можно…
если правильно их связать.
Пытаюсь уловить самое ценное - физический смысл…
пока вот не понял (извиняюсь), как например, “правильно связать” угловые скорости и линейное положение “тела” в пространстве ?
вектор какой угодно размерности задать можно…
компоненты вектора должны как то осмысленно с ним быть связаны ? или например в “вектор положения” можно включать всё что угодно ? и будет толк ?
Позицию мы измеряем датчиком - это наблюдаемая переменная, а скорость - ненаблюдаемая, фильтр оценивает ее основываясь на матрицу ковариации.
Тут бы я мог поспорить что мы наблюдаем, а что нет, но не буду… применительно к нашим баранам: нет у нас, допустим, ни GPS пи оптических датчиков - есть гироаксель - наблюдаемые величины - угловая скорость, угол (хоть мы его и берём с акселя но с натяжкой можно сказать, что наблюдаем) ускорение, ненаблюдаемые - скорость, путь.Так вот фильтр с лёгкостью справится только с углом, а скорость и путь будут плыть и мы с этим ничего не поделаем и через некоторое время аппарат уплывёт - не будет он знать об этом. И подводя черту - не проще ли комплиментарник сделать с изменяемыми коэффициентами в зависимости от известных нам условий?
компоненты вектора должны как то осмысленно с ним быть связаны ? или например в “вектор положения” можно включать всё что угодно ? и будет толк ?
Как выше сказал Илья - главное правильно связать - EKF применяемый сейчас уже наверно в любом проекте кроме мультивия “отслеживает” 14-16 состояний…
пока вот не понял (извиняюсь), как например, “правильно связать” угловые скорости и линейное положение “тела” в пространстве ?
ну вообще то угловые скорости влияют на ориентацию тела в глобальной СК. ориентация в свою очередь влияет на проекции локальных ускорений акселя на оси в глобальной СК. эти ускорения в глобальной СК дважды интегрируются до позиции - вот вам и связь. Мое предположение, что фильтр даже при таких неявных сложных, запутанных связях определяет коэффициенты ковариации ненулевыми, а значит связь есть. И тут есть самое волшебное - но сразу скажу, что это только предположение: При активных маневрах, можно обойтись вообще без магнитометра vis.asta об этом писал, я это только недавно понял. При активных маневрах разница показаний между ЖПС и естиматором будет корректировать курс! то есть если мы будем стоять, то дрейф будет, если жы мы двигаемся, то можно обойтись без магнитометра! Вот именно из-за того что фильтр может находить самые неочевидные, но полезные связи между переменными, его делают одним большим из 17-22 переменных состояния, а не много маленьких! Вот это самое предположение о исключении магнитометра из оценки во время движения и включения его во время зависания я хочу проверить.
- вот вам и связь.
Да, мысль понял, связь конечно есть… только вот интуитивно кажется, что вычислить то ее конечно можно, а вот “снять” с нее “полезный сигнал” - не логично… тут правда магия какая то… эдак можно и влажность воздуха к позиции привязать…
Если заработает - поверю в математику ))).
Самое простое объяснение Калмана
bzarg.com/…/how-a-kalman-filter-works-in-pictures/
эдак можно и влажность воздуха к позиции привязать…
Можно, если будет коррелляция, например поставить увлажнитель воздуха в угол комнаты, поставить на робота датчик влажности, то теоретически влажность будет коррелировать с позицией
Самое простое объяснение Калмана
www.bzarg.com/p/how-a-kalman-...s-in-pictures/
Отличный пример, тут как раз показано как определяется скорость из позиции в фазовой плоскости.
Что за проект? На какой стадии? Какие цели проекта? Над чем в данный момент работаете?
Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav
нет у нас, допустим, ни GPS пи оптических датчиков - есть гироаксель - наблюдаемые величины - угловая скорость, угол (хоть мы его и берём с акселя но с натяжкой можно сказать, что наблюдаем) ускорение, ненаблюдаемые - скорость, путь.Так вот фильтр с лёгкостью справится только с углом, а скорость и путь будут плыть и мы с этим ничего не поделаем и через некоторое время аппарат уплывёт - не будет он знать об этом. И подводя черту - не проще ли комплиментарник сделать с изменяемыми коэффициентами в зависимости от известных нам условий?
тогда конечно проще комплиментарник. Фильтр Калмана силен тогда, когда есть много датчиков, много параметров, они все неявно связаны. В вашем примере позиция естественно уплывет и никакой супер пупер алгоритм не справится, в любом случае нужна референсная система. Просто методы заложенные в фильтр Калмана для обработки и фильтрации куда более правильные и эффективные, чем ПИ регуляторы в фильтре Махони, градиентные спуски и прочие.
Проект - допиливание прошивки Cleanflight до более-менее адекватных навигационных возможностей. Стадия - непрерывное тестирование и доработка 😁
rcopen.com/forum/f123/topic443443
www.rcgroups.com/forums/showthread.php?t=2495732
github.com/iNavFlight/inav
А что в итоге хотите получить? какие цели проекта?
А что в итоге хотите получить? какие цели проекта?
В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.
Просто методы заложенные в фильтр Калмана для обработки и фильтрации куда более правильные и эффективные, чем ПИ регуляторы в фильтре Махони, градиентные спуски и прочие.
Если все зависимости известны - скорость, ускорение, угловые скорости, все калибровки датчиков - связываются простыми формулами - то зачем тогда калман и его фишка в поиске неизвестных зависимостей? Ещё один минус я вижу в том, что он подстраивается итеративно, т.е. требуется время, чтобы система настроилась и подорала коэффициенты… А в реальности нужно начать правильную работу сразу после включения питания.
Если все зависимости известны - скорость, ускорение, угловые скорости, все калибровки датчиков - связываются простыми формулами - то зачем тогда калман и его фишка в поиске неизвестных зависимостей?
Дело то в том, что зависимости неизвестны. В какие то моменты времени зависимости могут уменьшаться и вообще переменные не будут коррелировать, фильтр калмана это вычислит и перестанет связывать переменные.(Лаги ЖПС, наводки на компас). В какие то моменты времени зависимости могут появляться в неожиданных местах, что будет учитывать калман и результат улучшиться. Просто зависимости выявляются статистически, а не аналитически - в это его сила. Даже самые завуалированные зависимости калман сможет определить.
А если самому попробывать определять все зависимости будет гигантский конечный автомат, который еще надо будет настроить.
Ещё один минус я вижу в том, что он подстраивается итеративно, т.е. требуется время, чтобы система настроилась и подорала коэффициенты… А в реальности нужно начать правильную работу сразу после включения питания.
Мне это тоже не очень понравилось, но выход простой - после подстройки каламна - просто скачать все матрицы коэффициентов, ковариаций в память и после каждого включения считывать их, тогда долгой подстройки не будет.
В итоге - прошивку, пригодную как для гоночных мелколетов, так и для более крупных коптеров/самолетов, работающую на широком спектре плат от супер-дешевых CC3D до PixHawk и OpenPilot Revolution.
А в конечном итоге какова цель? Заработать денег? Или просто хобби? Чем не устраивают опенсорсные прошивки?
А в конечном итоге какова цель? Заработать денег? Или просто хобби?
В конечном итоге цель такая же как и у всех участников этой темы - изучение технологии, развитие R/C хобби. Заработать денег - цель побочная.
Чем не устраивают опенсорсные прошивки?
Отвечу вопросом на вопрос - что из имеющегося в природе умеет полет по точкам на контроллере за $10? INAV умеет и INAV открытый.