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...

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

Уважаемому ТС стоит более подробно описать задачу, мне кажется что он пытается использовать для ее решения не то, что нужно.

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

Пока сложно что-то посоветовать. Сам строю автопилот для БПЛА и в нем использую LSM303DLHC+L3G4200D для определения ориентации в пространстве.

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

А с какой частотой можно интегрировать ускорение? Проинтегрировав дважды можно получить кватернион ориентации и вычесть g.

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

Уважаемому ТС стоит более подробно описать задачу, мне кажется что он пытается использовать для ее решения не то, что нужно.

Его задача (или подзадача), насколько я понял, получать мгновенные значения динамического ускорения (помимо положения в пространстве и скоростей). Просто так брать показания акселерометра нельзя, так как там примешано статическое ускорение — ускорение свободного падения. В общем случае в зависимости от положения объекта, вектор g имеет компоненты на каждой оси акселерометра. Их надо как-то устранить из того, что намерял и потом получил в векторе состояний фильтра. Вот чего автор хочет вроде.

Надо в фильтр, в вектор состояний, внести составляющие вектора динамического ускорения a, которые уточнять на каждом шаге.

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

Просто так брать показания акселерометра нельзя, так как там примешано статическое ускорение — ускорение свободного падения.

Это и ёжику понятно... :)

Задача: объект сместился на 10 см влево - в результате измерений я узнал что он уехал на 10 см влево - всё предельно просто.

P.S. Благодарю за ответы, пока не добрался до чтения...

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

Ладно, последняя ссылка, и все:

http://biorob.epfl.ch/files/content/sites/biorob/files/users/195094/imports/r...

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

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

Zubok ★★★★★ ()

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

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

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

В простом варианте, запоминается вектор g в неподвижном состоянии. Оси датчиков в этом состоянии будут некоей «основной» системой координат в которую будем переводить показания акселерометра, складывать с запомненным g и интегрировать. И соответственно в этой же системе координат будут оценки положения. Ну а за тем как связаны начальные оси и текущие можно узнать интегрируя измерения дус.

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

Оси датчиков в этом состоянии будут некоей «основной» системой координат в которую будем переводить показания акселерометра, складывать с запомненным g и интегрировать. И соответственно в этой же системе координат будут оценки положения. Ну а за тем как связаны начальные оси и текущие можно узнать интегрируя измерения дус.

Вот так я сейчас вроде и делаю. Всё, начинаю читать литературу и статьи всерьез, иначе я до старости не решу задачу... Господин Zubok дал ссылки на весьма хорошие подробные статьи на тему.

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

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

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

Ускорение на акселерометре будет в момент трогания и остановки + из-за вибраций конструкции, а в промежутке между этими моментами как измерять собираетесь?

pitman ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.