roboforum.ru

Технический форум по робототехнике.


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

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

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

Сообщение Michael_K » 18 фев 2010, 20:50

да, обратная связь есть, предполагается, что пользователь всё видит.

Это проще.

Если в целом на длинном периоде никто никуда не уходит.
То есть все движение происходит примерно вокруг одной неподвижной точки,
то можно просто чуточку фильтровать скорости и ускорения ВЧ фильтром
с разумными постоянными времени.
Ну то есть не надо идеальным интегратором интегрировать.

А кальман - да, в таком случае поможет.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Microalone » 19 фев 2010, 11:52

Michael_K писал(а):
да, обратная связь есть, предполагается, что пользователь всё видит.

Это проще.

Если в целом на длинном периоде никто никуда не уходит.
То есть все движение происходит примерно вокруг одной неподвижной точки,
то можно просто чуточку фильтровать скорости и ускорения ВЧ фильтром
с разумными постоянными времени.
Ну то есть не надо идеальным интегратором интегрировать.

А кальман - да, в таком случае поможет.

спасибо. Я думаю я тогда попытаюсь реализовать некое программное подобие этого фильтра.

=DeaD= писал(а):Имея только аксель и гиро фиг вы сможете нормально мерить скорость, ошибка то не сбрасывается.

Прошу прощение за незнание, любопытства ради спрашиваю :)
а что нужно, чтобы мерять? Ошибка то в любом случае будет. Я так думал, что с приборов снимаются показания, а потом уже аппаратно / программно фильтруются / обрабатываются.
Microalone
 
Сообщения: 5
Зарегистрирован: 17 фев 2010, 09:50
Откуда: Дзержинск
прог. языки: С/С++

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

Сообщение =DeaD= » 19 фев 2010, 12:32

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

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

Сообщение Gfer » 10 мар 2010, 19:04

Вот неплохое описание http://www.navgeocom.ru/gps/kalman/index.htm
Сон разума рождает чудовищ...
Аватара пользователя
Gfer
 
Сообщения: 169
Зарегистрирован: 25 апр 2009, 12:03
Откуда: Москва
прог. языки: С
ФИО: Клесник Станислав Владимирович

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

Сообщение =DeaD= » 10 мар 2010, 19:06

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

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

Сообщение Gfer » 10 мар 2010, 19:20

меня интересовал фильтр применительно к гибридной системе позиционирования! там рисунок 6
Сон разума рождает чудовищ...
Аватара пользователя
Gfer
 
Сообщения: 169
Зарегистрирован: 25 апр 2009, 12:03
Откуда: Москва
прог. языки: С
ФИО: Клесник Станислав Владимирович

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

Сообщение =DeaD= » 10 мар 2010, 19:40

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

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

Сообщение Meepo » 26 мар 2010, 08:44

Здравствуйте!
Занимаюсь измерением ровности дороги. На ось автомобиля закрепляется акселерометр. С его помощью измеряем ускорение по оси Z. Скорость движения постоянна. Задача: посчитать высоты микропрофиля дороги (траекторию движения оси автомобиля). В итоге получается каша, а не данные. Провели несколько заездов, микропрофили почти не коррелируют между собой... Может ли применение фильтра Калмана как-то исправить ситуацию? Судя по данным акселерометра. машина то уходит под землю, то взлетает, потому считаю через некоторый промежуток времени, что скорость становится нулевая (через секунду например). Очевидно , что скорость будет нулевая достаточно часто (машина движется вверх-вниз, меняя знак скорости и ускорения) - но, видимо, это очень грубое приближение.
Можете что-нибудь посоветовать в этом случае? буду премного благодарен:)
Meepo
 
Сообщения: 2
Зарегистрирован: 26 мар 2010, 08:35

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

Сообщение Ku6opr » 28 мар 2010, 01:47

Что такое высота микропрофиля дороги? Если это неровности, то тогда по амплитуде вибраций относительно 1g можно судить о неровностях. И Вам не нужно находить высоту дороги, интегрируя ускорение.
Если нужно найти абсолютную высоту дорожного полотна, то тогда используйте фильтр Калмана, у которого будут подаваться на вход информация с датчика высоты (например такой http://www.sparkfun.com/commerce/product_info.php?products_id=8128), который имеет низкую точность, но не накапливает погрешность, + акселерометр (высокая точность, накапливает погрешность).
А задача определения позиции по одному акселерометру недавно возникала, вроде красивого решения не нашли...
Аватара пользователя
Ku6opr
 
Сообщения: 50
Зарегистрирован: 19 май 2008, 12:04
Откуда: Украина, г. Харьков
прог. языки: C#, C++

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

Сообщение Michael_K » 28 мар 2010, 02:05

Meepo писал(а):Задача: посчитать высоты микропрофиля дороги (траекторию движения оси автомобиля).

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

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

Короче, фильтровать, не использовать "интеграторы", и не рассчитывать на хороший результат :pardon:
имхо.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение =DeaD= » 03 апр 2010, 15:00

Meepo писал(а):Судя по данным акселерометра. машина то уходит под землю, то взлетает

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

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

Сообщение Meepo » 08 апр 2010, 14:56

=DeaD= писал(а): И расстояние надеюсь не акселерометром меряете, а с колёс снимаете хотя-бы?

Расстояние пока по GPS (учитывая, что движение с постоянной скоростью).
=DeaD= писал(а): Так вы введите корректирующую составляющую постоянно смещающую результат измерения к 0, тогда и получите микропрофиль, а иначе вы ошибки накапливаете просто. Там глядишь и график кое-как коррелировать начнет.

Вот я и смещаю результат в 0.
то уходит под землю, то взлетает, потому считаю через некоторый промежуток времени, что скорость становится нулевая (через секунду например)
или как-то еще можно?
Ku6opr писал(а): Если это неровности, то тогда по амплитуде вибраций относительно 1g можно судить о неровностях

Каша получается не вследствие того, что ошибки накапливаются, а из-за того, что данные СИЛЬНО зашумлены. Те самые амплитуды кажутся вообще случайными. И вот как из них выделить полезный сигнал...
Michael_K писал(а):Вам нужно определиться с интересующими вас "частотами" (что такое микропрофиль?)
как по скорости, так и по ускорению и использовать не идеальный двойной интегратор,
а фильтры интересующего вас диапазона частот. Тогда результаты будут "получше"

Микропрофиль - относительные отметки по высоте, обычно с шагом 0,125м или 0,25м. Для оценки ровности необходимо выделить длины волн в диапазоне 0.63-100м. Но как из этого получить, какие частоты меня интересуют по скорости и ускорению?

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

И ещё, не знаю, оффтопик или нет, но вопрос такой: цитата из руководства: "Для фильтрации массивов записанных микропрофилей и эталонных массивов нивелирования рекомендуются фильтры четвертого порядка без сдвига фазы." и приведена передаточная характеристика фильтра - функция частоты. Я правильно понимаю, что это означает так называемую свертку в частотной области, т.е. что-то вроде этого http://www.ov4inul.ru/ov4inul1.htm ? Если да, то довольно странно фильтровать эти изначально time-domain данные в frequence-domain. Попробовал, да, действительно сглаживается, но только в области частот, а в области x-координат (пикетов, или как это назвать... в общем, функция Z-отметки от смещения относительно начала участка) получается вообще нечто страшное.
Meepo
 
Сообщения: 2
Зарегистрирован: 26 мар 2010, 08:35

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

Сообщение Michael_K » 08 апр 2010, 15:13

Кальман тут малоприменим. Кальман хорошо работает, когда о системе известно еще что-то,
кроме показаний одного датчика (дополнительные датчики, заданные значения и т.д.)

Meepo писал(а):Вот я и смещаю результат в 0.
"то уходит под землю, то взлетает, потому считаю через некоторый промежуток времени, что скорость становится нулевая (через секунду например)" или как-то еще можно?


Я же говорю, не пользуйтесь идеальными интеграторами.

Вы считаете что-то вроде "Скорость(1) = Скорость(0) + Ускорение(0)*dT",
А нужно что-то вроде "Скорость(1) = Скорость(0)*K + Ускорение(0)*dT"
Где K меньше единицы. К будет определять постоянную времени этого фильтра.

Это и будет "неидеальный интегратор", он же БИХ-фильтр ВЧ первого порядка.
Он не "периодически обнуляет", он постоянно с заданным коэффициентом "тянет сигнал к нулю".
Точно так же можно делать и фильтры КИХ (они фазы не будут сдвигать) и фильтры более высоких порядков.

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

Чтобы перевести ваши длины (0.63-100м) в частоты, нужно, очевидно, знать скорость, с которой ваша
тестовая машинка едет по дороге. Хотя диапазон очень большой (порядка восьми октав) и хорошо
обработать его будет достаточно сложно.

Что вас смутило в алгоритмах ЦОС, я не понял - частотная характеристика однозначно
переводится во временную для указанного (рабочего) диапазона частот.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение =DeaD= » 08 апр 2010, 15:22

При этом не только скорость по вертикали надо так снимать неидеальным интегратором, но еще и саму высоту.

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

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

Сообщение D1mcon » 29 апр 2010, 08:27

На первой странице есть ссылка -> http://www.openuav.astroplanes.com/library/docs/kalman_intro.pdf
Вот только она уже несколько дней не работает :( , может у кто-то раньше скачал этот документ?
Если да, то убедительная просьба поделиться.
Язык Ада - официально был признан министерством обороны США для создания ПО военной техники
Аватара пользователя
D1mcon
 
Сообщения: 700
Зарегистрирован: 08 фев 2009, 10:13
Откуда: Воротынск
прог. языки: C,C++,C#,Java
ФИО: Дмитрий

Пред.След.

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

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

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