Comments 31
Помню фильтры Каллмана из универского курса. В итоге сдал его, но всегда оставалось ощущение, что оно работает на неведомой магии — ну как, КАК не зная истории можно грамотно предсказать поведение, скажем, синусоиды? Находясь в точке 0.5 мы можем пойти как вниз, так и вверх, смотря передний это фронт или задний.
Спасибо за статью, ощущение что стало понятнее как оно работает.
ну как, КАК не зная истории можно грамотно предсказать поведение, скажем, синусоиды? Находясь в точке 0.5 мы можем пойти как вниз, так и вверх, смотря передний это фронт или задний.
В такой постановке — никак. Но если мы работаем в фазовом пространстве, и учитываем не только значение синусоиды, но и первую производную...
Да, теперь это стало понятнее. Стоило закочнить универ и поработать много лет заработчиком, а потом наткнуться на пару подобных статей.
Всё же при всех плюсах универа последние годы были немного поспешными — материалов давали много и очень сжато, причем практические семинары были по всяким бесполезным предметам а-ля "напишите экспертную систему на прологе". А я бы лучше вот фильтр использовал для какой-нибудь симуляции гонок по неровной дороге
Синус по двум предыдущим точкам легко предсказывается.
Берем синус, два раза его дифференцируем - получаем минус синус. Ага, значит у нас есть диффур d2f(x)/dx2 = -f(x). Производную можно приблизить численно: d2f(x)/dx2 ~ (f(x + h) - 2 * f(x) + f(x - h)) / (h ^ 2), где h - некое малое число. Подставляем (f(x + h) - 2 * f(x) + f(x - h)) / (h ^ 2) = -f(x), преобразуем, получаем выражение для построения прогноза f(x + h) по точкам f(x) и f(x - h). Применяя полученное выражение несколько раз - можем прогнозировать на разный горизонт.
такой вопрос, ведь для линейного процеса этот фильтр подходит лучше? Хочется понять, как применить фильтр, например, для синхронизации часов.
Видел в одной из реализаций PTP (Precesion Time Protocol) фильтр Калмана. На диаграмме он был показан в виде квадратика (всеми любимая абстракция черного ящика), но без объяснения как он работает в этой задаче. Время меняется линейно, ошибка при синхронизации возникает только из-за неравномерности хождения времен. Получается что уравнение одно?
тогда как для него правильно составить ковариционную матрицу?
Кстати, очень крутой видеокурс по теме статьи: https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPVXU3oUFNATxGXY90AULiqnWT
удивительное хабрасообщество... кто и за что поставил минус этому комментарию?
Таким комментариям не место на ресурсе? Это протест тому, что все лучшие курсы почему-то на английском?
Возможно, тот, кто просмотрел первый ролик, и за 5 минут узнал только то, что фильтр Калмана - очень крутая штука, которая по неточным измерениям может давать хороший результат. Остальное смотрите в продолжении (ещё 54 серии в сезоне "фильтр Калмана").
Но минус не мой,@DirectXто в чём виноват? Господина van Biezen, собственно, тоже обвинять как-то странно.
Минус — знак несогласия с комментарием. Возможно, кто-то не согласен с тем, что видеокурс действительно крутой. Это нормально.
Нет, это не нормально. Потому как в комментарии со ссылкой на курс нет ничего плохого или душного! Это даже не очередной видос с однотипным введением в питон или приевшееся всем "как войти в айти".
Человек поделился ссылкой именно по теме статьи. На тот момент комментарий висел с минусом (была единственная оценка), как будто это что-то плохое! Это несправедливо.
Если какой-то гуру посчитал, что курс по ссылке недостаточно крутой, значит ему есть с чем сравнивать, значит у него есть ссылка на действительно крутой курс и это было бы полезно для сообщества, верно?
Ну так где-же тогда ссылка или какое-то объяснение почему курс недостаточно крутой? Получается этот "несогласный" сделал бяку, он поставил минус и отбивает охоту делиться чем-то полезным! При этом сам этот душитель не дал ничего взамен полезного. Фактически без аргументов просто назвал чужое мнение и полезную ссылку "говном" с высоты своего положения (ведь у него есть возможность ставить минусы). Это вы называете нормальным? Разве это принесёт пользу хоть кому-то?
Комментарий заплюсовали уже после моего обращения внимания на несправедливость. Я сам на тот момент голосовать не мог, у меня не было заряда.
Минус — знак несогласия с комментарием. Возможно, кто-то не согласен с тем, что видеокурс действительно крутой. Это нормально.
Я просто оставлю тут цитаты из хабраэтикета размещенные на сайте. Они тут размещены не просто так, а чтобы те, кто имеет право минусовать - не душили хабрасообщество:
Не злоупотребляйте своей возможностью голосования. Необходимо понимать, что минус сильно отличается от плюса — минус угнетает человека, а не развивает его. Ставьте плюсы, когда вам что-то нравится, но подумайте, прежде чем ставить минус, если что-то не понравилось.
Минус — это не аргумент, и, тем более, не контраргумент.
Уважайте мнение других. Оно не обязано совпадать с вашим.
Как видите, я аргументировал своё мнение и позицию, я попытался восстановить справедливость и, похоже, привлечь внимание получилось, изначальному комментарию набросали немного плюсов.
Это несправедливо.
Согласие или несогласие с чужим мнением не имеет никакого отношения к справедливости. Справедливость не означает что все обязаны соглашаться с вами.
Фактически без аргументов просто назвал чужое мнение и полезную ссылку "говном"
Это всего лишь ваша интерпретация. Минус не означает "говно".
Уважайте мнение других. Оно не обязано совпадать с вашим.
Рекомендую прочитать этот пункт внимательно.
Согласие или несогласие с чужим мнением не имеет никакого отношения к справедливости
Ставя минус - человек пытается уничтожить комментарий. Ведь много минусов обесцвечивают его, делают серым, невидимым. Так что минус - это попытка уничтожить это мнение. Ставящий минус как бы говорит, что этому комментарию не место на ресурсе.
Но конкретно тот комментарий не нёс ничего плохого! Вот почему минусование подобных комментариев - это несправедливо.
Уважайте мнение других. Оно не обязано совпадать с вашим.
В том то и дело, что в случае с комментарием - есть 3 варианта: ничего не делать, поставить минус, поставить плюс.
Получается, что если мнение не совпадает, то можно пройти мимо, это как раз будет уважением к чужому мнению. Но человек не прошел мимо, он специально попытался обесценить комментарий, уничтожить, принизить.
Тут ничего уважительного. Учитывая, что минусующий не дал никаких ургументов и не предложил ничего лучше.
Кто-то из добрых побуждений решил поделиться немножко знанием и дополнительной ссылкой. А кто-то решил обесценить это рвение, сделать его коммент сереньким с красной тряпкой минуса. Тем самым отбивая охоту чем-то делиться. Это токсичное душное поведение ухудшающее ресурс.
Минус — знак несогласия с комментарием
Минусы не для этого! Минусы - это если статье или комменту не место на ресурсе, например человек дичь говорит про плоскую землю. Т.е. для саморегуляции сообщества не привлекая НЛО. Тот коммент не был дичью. Выражая несогласие, аргументом было бы дать другую, более полезную ссылку. Но там не было аргумента.
Я тоже не люблю комментарии из ссылок на видеокурсы.
Но вы же, надеюсь, не минусуете при этом? Человек поделился тем, что у него есть дополнительно по теме статьи.
Когда постят ссылки на крутой курс Эндрю Ына, я никогда не видел, чтобы кто-то объяснял почему он считает этот курс крутым.
Также не видел, чтобы кто-то объяснял почему считает какой-нибудь курс по машинному обучению от Физтеха и Мейл.ру на Курсере полезным.
Объяснение нужно лишь когда мы утопаем в потоке ссылок на разные курсы и вот тогда уже можно сравнивать и спорить какой из них хороший, а какой плохой. При этом критикуя один курс, полагаю, критикующий имеет что-то на замену, что-то лучшее. Типа "курс нудный, лучше почитать вот эту книгу, там подробнее и быстрее". Но просто поставить минус? За что?
И это не считая того, что затрат времени на просмотр подобные курсы требуют в разы больше, чем прочтение комментария или даже статьи целиком.
Это является причиной минусовать коммент со ссылкой на курс? Тогда нужно минусовать все курсы вообще.
А ещё давайте отменим лекции в университетах, ведь всё тоже самое быстрее прочитать в книжках, такая логика?
Вот вы сами посмотрели тот курс? Что в нём есть того, что нет в этой статье?
Курс не смотрел, но в закладки положил. Когда мне понадобится более глубокая информация по фильтру - вернусь и просмотрю. И даже если потом сложу мнение, что курс бесполезен, всё равно это лучше, чем ничего, когда начинаешь поиски информации с нуля. От этого комментарий не стал плохим или неугодным на ресурсе.
Курс не смотрелЧто и требовалось доказать.
в закладки положил. Когда мне понадобится более глубокая информация по фильтру — вернусь и просмотрюПоиск в гугле намного проще и релевантнее, чем поиск в закладках хабра. Проверено.
Что и требовалось доказать.
И что требовалось доказать? К чему тут эта фраза из доказательств теорем? Тот факт, что конкретно я не смотрел - не доказывает, что курс или коммент плохой. Так при чём тут "ч.т.д."? Эта фраза выглядит как некая победа в споре что-ли?
Речь изначально о том, что простое минусование комментария в данном случае - это плохо. Не может минус характеризовать комментарий и курс как плохой без объяснения причины или предложения какой-то лучшей эльтернативы. Вот о чем речь.
Я не защищаю курс, я открыл его, пролистал пару уроков и положил в закладки. Если у вас не получается использовать закладки хабра или броузера, обсидиана и прочих мест для записи ссылок и знаний, это не значит, что у других есть какие-то проблемы с этим. Это опять же не говорит, что курс плохой.
Вы то сами смотрели курс по ссылке, чтобы судить о нём? Или просто весь разговор основан на вашем "не люблю комментарии из ссылок на видеокурсы".
Получается, что если какой-то минусатор тоже "просто не любит", то нужно пытаться весь ресурс от этого избавить, так? Ссылка как-то мешает?
Немного перефразируя ваши слова: если человек, ставя минус, не смог написать по теме статьи ничего вменяемого — то грош цена такому минусу. Минус без объяснения - вредный. Вот о чём я веду речь! Минус - это больше для какой-то дичи, типа плоской земли. Но если это не дичь, зачем ставить минус? От таких минусов сообщество проигрывает.
Если кто-то посчитал комментарий вредным, то это можно было аргументировать. А не просто ставить минус, например потому, что, к примеру, "просто не люблю ссылки". Речь не о вас конкретно, конечно же.
И дело не только в хабре - эта токсичность она во всём на просторах русскоговорящих. К сожалению. Люди охотно готовы вытравливать за всё, просто потому что могут, получая удовольствие что-ли. Отбивая у других охоту делиться чем-то. Независимот от того гуглятся ли более лучше ресурсы по теме. Вместо минуса можно было просто тогда написать аргументировано, что "курс так себе, легко гуглятся ресурсы лучше", это было бы полезно. А что говорит минус? Серенький коммент с красным минусом говорит, что там дичь какая-то. Но разве это так?
В пункте "Объединяем вместе" в первой формуле что-то не так. Кажется случился ctrl-v ctrl-v вместо простого ctrl-v.
Хорошая статья, спасибо. Разве что в примерах должн быть не робот, который катается по лесу, а тележка, которая ездит по одномерным рельсам.
Потому что в первом случае задача становится куда интереснее - из координат X/Y и скорости/курса с GPS и датчиков скорости с колёс (фактически, линейная скорость движения + угловая скорость поворота) надо получить координаты/скорость/курс. А оно внезапно многомерное и нелинейное. Такую задачку я решить не могу. Надо всё-таки плотно сесть, попробовать...
Фильтр Калмана предполагает, что обе переменные (в нашем случае это позиция и скорость) случайны и имеют гауссово распределение.
И вот тут собственно и возникает основное ограничение его применимости IRL.
Потому что если робот едет по лесу - то шишки на голову ему будут падать с Пуассоновским распределением. А пинки от грибников вообще войдут в категорию outliers и сломают гауссиану даже если она действительно имеет форму колокола.
Увы, но при всех его достоинствах, фильтр Калмана неробастный, что в XXI веке смотрится уже несколько устарело.
Есть много расширений фильтра Калмана со страшными аббревиатурами, но гуглинг по словам robust Kalman filter дает некоторое количество pdf-ок на эту тему.
PS
Сам с фильтром Калмана имел дело редко, но грабли, когда аппроксимируешь события реальной жизни гауссианой и получаешь сферического окня в вакууме встречались часто.
Имхо самая примитивная систематическая ошибка акселерометра в сочетании с дергающимся GPS заведет робота дальше, чем Сусанин.
А за статью ставлю плюс.
То, что шум не Гауссовский просто убирает оптимальность. Никакой катострофы в этом нет, так оптимальность фильтра Калмана это, как мне кажется, вещь не сильно практическая, требующая знания матриц ковариаций шумов.
Тем не менее, на практике фильтр неплохо работает даже с негауссовскими шумами, с теми же шумами округления, распределение которых не является гауссовским.
Фильтр Калмана самое простое и первое, что стоит пробовать для линейных систем или систем, локально близких к ним. Дальше уже можно переходить или к его вариациям, или что-то другое.
Совершенно не спорю с тезисом о том, что фильтр Калмана - первое, с чего надо начинать, особенно для линейных систем.
Моя точка зрения скорее в том, что на нем нельзя заканчивать.)))
PS
Негауссовость бывает очень разная и шумы квантования тут не самый лучший пример, они как раз относительно "нормальны" - у них есть по крайней мере стандартное отклонение и нет тяжелых хвостов, думаю те же криптотрейдеры или квант-инженеры много могут рассказать о применении фильтра в торговле с heavy-tail распределениями.
У меня лично, главной и чаще всего встречающейся в реальных задачах проблемой становятся малопредсказуемые выбросы, черные лебеди и прочая подобная пакость.
Для малых размерностей выбросы часто втупую лечатся скользящим медианным фильтром перед Калманом на каждую размерность отдельно - такая вот эталонная синяя изолента и костылизм, плюс добавочное запаздывание, но часто работает.)))
Есть и более разумные решения робастных фильтров, без бубнов и костылей - pdf-ок море.
А вот для больших размерностей и сильно нелинейных систем все может стать сложнее.
Это мое ИМХО если что и мой личный опыт.
Очень крутая и понятная статья, спасибо!
Статья хорошая и перевод неплохой, спасибо переводчику, но:
Есть определённые недоработки по тексту и неудачные фразы. Например: "матрица проецирования", "тождественное равенство", не говоря уже о "датчики оказывают влияние на состояние".
Почему большинство статей про фильтр Калмана упираются, блин, в роботов, которые куда-то ездят? Как будто у нас больше ничего нет, за чем мы наблюдаем опосредовано и с ошибой, при этом зная законы изменения этого наблюдаемого?
На мой взгляд, картинки вообще не добавляют понимания, потому что они сложнее, чем текст, который они описывают, а должно быть наоборот (я про картинки с распределениями, конечно - не про роботов: они тут вообще не понятно, зачем). Скорее картинки тут просто яркими, но мягкими цветами призваны поглаживать и успокаивать нейроны, которые напрягаются при размышлениях. Если так и задумано, то ок.
Как и в любой другой статье про фильтр Калмана очень не хватает мотивации и сути в простых словах. Грубо говоря, ответа на вопрос: "Почему нельзя просто так измерить и усреднить, откуда берётся и зачем нужна эта магия?".
Термин "перемножение гауссовых кривых" вообще не понятно, на чью совесть отнести, то ли автора, то ли переводчика.
Есть определённые недоработки объяснением применимости метода. Не объясняется, откуда брать матрицы Qk и Rk и начальные неопределённости P0. Кстати, не понятно ещё и почему эти матрицы имеют индексы k - как будто они тоже меняются во времени?
Объяснение фильтра Калмана в картинках