2012-01-31 1 views
3

Похожих на этот вопрос: CMDeviceMotion userAcceleration driftЕсть ли способ, чтобы удалить небольшой уклон вдоль оси тяжести в данном акселерометре

Я использую CMDeviceMotion.userAcceleration в iOS5 SDK для построения его х, у, г компонентов со временем. Как и в предыдущем сообщении, я вижу, что компонент ускорения z показывает всегда небольшие положительные значения (0,005-0,015), тогда как компоненты x и y центрируют по ноль (-0.005 - 0.005), когда мой iPhone 4s сидит на ровной поверхности.

Это небольшое смещение продолжает складываться с оценкой скорости (которую я вычисляю, интегрируя данные ускорения), даже когда мой телефон немного не двигается. Есть ли какой-либо известный способ удалить это смещение из данных акселерометра? Я не могу просто вычесть смещение из z-компонента, потому что кажется, что смещение распространяется по x y и z вдоль оси тяжести, если устройство находится в некоторой произвольной ориентации.

Я знаю, что данные в CMDeviceMotion.userAcceleration уже учитывали гравитацию с использованием данных гироскопа, но задаются вопросом, есть ли эффективный способ устранения этого остаточного смещения?

ответ

1

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

UPDATE: Вы не можете получить относительное перемещение, просто интегрируя ускорение, см. Мой ответ на Android accelerometer accuracy (Inertial navigation). Тем не менее, я приведу несколько примеров того, что вы на самом деле может сделать.

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

+0

Спасибо за ответ. Чтобы быть ясным, я ищу способ эффективно компенсировать смещение в данных необработанного акселерометра (а не об ошибке интеграции на данный момент). Это нормально, если для этого требуется какой-либо шаг калибровки, но не уверен, как фильтр Калмана поможет в этом случае. – atisman

+0

Датчики с датчиками MEMS всегда будут дрейфовать, они чувствительны к изменениям температуры среди других, и вы не можете слишком много сделать с этим ... Если вы не интегрируете, то почему небольшое отклонение вызывает проблемы? Чем бы Вы хотели заняться? – Ali

+0

В этот момент я просто пытаюсь понять эти датчики и связанные с ними API iOS и то, что я могу получить от них. Моя первоначальная цель - получить относительное смещение двух произвольных позиций iPhone как можно точнее. Но при этом постоянном положительном смещении ошибка смещения кажется слишком большой даже без учета какой-либо ошибки на этапе интеграции. Например, количество 0,0015 г/с^2 даст примерно 7,35 см смещения через 1 секунду (на основе формулы 1/2at^2) без какого-либо движения телефона. – atisman

-1

Thanks Ali для обновления вашего ответа и других ссылок. Они, безусловно, помогли мне понять эту проблему (и я был удивлен, увидев, сколько людей интересуется этой проблемой). Я могу казаться немного упрямым, но я все еще думаю, что не нашел ответа на свой первоначальный вопрос нигде. Давайте забудем об интеграции сейчас. С большим количеством экспериментов я вижу некоторые постоянные смещения (хотя и меньшие) по осям х и у, а также, когда я усреднил данные ускорения пользователя с течением времени. Мне просто интересно, есть ли способ удалить эти предубеждения из «пользовательских» данных ускорения, которые я получаю от iOS5 CMDeviceMotion. Если они были вызваны белым шумом гироскопа в процессе фильтрации гравитации, я думаю, мы можем видеть случайный шум в данных пользовательского акселерометра, но не эти предубеждения. Но, по моему впечатлению, кажется, что эти предубеждения вызваны ограниченной «точностью» как акселерометра, так и гироскопа, и мы ничего не можем с этим поделать, хотя я не уверен на 100%. Я пытался выразить свое мнение в комментарии (не в разделе ответа), но SO не разрешал, потому что он был слишком длинным, но мне было интересно, сколько людей будет поддерживать мое впечатление путем голосования, поэтому я решил включить его в раздел ответов. .. Извините, если я немного рассердился.

+1

[Пункты] (http://en.wikipedia.org/wiki/Paragraph) – musefan

+0

Усреднение ускорения для получения «смещения», а затем применение «1/2 at^2' * является * интеграцией. Формула «1/2 cx^2» является общим результатом интеграции константы 'c' дважды. Пожалуйста, примите ответ Али. Кстати, если только ошибка не будет измеряться одинаковой каждый раз, это не будет предубеждением. – Potatoswatter

1

Старый вопрос, но я хотел поделиться некоторым прозрением. Часть смещения в акселерометрах фактически не исходит из каких-либо неточностей в датчиках, а из-за недосмотра в расчетах, которые делает Apple. В расчетах предполагается, что гравитация всегда равна 1 G (что по определению 9,80665 м/с2). Тогда любое оставшееся время должно быть ускорением пользователя.

Однако, gravity varies slightly во всем мире. Если гравитация в вашей области не совсем соответствует 9,80665 м/с2, тогда будет небольшое смещение в ускорении пользователя, которое можно обнаружить с помощью фильтра нижних частот.Такое смещение может удалить с помощью следующего расчета:

- (void) handleDeviceMotion:(CMDeviceMotion *)m atTime:(NSDate *)time 
{ 
    // calculate user acceleration in the direction of gravity 
    double verticalAcceleration = m.gravity.x * m.userAcceleration.x + 
            m.gravity.y * m.userAcceleration.y + 
            m.gravity.z * m.userAcceleration.z; 

    // update the bias in low pass filter (bias is an object variable) 
    double delta = verticalAcceleration - bias; 
    if (ABS(delta) < 0.1) bias += 0.01 * delta; 

    // remove bias from user acceleration 
    CMAcceleration acceleration; 
    acceleration.x = m.userAcceleration.x - bias * m.gravity.x; 
    acceleration.y = m.userAcceleration.y - bias * m.gravity.y; 
    acceleration.z = m.userAcceleration.z - bias * m.gravity.z; 

    // do something with acceleration 
} 

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

Смежные вопросы