Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

ищу complementary filter на java/c/c++/c#/delphi   Найти похожие ветки 

 
Vulko   (2012-01-24 14:12) [0]

собсно сабж. нагуглить ничего толкового не получилось, нашел только реализацию на питоне, но там без пол литра не разобраться.


 
MBo ©   (2012-01-24 15:58) [1]

>complementary filter

На твой взгляд, задача полностью определена этими словами?


 
MBo ©   (2012-01-24 16:23) [2]

Впрочем, вот несложный пример:

var
 i: Integer;
 Src, Last, IIRLowPass, ComplementaryHighPass: Double;
begin
 Randomize;
 Last := 0;
 for i := -99 to 99 do begin
   Src := Pi/2 + ArcTan(i/10) + 0.5 * Random;
   IIRLowPass := Src * 0.2 + Last * 0.8;
   ComplementaryHighPass := Src - IIRLowPass;
   Series1.Add(Src);
   Series2.Add(IIRLowPass);
   Series3.Add(ComplementaryHighPass);
   Last := IIRLowPass;
 end;


 
sniknik ©   (2012-01-24 18:08) [3]

> без пол литра
> Впрочем, вот несложный пример:
а здесь без литра не разберешься... ;)


 
Jeer ©   (2012-01-25 10:22) [4]


> а здесь без литра не разберешься... ;)


Да ладно, обычный нерекурсивный фильтр нижних частот (ФНЧ) первого порядка, преобразованный к фильтру высоких частот (ФВЧ) того же порядка комплементарной операцией вычитания :)


 
Vulko   (2012-01-25 12:29) [5]


> Впрочем, вот несложный пример:


Спасибо, но это не то что нужно. Разница между сигналом и сигналом пропущенным через лоу пасс фильтр врядли можно назвать complementary фильтром.


 
Компромисс ©   (2012-01-25 13:10) [6]

http://stackoverflow.com/questions/7553417/complementary-filter-gyro-accel-with-android

?

Вторая ссылка в поисковике.


 
Vulko   (2012-01-25 14:26) [7]


> Вторая ссылка в поисковике.


Спасибо этот тред читал уже, ничего полезного. Все вокруг да около, примеров кода не нашел.


 
Jeer ©   (2012-01-25 14:37) [8]


> Спасибо этот тред читал уже, ничего полезного.


Читать можно и Кама-Сутру, а справишься ? :)

http://rus.625-net.ru/625/1994/05/filters.htm


 
Vulko   (2012-01-25 14:48) [9]


> Читать можно и Кама-Сутру, а справишься ? :)


Спасибо за ссылку, но опять же, это все теория. Нужен готовый код. Если у кого есть готовая реализация или ссылка на оную, буду очень благодарен.


 
Jeer ©   (2012-01-25 16:12) [10]


> Спасибо за ссылку, но опять же, это все теория.


Понятно, значит нам писатель попался и читать готовый код в [2] он не в состоянии, в принципе.
Ну, так иди и пиши, сам.


 
Vulko   (2012-01-25 16:25) [11]


> Понятно, значит нам писатель попался и читать готовый код
> в [2] он не в состоянии, в принципе.
> Ну, так иди и пиши, сам.


Там один фильтр, complementary как минимум из 2х состоит. Например лоу пас и хай пасс. Как они отдельно работают понятно, непонятно только как их прикрутить вместе в конкретную задачу. А задача стоит инерциальной навигации, и фильтровать нужно значения с гироскопа и акселерометра для получения ориентации.

Ваше мнение понял, спасибо.


 
icelex ©   (2012-01-25 17:11) [12]


> Vulko   (25.01.12 16:25) [11]

наймите программиста


 
Vulko   (2012-01-25 17:28) [13]


> наймите программиста


спасибо, я сам программист :) немного ленивый только :)


 
Jeer ©   (2012-01-25 17:39) [14]


>  А задача стоит инерциальной навигации, и фильтровать нужно
> значения с гироскопа и акселерометра для получения ориентации.
>


Ути-пути - какие слова страшные знаешь. Вот потому Фобосы в грунты и падают, программисты хреновы.


 
Jeer ©   (2012-01-25 17:55) [15]

Вот скажу тебе одну вещь - еще фон Браун ( да - то самый) в 30-х годах прошлого века, изобрел фильтр, который и стал называться его именем "фильтр Брауна".

Идея проста, как дырка от бублика.

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

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

Так вот Браун и изобрел способ комплексирования датчиков одного и того же параметра, но имеющих разные частотные характеристики ( разные корреляционные функции ошибок ).

Что он сделал ? Так правильно же: сигнал от гирополукомпаса пропустил через ФВЧ и отсек дрейф, а сигнал от магнитного компаса пропустил через ФНЧ и убрал динамические помехи.
Ну еще немного логики и он вводит слежение ( медленное приведение ) сигнала гирополукомпаса за отфильтрованным магнитным курсом.

Вуаля ! Причем, тогда не было компьютеров, заметь.

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


 
Jeer ©   (2012-01-25 18:10) [16]

Тут разжевано:
http://robottini.altervista.org/kalman-filter-vs-complementary-filter


 
Jeer ©   (2012-01-25 18:13) [17]

А вот тут + блок-схемы и простой теории, для наглядности
http://www.google.ru/url?sa=t&rct=j&q=Complementary+Filter+%D0%B8%D0%BB%D0%B8+Kalman+Filter&source=web&cd=1&ved=0CCUQFjAA&url=http%3A%2F%2Fproyectos.ciii.frc.utn.edu.ar%2Fcuadricoptero%2Fexport%2F7a5787cfd2f0d9b174a451d421f6dcfc5dfd4467%2Farticulo_case_filtro_comp%2Freferencias%2FA%2520comparison%2520of%2520complementary%2520and%2520kalman%2520filtering.pdf&ei=RQsgT4-FDO714QTH8fnADw&usg=AFQjCNG5z3JLqOXC607Dor4t1u34UMUBNg&cad=rja


 
Vulko   (2012-01-25 18:33) [18]


> Вот скажу тебе одну вещь - еще фон Браун ( да - то самый)
> в 30-х годах прошлого века, изобрел фильтр, который и стал
> называться его именем "фильтр Брауна".


Спасибо. Есть еще вот какой вопрос, из материалов одного роботостроителя нашел вот такой подход:
angle = (0.98)*(angle + gyro * dt) + (0.02)*(x_acc);

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

Насколько я понял, этот Кулибин выбрал такой подход из-за недостатка понимания математических формул. Или быть может он был прав и на практике такой простой подход даст хороший результат?


 
Vulko   (2012-01-25 18:37) [19]

И еще один вопрос, надеюсь не надоел еще :)
Имеет ли смысл пробовать фильтр брауна, если точность магнитометра очень и очень посредственная. А точнее речь идет о сенсорах встраиваемых в мобильные телефоны и планшеты.


 
Jeer ©   (2012-01-26 10:03) [20]


> этот Кулибин выбрал такой подход


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

По поводу Кулибина..
Это как раз случай управления с помощью двух взвешенных П[Д]-регуляторов.
Смысл в том, что одной управляющей величиной (ускорением опоры) управлять двумя величинами (углом и положением опоры) невозможно, в общем случае.
Но в частном случае, когда требуется привести угол и положение в ноль - это возможно. Т.е. сводим к нулю их взвешенную сумму.

Соблюдение размерности не обязательно, т.к. могут иметь место эвристические или сильно упрощенные стратегии управления, но работающие при ограниченных условиях и/или с ограниченным качеством.
Но, вполне возможна ситуация, что при изменении условий работы ( например, подул ветер ), САУ не справится с таким случаем и произойдет отказ функционирования.


> Имеет ли смысл пробовать фильтр брауна, если точность магнитометра
> очень и очень посредственная


Вопрос непростой, поскольку у того же Гармина только спустя два года более-менее устаканились алгоритмы комплексирования GPS и трехосного магнитометра.

P.S.
Вообще же, советую, кроме догадок, заняться моделирующими системами класса матлаб, vissim и иже. Съэкономите кучу времени на проверке алгоритмов в тех или иных условиях.
Ну и книженции почитать, не мешает.

P.P.S.
И вопросы постарайтесь впредь задавать в более расширенном варианте, если хотите, чтобы Вас не мучали переспросами, а то ведь люди могут и вооще промолчать :)


 
Сергей М. ©   (2012-01-26 10:26) [21]


> нагуглить ничего толкового не получилось


Видать не туда гуглил..

OpenCV в гугле из каждой подворотни выглядывает, и Калман в ней чуть ли не впереди на лихом белом коне)


 
Vulko   (2012-01-26 12:06) [22]


> И вопросы постарайтесь впредь задавать в более расширенном
> варианте, если хотите, чтобы Вас не мучали переспросами,
>  а то ведь люди могут и вооще промолчать :)


Спасибо.


 
Vulko   (2012-01-27 14:06) [23]


> P.P.S.
> И вопросы постарайтесь впредь задавать в более расширенном
> варианте, если хотите, чтобы Вас не мучали переспросами,
>  а то ведь люди могут и вооще промолчать :)


Еще один вопрос назрел. Для complementary фильтра часто используют данные с акселерометра и гироскопа. Попробовал реализацию фильтра по ссылке (http://robottini.altervista.org/kalman-filter-vs-complementary-filter), в фильтр кидают данные с гироскопа и пересчитанные углы с акселерометра через арктангенс. С акселерометра можно посчитать только Pitch и Roll (крен и тангаж). В последующих вычислениях используются данные с сенсоров, а не эти углы. Пробовал брать данные с магнетометра, но после фильтрации получаются дикие значения. Возможно нужно подобрать константы? Или все же проблема в другом?


 
Jeer ©   (2012-01-27 22:27) [24]

Поговорить за тему, конечно, можно - да я не уверен, что даже "термин" гироскоп мы с тобой одинаково пониманием. :)

P.S.
Изложи задачу в целом, тщательно подбирая нужные слова из инженерной и научной практики.


 
Vulko   (2012-02-01 13:58) [25]

Под гироскопом подразумевается полупроводниковый сенсор, который выдает угловые скорости в эйлеровой системе координат, т.е. привязанных к устройству. Такие сенсоры ставят на телефоны и прочие мобильные устройства.

Под акселерометром подразумевается полупроводниковый сенсор, выдающие ускорения по 3м осям, XYZ, в декартовой системе координат, привязанной опять же к устройству, без учета G (ускорения свободного падения). Ну и под магнетометром соответственно подразумевается полупроводниковый сенсор.

Мат модель подразумевает использование rotation matrix (в русской версии, очевидно, матрица поворота) на входе, в результате нихитрых вычислений получаем 2 вектора, скоростей и пройденной дистанции по 3м осям. За основу взята вот эта публикация http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-696.pdf.

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

И все же начинать нужно с гироскопа - фильтровать данные по 2м сенсорам - гироскоп и акселерометр, например. Но тут возникает одна небольшая проблема. Для complemantary фильтра обычно используют сырые данные гироскопа и пересчитанные через арктангесн углы с акселерометра. Которых можно получить только 2, остается азимут. В принципе его можно взять с магнитометра, который к сожалению очень неточен.

Углы я так понимаю должны быть в радианах?! Поскольку у сенсоров частота снятия сигнала примерно одинаковая, в ~95% случаев 10мс, изредка бывают отклонения 7-13мс, коэффициенты можно считать константами, а не пересчитывать исходя из дельты времени между снятием сигналов.
Ну и наконец, камнем предкновения остается разная частота снятия сигналов с гироскопа и акселерометра, в виду платформы на которой все это дело реализовывается (android). Возникает вопрос, что делать с более быстро валящимися данными гироскопа - апроксимировать средним значением? Или брать последнее сходное по времени со снятием данных с акселерометра?

Стоит задача инерциальной навигации в "гражданских" целях :)
Калман очевидно не подходит, т.к. слишком много вариантов движения устройства.


 
Jeer ©   (2012-02-01 14:59) [26]

Теперь понятно.

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

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

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

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

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


 
Jeer ©   (2012-02-01 15:52) [27]

Кстати, посмотрел талмуд по ссылке - там хорошо разобраны погрешности MEMS-сенсоров.

Это должно лечь в основу выбора алгоритмов комплексирования.
Как ?

1. Прежде всего, создать мат.модель сенсоров ( MathLab, VisSim и др ).
Изучить влияние того на се, выбрать подходящие по цене/параметры сенсоры.

2. Затем в этих же пакетах реализовать несколько алгоритмов чистой инерциалки. Изучить результаты.

3. Создать error-модель магнитометра, скомплексировать с инерциалкой, изучить.

4. Создать error-модель GPS-приемника.
Реализовать комплексирование инерциалки и gps - изучить и выбрать оптимум.

Где-то примерно так.

P.S.
Будут вопросы, отвечу.


 
Jeer ©   (2012-02-01 16:36) [28]

P.S.
Доглядел талмуд до конца - таки присутствует у них там тулза симуляции по модели ошибок, с этого и вам надо начинать.


 
Vulko   (2012-02-01 17:04) [29]

Спасибо, будем копать.

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

Хотелось бы добиться более или менее приличных результатов хотя бы для не более чем 10 минут, с ошибкой примерно в 100 метров. По идее должно быть достаточно реализуемо. Есть ведь неплохие разработки, например у того же гугла есть SensorFusion, где они добились высокой точности MEMS гироскопа. Используя сырые данные с гироскопа накапливается погрешность в 45 градусов за считанные секунды.
Посмотрел кино на youtube с 45 минутной презентацией, и вдохновился :) Думаю если у них получилось добиться точности данных с гироскопа, возможно добиться более или менее приличной точности инерциальной навигации.


 
Jeer ©   (2012-02-01 18:37) [30]

Пока (на сегодня и при ваших условиях) больше чем на 10 мин и чисто инерциальную погрешность в пределах 100 м (одна сигма) не стоит особо рассчитывать.
Т.е. чистая инерциалка на MEMS - 1 км/час, да и то.. алгоритмической мути выше крыши.

P.S.
Спорить не буду - техника рвется вперед: "завтра будет лучше, чем вчера"


 
Jeer ©   (2012-02-02 10:06) [31]


> Используя сырые данные с гироскопа накапливается погрешность
> в 45 градусов за считанные секунды.


Естественно.

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

Для коррекции свободных гироскопов необходимо так или иначе иметь относительно устойчивые "построители" направлений.

Летуны ( микро-БПЛА ) используют в качестве "вертикали" - пировертикаль, т.е. различение земли и неба по температуре, что дает вполне устойчивую вертикаль. Магнетометр - тоже используют.

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

В вашем случае, если магнетометр еще и будет работать, то указанные построители вертикали просто неприемлемы.

Радиочастотный (фазовый) же метод определения углового положения в каждый тоннель не поставишь :)


 
Vulko   (2012-03-02 12:48) [32]

Может посоветуете какую литературу по Sensor Fusion"у, а именно фильтрации данных с акселерометра и гироскопа (mems)? Ничего толкового найти не получается, все вокруг да около, либо в другой области.


 
Jeer ©   (2012-03-02 16:58) [33]

http://old.gps.aau.dk/downloads/fusion.pdf
http://www.cs.utah.edu/~tch/publications/pub191.pdf


 
Vulko   (2012-03-05 14:47) [34]

Спасибо, первая презенташка так и не раскрывает "магии" (формул). Вторая простая и интересная имплементация, спасибо. Эти уже читал. Возможно есть что-то посложнее и внушительнее, но попроще математика калмана? :)


 
Jeer ©   (2012-03-05 15:39) [35]

Винер - теория.
Калман и Бьюси - это классика практики, куда уж проще :)
Это разновидность рекурсивного фильтра с блоком предсказания ( экстраполяции ).

Все, что проще - это эмпирика или полуэмпирика, либо иной подход к оценке вектора состояния объекта.


 
Jeer ©   (2012-03-05 15:53) [36]

В качестве базиса по БИНС:
Бранец, Шмыглевский, 1992
"Введение в теорию БИНС"


 
Jeer ©   (2012-03-05 16:02) [37]

По поводу иных подходов могу привести пример оценки ( прогнозирования ) состояния энергетических нагрузок пром.предприятий на основе гибридного подхода: фильтр Брауна + нейросеть.
Институт точной механики и проблем управления, Саратов.
Васильев, Колоколов, Иващенко.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.072 c
15-1345118559
Es
2012-08-16 16:02
2013.03.22
ADO + Ora = пропихнуть в хранимку blob более 32 кбайт


15-1338563526
Медвежонок Пятачок
2012-06-01 19:12
2013.03.22
Сменить глобус проживания


15-1332859127
Unknown user
2012-03-27 18:38
2013.03.22
Структура БД в XML


15-1353950365
Разведка
2012-11-26 21:19
2013.03.22
Проблема принтера для чеков VKP-80-II


15-1348271391
Rouse_
2012-09-22 03:49
2013.03.22
Не устанавливайте iOS 6