Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

ищу 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.074 c
15-1337000174
Внук
2012-05-14 16:56
2013.03.22
На Москву!


2-1330858890
Zheksonz
2012-03-04 15:01
2013.03.22
Прерывание по изменению значения переменной.


2-1333722471
ford
2012-04-06 18:27
2013.03.22
загрузка бинарного дерева


15-1336077005
Юрий
2012-05-04 00:30
2013.03.22
С днем рождения ! 4 мая 2012 пятница


15-1351369802
Юрий
2012-10-28 00:30
2013.03.22
С днем рождения ! 28 октября 2012 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский