Форум: "Прочее";
Текущий архив: 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