Как стать автором
Обновить

Комментарии 12

различными комбинациями фильтров низкой частоты (ФНЧ), фильтров высокой частоты (ФВЧ)

Смешались в кучу кони, люди… причем здесь эти классические фильтры? Фильтр Калмана используется для экстраполяции / предсказания траектории. Из статьи не ясно, для чего он БЛА
Я вот совсем не в теме, но тем не менее мне вполне ясно, для чего он БЛА :)

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

Спасибо. Кстати, в среде использующих методы нелинейной оптимизации, давно появилась крутая фича - автопроизводные. Это фича основана на переопределении типов и операторов. То есть саму нелинейную функцию мы записываем также в прямом виде, не рассчитывая матрицу Якоби или Гессе в ручную, но используем специальный тип переменных в выражениях. Алгоритм нелинейной оптимизации уже используя этот тип и переопределения операторов рассчитывает матрицы Якоби и Гессе сам! В Ceres Solver (один из фреймворков для работы с нелинейной оптимизацией), например, этот тип называется Jet. Вообще, тема с автопроизводными - крутая!
Не знаю, может кто-то и придумал уже EKF с автопроизводными.

Спасибо за комментарий, наверное я недостаточно пояснил свою мысль. Хотел прояснить разницу классических фильтров и ФК в контексте, например задачи навигации. Экстраполяцию и предсказание траектории можно также выполнить комбинациями ФВЧ и ФНЧ фильтров. Самый простой пример - получаем позицию с GPS, дифференцируем ее - получаем скорость, на основе которой можно также предсказывать и экстраполировать. Однако ключевая особенность ФК перед классическими фильтрами, то что в алгоритмах на основе классических фильтров все зависимости и выводы записаны в прямом аналитическом виде, в то время как ФК некоторые взаимозависимости находит сам, разработчик напрямую их не записывает (то есть формулу ориентация = f(GPS позиция) я нигде не записывал, ФК сам нашел эту взаимосвязь). Естественно ФК - это не панацея, и для разных задач подходит свой инструмент.

Oдним из самых интересных ранних применений фильтра Kалмана было его использовние в системе навигации командного и лунного модулей проекта Aполлон, измерения углового расстояния между положением известных звезд и направления на землю или луну сделанные секстантом вводились в бортовой компьютер для постоянного уточнения траектории, определения моментов включения двигателей и пр., компьютер и sw были разработаны лабораторией MIT, которая сейчас называется Draper Lab, можно также заметить, что фильтр Kалмана математически эквивалентен уравнениям Kолмогорова-Bинера для оптимальной оценки стационарного случайного сигнала записанным в удобной итерационной форме, когда уточненная оценка является довольно простой функцией наблюдаемой/измеренной величины и старой оценки, что удобно для рализации на бортовом компьютере, и сейчас использутся практически на всем, что летает, плавает и тд, работа Kолмогорова была сделана чуть ли не в 1939 году и повторена Bинером в 40х


ps
чем занимается Draper Lab сейчас можно посмотреть например здесь:
https://www.draper.com/


pps
особенно интересна эта работа, типа первая платформа для тестирования лекарств против covid19 на живой ткани, в условиях близких к реальным (lung-on-chip)
https://www.biorxiv.org/content/10.1101/2021.06.15.448611v1.full

Жаль оси графиков безразмерные. Правильно ли я понимаю что такие большие неопределённости углов Эйлера и курса связанны с неподвижностью объекта? Не мешает ли их расходимость? Получается что модель эволюции системы константна — неподвижный и зависший объект мы фильтруем одним фильтром?

Да, единицы забыл подписать, косяк. Для всех графиков горизонтальная ось - ось времени в секундах. Вертикальные оси: для графика вектора смещений ДУСа - рад/сек; вектора смещений акселерометра - метр/сек/сек; углы Эйлера - градусы; вектор положения - метры; вектор скорости - метр/сек.
Вообще да - если объект стоит - то рассчитываемый ФК угол курса может уплывать, неопределенность увеличивается. Углы тангажа и крена при этом наблюдаемы из акселерометра и их неопределенность при этом не увеличивается. На графиках неопределенность выросла в том числе - из-за того, что я увеличил дисперсию шума GNSS и коррекция стала меньше, из-за чего неопределенность увеличилась - этот промежуток на видео 1:20 - 2:25.
Про константу не совсем понял - если вы говорите про то, что объект не меняет свое состояние (положение, скорость, ориентацию) - то да, константа, но смещения акселерометра и ДУСа могут уплывать (не сами расчетные значения в векторе состояния, а именно смещения в датчиках), ФК при этом будет стараться подгонять рассчитываемые оценки смещений под реальные с датчиков. В Unity можно в ручную изменить bias у IMU и посмотреть что будет.

Я имел ввиду что любой ФК делает предположение о постоянстве модели эволюции системы во времени (F -путь будет). И тогда x(t+1)=F*x(t), где x — вектор состояния. Просто вот объект движется с ускорением, вот с постоянной скоростью, а теперь неподвижен. По идее это всё разные F. А когда F-«фактическая» не совпадает с F-«которую предполагает фильтр» падает точность фильтрации и могут происходить расхождения.

Понял, да, тут вы правы, сам ФК - это линейный алгоритм и он предполагает, что матрица F, H - константы. В самом простом случае, в версии фильтра придуманном самим Калманом, F, H - действительно постоянные матрицы. Для нелинейных систем придумали EKF, UKF фильтры, которые тоже по своей сути линейны, но линеаризацию производят каждый шаг, после чего получаются те же матрицы F, H и используются те же уравнения, что в линейном ФК.
И да, линеаризация уже сама по себе своего рода костыль, в сильных нелинейных моделях, фильтр имеет расхождения и может даже развалиться.
Я когда-то читал, что были версии ФК с линеаризацией с захватом большего числа порядка производных (помимо матрицы Якоби еще и Гессиан, а в случае UKF - большего числа сигма точек чем 2n+1), но широкого распространения они не нашли.

В Вашем случае вы же сами управляете дроном, и получается по идее знаете модель его движения F? Может как-то можно это использовать? Пытался как-то делать блок UKF фильтров, но там объектом не управлял. Делал переход между разными фильтрами + каждый фильтр бы подтюнен чтобы не расходиться на данных которые не соответствуют его модели, но из-за этого точность падала. Эх прям ностальгия. Спасбо за ответы.

Можно использовать, да зная массы, моменты инерций и текущую тягу моторов рассчитывать кинематику (ускорения, скорости), но: 1) сами движения коптера, зависят не только от системы управления, но и от ветра, или каких-то изменений среды, плотность воздуха, или внешних возмущений, которых никак нельзя предсказать, в таком случае, это будет мешать 2) появляется обратная связь - навигация опирается на то, что выдает система управления, а система управления опирается на, что что выдает навигация - может все развалиться 3) При наличии IMU (угловые скорости и ускорения) - уже есть реальная кинематика.

По моему опыту этот фильтр хорош для неуправляемых снарядов, но никак ни для управляемых объектов.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории