Фильтр Калмана

Автомат, адаптивный автомат ... разум

Фильтр Калмана

Сообщение =DeaD= » 28 июн 2009, 09:49

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

Требуемые знания от читателя, чтобы более менее разобраться в теме:
1. Работа с матрицами, действия с матрицам, в т.ч. вычисление обратной;
2. Основы теории вероятности (непрерывного её раздела), - матожидание, ковариантность;


И почему у нас еще не было этой темы и мы по ней ничего не говорили? :unknown:

Для всех кто еще захочет освоить технику накидаю тут ссылочек:
http://en.wikipedia.org/wiki/Kalman_filter
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf
http://www.elo.utfsm.cl/~ipd481/Papers% ... an1960.pdf - исходная работа товарища Калмана 60-го года публикации

Добавлено спустя 14 минут 58 секунд:
В общем, кто в теме - откликнитесь! Я почти всё разобрал, кроме двух вещей:
1. Какой физический смысл ненулевых значений кроме как на диагонали в матрице ковариантностей?
2. Есть ли где-то обоснование не сильно запутанное оптимальности выбора окончательной матрицы которой корректируем состояние системы с точки зрения минимизации скорректированной матрицы ковариантностей?

Добавлено спустя 17 минут 33 секунды:
Надо бы хорошую статью найти на англицком и перевести на русский, а то на родном языке никакой информации не нашел в приличном виде для чайников.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение Digit » 29 июн 2009, 11:59

Используется в частности в SLAM. Соответствующая темка тут.
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Фильтр Калмана

Сообщение avr123.nm.ru » 29 июн 2009, 12:59

Исходники и пример применения фильтра Калмана на AVR ATmega в проекте атопилот для вертолета - http://autopilot.sourceforge.net/
"autopilot: Do it yourself UAV" - самодельный беспилотный аппарат.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 14:10

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

Добавлено спустя 7 минут 46 секунд:
Что, все после учебы расслабились и забыли суровую высшую математику? :)
А как же дальше робототехнику двигать? :) Это же методы 60-х годов изготовления, надо их то уж освоить! :)

Добавлено спустя 41 минуту 28 секунд:
Короче попробую изложить своими словами, авось понятней будет тут чуток и сам разберусь лучше :)

Постановка задачи, что решаем:
Хотим как можно более точно знать состояние системы, для которой известна модель, но нету точной информации о том в каком она сейчас состоянии, нету точной информации о наших управляющих воздействиях и нету точных измерений её состояния.

Типичные примеры задачи
  • Инерциальная система навигации периодически получающая сигналы со спутников.
  • Мобильный робот (как с энкодерами, так и без), периодически видящий какие-то маяки.
  • Просто приём зашумленного сигнала.


Какую информацию поддерживаем:

В фильтре Калмана мы постоянно поддерживаем пару объектов описывающих имеющуюся у нас информацию о состоянии системы (вектор параметров описывающих состояние системы - x) и степень её достоверности + уровень взаимосвязи параметров описывающих состояние системы (эти две вещи хранятся в матрице ковариаций P).

На каждом шаге работы фильтра Калмана мы:

Обновляем состояние системы исходя из того какое управляющее воздействие приложили к системе
Исходя из приложенного к системе управляющего воздействия u и степени её точности Q модифицируем вектор состояния системы x и увеличиваем уровень погрешности нашей информации (хитрым образом получая из старой матрицы P и матрицы погрешности воздействия Q новую матрицу P).

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

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

Добавлено спустя 1 минуту 15 секунд:
Осталось понять:
1. Как мы принимаем решение какая матрица погрешностей хуже, а какая лучше.
2. Как смешиваются матрицы погрешностей при изменении состояния системы или при добавлении информации от наблюдений;
3. Почему K оптимально - тут тупо надо доказательство найти;
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение Duhas » 29 июн 2009, 14:11

:( несколько сумбурно(
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 14:14

А вот так с заголовками? :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение Duhas » 29 июн 2009, 14:21

еще бы постановку задачи.. и ето как ее решение )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 14:22

Согласен, что ответ без вопроса это странно, исправляемся :))) см. выше - добавил постановку задачи и тройку примеров.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение nest » 29 июн 2009, 19:02

а можно постановку задачи как то ... практическим языком описать ? с примером из повседневности. а то мне что то заумно :)
Аватара пользователя
nest
 
Сообщения: 977
Зарегистрирован: 21 янв 2005, 12:16
Откуда: Germany
прог. языки: asm

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 19:41

2nest: Есть у тебя GPS-модуль который периодически видит какие-то спутники и ловит с них сигнал, а еще у тебя есть ИНС на этом же девайсе, но оно накапливает погрешность. Тебе надо максимально точно постоянно знать где ты и с какой скоростью движешься. Вот этот Калман может тебе дать ответ на такую задачу :) он умеет оптимально смешивать неточные наблюдения с неточными уже предполагаемыми координатами и понижать общую неточность, уточнять координаты и еще и оценивать эту неточность :)

Добавлено спустя 1 минуту 49 секунд:
2Виталий: Вроде ты в теме, глянь плиз моё описание Калмана? Я нигде не нагнал? :)

Добавлено спустя 3 минуты 11 секунд:
2nest: Ну или еще пример - ты едешь на машине, у тебя есть спидометр и ты примерно каждый километр видишь пролетающий мимо тебя верстовой столб, так вот - ты хочешь на основании этой информации иметь постоянно максимально точную инфу о своём положении на трассе и скорости. Так вот Калман тоже это решает, скажем при том что верстовой столб ты будешь ловить с погрешностью +\-50м, а спидометр будет врать на 5%, Калман будет их смешивать оптимальным образом, да еще и показывать, насколько неточная инфромация сейчас на выходе.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение avr123.nm.ru » 29 июн 2009, 19:44

Вот бы в цифрах это увидеть, конкретные наборы входных данных и выходной поток - ну и графики можно построить для наглядности.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 19:55

Будет и в цифрах, только сначала разобраться бы полностью :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Фильтр Калмана

Сообщение Виталий » 29 июн 2009, 22:27

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

Kalman Filtering Made Easy
http://openuav.astroplanes.com/library/docs/writeup.pdf
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: Фильтр Калмана

Сообщение avr123.nm.ru » 29 июн 2009, 22:35

Вся библа по Калману - http://openuav.astroplanes.com/index.php?pageid=11
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Фильтр Калмана

Сообщение =DeaD= » 29 июн 2009, 22:38

2Виталий: Вот же ты редиска :) я ж тебя не просил помочь разобраться, я спросил - в написанном мною фигни откровенной нет? а то люди читают...
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

След.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6