Попытка откалибровать акселерометр - PullRequest
4 голосов
/ 02 августа 2011

Я пишу приложение, которое будет использовать акселерометр для расчета средней силы нажатия на телефон. Размышляя о проблеме, я пришел к выводу, что, когда телефон находится в состоянии покоя, сложение всех значений осей вместе даст мне ответ +9,8 (ускорение под действием силы тяжести).

Теперь я предположил, что если вычесть 9,8 из суммы всех осей, это даст мне объединенную силу, действующую на телефон без учета силы тяжести. Поэтому, если телефон должен быть в фиксированном положении, он вернет значение 0.

Теперь это действительно так, если телефон лежит прямо на одной оси, но если телефон будет лежать на чем-то под углом ~ 45 градусов, он возвращает значение 4-5 (примерно вдвое меньше, чем сила тяжести) чем ближе угол к оси, тем меньше зарегистрированная сила (собираюсь пойти дальше и предположить, что она пропорциональна)

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

1 Ответ

1 голос
/ 02 августа 2011

Значение 4-5 м / с2 указывает либо на небольшую ошибку в ваших расчетах, либо на аппаратный дефект.Вы сказали, что добавляете все значения, но как вы это делаете?Вы должны рассчитать величину как sqrt (x * x + y * y + z * z).Это связано с тем, что ускорение, такое как скорость, положение, ... являются векторами, а их длина рассчитывается в соответствии с теоремой Пифагора .

Как правило, эти датчики неТочно так, как вы могли ожидать.На iPhone я измерял значения g-force от 9,75 до 9,87.Значения зависят от температуры (поместите ее в холодильник, и вы получите более низкие значения - я проверил это ;-), и действительно есть различия при изменении ориентации.Я нашел значение дельты 0,3 м / с2.Чтобы исправить это, вам понадобятся тяжелые математические вычисления ( Kalman-Filter или подобные) и, конечно, второй датчик (гироскоп, потому что магнитометр, т. Е. Компас, реагирует слишком медленно).

...