Фільтр Калмана, microtechnics, мобільна версія
Як то так повелося, що дуже подобаються мені всякі алгоритми, які мають чітке і логічне математичне обґрунтування) Але найчастіше їх опис в інтернеті настільки перевантажене формулами і розрахунками, що загальний зміст алгоритму зрозуміти просто неможливо. А адже розуміння суті та принципу роботи пристрою / механізму / алгоритму набагато важливіше, ніж заучування величезних формул. Як це не банально, але запам'ятовування навіть сотні формул нічим не допоможе, якщо не знати, як і де їх застосувати 😉 Власне, до чого все це. Вирішив я замутити опис деяких алгоритмів, з якими мені доводилося стикатися на практиці. Постараюся не перевантажувати математичними викладками, щоб матеріал був зрозумілим, а читання легким.
І сьогодні ми поговоримо про фільтр Калмана. розберемося, що це таке, для чого і як він застосовується.
Фільтр Калмана.
Почнемо з невеликого прикладу. Нехай перед нами стоїть завдання визначати координату літака. Причому, природно, координата (позначимо її) повинна визначатися максимально точно.

На літаку ми заздалегідь встановили датчик, який і дає нам шукані дані про місцезнаходження, але, як і всі в цьому світі, наш датчик неідеальний. Тому замість значення ми отримуємо:
де - помилка датчика, тобто випадкова величина. Таким чином, з неточних показань вимірювального обладнання ми повинні отримати значення координати (), максимально близьке до реального стану літака.
Завдання поставлене, перейдемо до її вирішення.
Нехай ми знаємо керуючий вплив (), завдяки якому летить літак (пілот повідомив нам, які важелі він смикає 😉). Тоді, знаючи координату на k-му кроці, ми можемо отримати значення на (k + 1) кроці:
Здавалося б, ось воно, те що треба! І ніякої фільтр Калмана тут не потрібен. Але не все так просто. В реальності ми не можемо врахувати всі зовнішні фактори, що впливають на політ, тому формула приймає наступний вигляд:
де - помилка, викликана зовнішнім впливом, неідеальної двигуна ітп.
Отже, що ж виходить? На кроці (k + 1) ми маємо, по-перше, неточне показання датчика, а по-друге, неточно розраховане значення, отримане з значення на попередньому кроці.
Ідея фільтра Калмана полягає в тому, щоб з двох неточних значень (взявши їх з різними ваговими коефіцієнтами) отримати точну оцінку шуканої координати (для нашого випадку). У загальному випадку, вимірювана величина можемо бути абсолютно будь-який (температура, швидкість ..). Ось, що виходить:
Шляхом математичних обчислень ми можемо отримати формулу для розрахунку коефіцієнта Калмана на кожному кроці, але, як домовилися на початку статті, не будемо заглиблюватися в обчислення, тим більше, що на практиці встановлено, що коефіцієнт Калмана з ростом k завжди прагне до певного значення. Отримувати перші спрощення нашої формули:
А тепер припустимо, що зв'язку з пілотом немає, і ми не знаємо керуючий вплив. Здавалося б, в цьому випадку фільтр Калмана ми використовувати не можемо, але це не так 😉 Просто «викидаємо» з формули то, що ми не знаємо, тоді
Отримуємо максимально спрощену формулу Калмана, яка тим не менш, не дивлячись на такі «жорсткі» спрощення, прекрасно справляється зі своїм завданням. Якщо уявити результати графічно, то вийде приблизно наступне:

Якщо наш датчик дуже точний, то природно ваговий коефіцієнт K повинен бути близький до одиниці. Якщо ж ситуація зворотна, тобто датчик у нас не дуже хороший, то K повинен бути ближче до нуля.