LINUX.ORG.RU

сопоставить данные акселерометра и магнитометра

 ,


1

1

Есть показания акселерометра соответствующие им показания магнитометра, т.е. значения захвачены одновременно:

        64        192      15296       -515         97       -148
       -64        -64      15104       -516         96       -149
        64       -256      16832       -519         96       -151
Первые три - акселерометр, второе - магнитометр.

Можно сказать что один вектор тут смотрит вверх, второй тоже некий вектор, который уже ориентирован в другое место (как известно, магнитное поле идет под некими наклонами).

Задача: хочу на основании данных магнитометра получать (вычислять) вектор G, предварительно откалибровав связку акселерометр + магнитометр.

Вопрос: Как это сделать?

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

Отговорите от безумства, может можно математически сделать такое сопоставление? Может умные люди эту давно решенную задачу делают иными известными (не мне) методами? Как-то гуглил, тупо не нашел, то ли это жутко очевидно и я конкретно затупил...

ЯННП.

Вектор G это ускорение свободного падания или что? Магнитометр выдает данные в сист.координат связанной с девайсом, акселемрометр тоже выдает данные в сист координат связанных с девайсом.

Это олин и тот же девайс или разные девайсы?

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Оба в одном корпусе сидят (одна микросхема), однако можно считать что это два независимых устройства, а данные с них читаются одновременно почти и затем пауза 10 мс (не суть). Координаты, естественно, строго связаны и одинаковые.

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Тогда вся калибровка заключается в определении связи между сист. координат магнитометра и акселерометра (если производитель уже не совместил эти сист. координат).

И чего такое G? Что хочется найти то?

AIv ★★★★★ ()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от AIv

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

Задача: хочу на основании данных магнитометра получать (вычислять) вектор G, предварительно откалибровав связку акселерометр + магнитометр.

Тогда вся калибровка заключается в определении связи между сист. координат магнитометра и акселерометра

Это очевидно. И как определить эту связь? Вот приходит вектор от магнитометра - считаем что в рабочем режиме к нам приходят ТОЛЬКО показания магнитометра.

Даже не знаю как объяснить... ну есть у нас акселерометр+магнитометр. Как вычислить соответствие магнитометра и акселерометра, чтобы из показаний лишь магнитометра определять направление вектора G...

Задача распространенная наверняка, как то же это делается...

P.S. Акселерометр лишь для того чтобы вычислить связь, например это

       -64        -64      15104       -516         96       -149
говорит что вертикальному положению соответствует "-516 96 -149", однако я же могу и вращать! И акселерометр покажет то же самое, а магнитометр - совершенно иное, ведь положение относительно магнитного поля изменилось... Но это уже другая задача, буду калибровать по положению на столе (4 возможных).

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

А какая точность нужна? в городских условиях много магнитных помех + магнитный полюс не совпадает с географическим.
Калибровку можно сделать так - располагаешь датчик на горизонтальной поверхности (можно выровнять по уровню). Поворачиваешь датчик, что бы по двум осям магнитометра было нулевое значение, тогда третья ось будет указывать на магнитный полюс Земли. Показание акселерометра будет примерным направлением G. (Подозреваю, что без списания нуля оно не обязано быть направленно к центру Земли).
Тут только надо на системы координат датчиков внимательно посмотреть и все переходы посчитать.
И еще, хрен знает насколько быстро будут показания акселерометра уходить от нулевого значения, т.е. калибровки может хватить не на долго.

four_str_sam ()

Обычно акселерометры используется для инерциальной навигации(зная исходное положение в момент времени t и ускорение легко экстоаполировать положение в момент времени t+h. Компас можно использовать для инициализации и коррекции.

invy ★★★★★ ()
Ответ на: комментарий от invy

зная исходное положение в момент времени t и ускорение легко экстоаполировать положение в момент времени t+h

Чтобы получить ускорение, которое легко получить, нужно убрать (скомпенсировать) вектор G - как предлагается легко его убрать? И чтобы стало более менее точно.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от four_str_sam

Точность - хотя бы чтобы неподвижный объект определялся как неподвижный... Для начала хотя бы так. Описанная в теме задача лишь промежуточная - нужно убрать G.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от invy

В общем да - стоит задача инерциальной навигации. А эта тема - я пытаюсь понять как избавиться от вектора G. Пробовал фильтровать постоянную - не точно. Пробовал гироскопом - сам гироскоп всё верно отображает при любых вращениях, но от G остается 0.1G - а это все равно чудовищно много.

Вот теперь пытаюсь может магнитометром скомпенсировать... Как то же это должно решаться!

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

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

four_str_sam ()
Ответ на: комментарий от I-Love-Microsoft

Ну вектор G в абсолютной СК всегда в одну сторону направлен, в СК связанной с прибором он повернется. Т.е. надо будет посчитать переход из связанной СК к абсолютной и уже в ней вычесть вектор G. Переход между СК можно посчитать по показаниям магнитометра.

four_str_sam ()
Ответ на: комментарий от four_str_sam

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

four_str_sam ()
Ответ на: комментарий от four_str_sam

лучше всего калибровать в одной и той же СК, например по алгориту, который я описывал вначале

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Т.е. вопрос в преобразовании к связанной СК? Это делается при помощи алгебры кватернионов. Углы Эйлера и матрицы поворота лучше не трогать - они имеют вырожденные точки.

four_str_sam ()
Ответ на: комментарий от four_str_sam

Я юзаю Qt, там есть QQuaternion. У меня были мысли что задача решается через кватернионы, только какое именно действие надо сделать? Подозреваю что это: http://qt-project.org/doc/qt-4.8/qquaternion.html#rotatedVector UDP: не, это не то, это уже когда будет известно значение кватерниона разницы, надо еще понять как его вычислить, каким действием?

В качестве проверки результата - на всех возможных сопоставлениях, значения кватерниона должно быть одинаковым - так?

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Вполне нормально. Для калибровки (согласования), например кладешь девайс горизонтально на стол, так, что его продольная ось указывает с юга на север. Вот и твои исходные данные и вектор G тоже. Ну либо берёшь курс с магнетометра/компаса.

Магнитные склонения для компаса(магнетометра) можно найти... Там от +4 до +6 градусов (не считая полюса, канаду и аномалии).

У них данных дофига: http://www.ngdc.noaa.gov/geomag/declination.shtml Ну и ещё magnetic inclination не забудь. http://en.wikipedia.org/wiki/Magnetic_dip Данные известные, их надо время от времени обновлять.

Ещё gps можно подключить, чтобы определить точно магнитное склонение в нужной точке.

invy ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Даже не знаю как объяснить... ну есть у нас акселерометр+магнитометр. Как вычислить соответствие магнитометра и акселерометра, чтобы из показаний лишь магнитометра определять направление вектора G...

Никак. Входных данных недостаточно, при повороте вокруг магн. поля показания магнитометра неизменны, а напр. G будет менятся отн. девайса.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

Входных данных недостаточно, при повороте вокруг магн. поля показания магнитометра неизменны, а напр. G будет менятся отн. девайса.

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

Просто хочу инерциальную навигацию, и если повороты без проблем (гироскоп + кватернионы), то получить чистое ускорение (выкинув вектор G) пока не удалось.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Как задать эту разницу между G и направлением поля всего несколькими цифрами? Так сказать, аналитическое решение.

Таблица данных с датчиков — > регрессионный анализ — > уравнение регрессии.

quickquest ★★★★★ ()
Ответ на: комментарий от quickquest

Таблица данных с датчиков — > регрессионный анализ — > уравнение регрессии.

Это похоже на мою идею в начале темы?

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Это похоже на мою идею в начале темы?

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

quickquest ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Точность - хотя бы чтобы неподвижный объект определялся как неподвижный

Акселерометром - нереально. Объект движется со скоростью 30 км/ч, без ускорения. Показания акселерометра - 0. Движемся со скоростью 40 км/ч - тот же 0.

sambist ★★ ()
Ответ на: комментарий от quickquest

Понятно... Ну неужели контроллеры типа Wii U и прочие - не вычисляют свое положение очень точно, а лишь очень приблизительно? Возможна ли инерциальная навигация в течение 5 секунд на дешевых датчиках до $100?

Просто у меня есть механизм высокоточнойточной синхронизации положения в пространстве до миллиметра, но раз в 3-5 секунд. Просто хочется «продержаться» хотя бы 5 секунд без этой опоры и быть оперативным, отслеживать эти мелкие движения между опорами, этак хотя бы 20 Гц, а на следующей опоре подстраивать.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от sambist

Знаю, но предположим я ЗНАЮ момент когда он стоял, а потому могу отследить что ускорение было и мы развили скорость.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Просто хочется «продержаться» хотя бы 5 секунд без этой опоры и быть оперативным, отслеживать эти мелкие движения между опорами, этак хотя бы 20 Гц, а на следующей опоре подстраивать.

Это сильно зависит от запаса устойчивости системы слежения, определяемой, например, по критерию Гурвица.

Возможна ли инерциальная навигация в течение 5 секунд на дешевых датчиках до $100?

Априори неизвестно, надо анализировать таблицу накопленных ошибок за эти 5 с. при граничных параметрах чувствительности датчиков.

quickquest ★★★★★ ()

А для чего тебе ветор G? Я правильно понимаю, что ты хочешь получить чистое динамическое ускорение? Мне кажется сомнительным это сделать на связке акселерометр+магнетометр. Надо еще гироскоп.

Zubok ★★★★★ ()
Ответ на: комментарий от AIv

Так с гироскопа можно же брать ориентацию и тогда все ок.

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

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Гироскоп есть. Только не получается взять «чистое ускорение», т.е. без жо.

А вот это пробовал: http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus. Мне метод кажется слишком простоватым и поэтому не очень верю в его правильность.

Обычно делают калмановскую фильтрацию.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Тогда надо читать про матметоды используемые в исн. Я могу щас нафантазировать-навелосипедить, но люди уже все это проделали же.

Гироскоп то небось лазерный? Т.е. он выдает угловые скорости по трем осям и их надо интегрировать?

AIv ★★★★★ ()
Ответ на: комментарий от Zubok

Этот метод не зря кажется простоватым - я это уже сделал и мне не помогло, там так и пишут что вычитание на основании положения в пространстве - а это гироскоп.

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

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от AIv

Гироскоп то небось лазерный? Т.е. он выдает угловые скорости по трем осям и их надо интегрировать?

Да, он самый. Надо интегрировать, делаю по прерываниям.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Значит надо смотреть как вы это делаете, и как это надо делать.

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

AIv ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Я от этого далек, мне эти наиенования ниче не грят:-)

Тогда надо смотреть как интегрируете.

AIv ★★★★★ ()
Ответ на: комментарий от AIv

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

AIv ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

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

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

А можешь тупо на выход своей системы (измерений) поставить передаточную функцию типа p^2/p+A (ну или нужную степень, смотря какую производную от измеряемого вектора ты хочешь получить). Эта маленькая добавка «A» асимптотически ничего не меняет, но избавляет от резких выбросов на границе точности...

Еще полезно помехи отфильтровать — просто воткнуть обычный фильтр Калмана на выход объекта (если его в сенсоре нету).

soomrack ★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Вот ряд бумаг как раз примерно по теме твоего вопроса. Вообще, их больше. Может, будет интересно. Глянь их модели. Оценка положения считается Калманом:

5.2.2. Dynamic Body Acceleration estimation (стр. 17):

https://hal.inria.fr/file/index/docid/783895/filename/FMAH_Chapter_Text_fig.pdf (тут, как мне кажется, тот же метод компенсации, что и выше по ссылке).

3.4.3 Gravity Compensation (стр. 19):

http://www.cse.cuhk.edu.hk/~phwl/mt/public/archives/students/cctsang.pdf - тут, кстати, вроде только гироскоп и акселерометр.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Оценка положения считается Калманом:

Не, в первой статье не Калманом, а комплементарным фильтром.

Zubok ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

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

Ну так если у тебя есть метод получать точные данные с гироскопа - значит ты что-то делаешь не так с акселерометром - может от него отсчёты идут не в фазе с данными гироскопа, недостаточная частота дискретизации или часы у тебя врут.

anonymous ()

Магнитометр не трогай, это тот ещё геморрой, Тем более, что ты используешь его по сути как гироскоп, а гироскоп у тебя есть нормальный.

Сделай фильтр Калмана.

Сформулируй модель системы в пространстве состояний. Одним из состояний должно быть ускорение g, которое в модели будет влиять на показания акселерометра, но не будет влиять на изменение координат. К этой модели прикрути калманов алгоритм. Поставь девайс рядом с датчиком положения в пространстве. Адаптивный алгоритм через несколько итераций определит, что ускорение есть, а перемещения нету — и выдаст оценку параметра g. В процессе работы эту оценку он будет постоянно корректировать.

prischeyadro ★★★☆☆ ()
Ответ на: комментарий от AIv

Вот еще, кстати. Связка гироскоп_акселерометр. Хотя тут задача ставится правильно посчитать скорость на наклонных поверхностях по измерениям ускорения, но без учета g.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.