Как / Должен ли я реализовать фильтр Калмана для получения точных данных акселерометра?

Я хочу получать как можно более точные данные от встроенного акселерометра в телефоне Android. Я хочу отслеживать двумерное движение по осям x и y, и даже небольшие движения должны быть зарегистрированы.

Когда я смотрю на данные акселерометра / линейного ускорения, когда телефон лежит на столе, они сильно меняются, когда я должен быть равен нулю.

Я посмотрел фильтры Калмана, это кажется хорошим подходом, но у меня проблемы с настройкой модели.

1. Можно ли с помощью фильтра Калмана получить максимально точные данные от акселерометра?

2. Будет ли работать фильтр Калмана? Может быть, я неправильно понял, но кажется, что ускорение или скорость должны быть постоянными?

3. Как настроить модель для использования фильтра Калмана? У меня проблемы с пониманием (среди прочего), что такое шум процесса?


person Kersch    schedule 23.03.2014    source источник
comment
Думаю, это будет полезно для реализации.   -  person Y.E.S.    schedule 23.08.2017


Ответы (2)


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

Если быстро дернуть свой Android-телефон вперед и назад, произойдет сильное ускорение. Я бы посоветовал записать показания акселерометра при таком действии и просмотреть на глаз, чтобы убедиться, что показания действительно подвержены некоторому нормально распределенному шуму процесса. Я предполагаю, что ответом будет «Нет», т.е. я ожидаю, что показания при нанесении на график будут плавными. Но если они не гладкие, может быть полезен фильтр Калмана.

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

Я успешно применил фильтр Калмана к показаниям GPS на телефоне Android, чтобы улучшить оценку местоположения. См. Сглаживающие данные GPS для кода, который реализует для этого фильтр Калмана. Впоследствии я задался вопросом, можно ли использовать данные скорости и, возможно, ускорения для улучшения оценки местоположения. Хотя я никогда не развивал эту идею, см. https://dsp.stackexchange.com/questions/8860/more-on-kalman-filter-for-position-and-velocity для математических расчетов, которые я собирался использовать.

Оптимальный способ использования всех входов датчиков (GPS, акселерометр, гироскоп и т. Д.) Для получения точной оценки местоположения - очень сложная (и интересная) проблема. Чтобы узнать больше, ключевая фраза для поиска - "Sensor fusion". На эту тему есть старое видео на YouTube по адресу http://www.youtube.com/watch?v=C7JQ7Rpwn2k.

person Stochastically    schedule 24.03.2014
comment
Привет! Спасибо за ваш ответ. Это выходной сигнал оси x датчика акселерометра, когда он лежит на столе. s15.postimg.org/amcypa83v/Fig1.jpg Правый график - это необработанный результат data, а слева - это когда я пытаюсь применить к выходу простой фильтр Калмана. Левый выход кажется не очень плавным или как вы думаете? - person Kersch; 24.03.2014
comment
Я не уверен, какое движение испытывало устройство, чтобы получить эти показания, но, по-видимому, много-много быстрых движений вперед и назад. Для такого движения ускорение было бы положительным и отрицательным, что показано на графике справа. Если это так, это означает, что ваш фильтр не делает ничего разумного, потому что он сглаживает ваши данные до чего-то, что всегда немного положительно. - person Stochastically; 25.03.2014
comment
В этом чтении не было добавлено движение к устройству. Устройство все еще лежало на столе. Значит, Чтение должно было быть нулевым. - person Kersch; 25.03.2014
comment
@Kersch, и в этом случае показания точно соответствуют шуму процесса, то есть случайным колебаниям, которые (по крайней мере, на мой взгляд) выглядят так, как будто они в среднем примерно равны нулю. Кроме того, по отношению к максимальным показаниям значение фильтра Калмана также примерно равно нулю. Мне непонятно, насколько значительным является этот шум, потому что я не уверен, насколько велики значения акселерометра, когда он движется. Если их порядка 100, то приемлемым является шум порядка 0,3. но если значения акселерометра в районе 5, то шум намного проблематичнее! - person Stochastically; 25.03.2014

Вы можете найти эту ветку полезной. Я столкнулся с теми же проблемами

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

Реализуйте фильтр Калмана для сглаживания данных из deviceOrientation API

person tiny_m    schedule 10.09.2014