Куда указывает компас iPhone? (математический вопрос, а не география)

Я заметил действительно загадочное поведение на iPhone:

Если я держу телефон вертикально и наклоняю его, компас меняется.

Я уже прикинул, что величина, на которую он изменяется, равна той же величине, на которую он изменился бы при той же величине наклона, если бы он был в горизонтальном положении (т. е. предположим, что вектор, исходящий от экрана, называется Y, поворот вокруг Y не имеет значения, положение iPhone приводит к изменению компаса).

Я хочу компенсировать это, мое приложение не было сделано для того, чтобы вы держали телефон в горизонтальном положении (хотя я также планирую разрешить некоторый наклон по оси X, скажем так, от 10 градусов до 135)

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


person speeder    schedule 21.03.2011    source источник


Ответы (1)


После некоторых экспериментов в научном стиле я обнаружил:

У iPhone есть магнитометр, у него есть 3 оси X, которые идут слева направо от экрана. Y, который идет снизу вверх. И Z, который выходит из-за телефона и выходит вперед.

Магнитное поле Земли, как и ожидалось по законам физики, не является сферой, в том месте, где я нахожусь (Бразилия), оно наклонено примерно на 30 градусов. (это означает, что я должен держать телефон под углом 30 градусов к нулевой оси 2).

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

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

Сам iPhone имеет сложную процедуру для определения «истинного курса», я не совсем понял, но он каким-то образом использует акселерометр для компенсации наклона. Вы можете использовать акселерометр и компенсировать обратно, если хотите, например, если телефон наклонен на 70 градусов, вы также можете изменить истинный курс на 70 градусов, и в результате телефон будет игнорировать наклон.

Также процедура истинного курса, проверьте, перевернут ли iPhone или нет. Если рассматривать его по горизонтали, перед вами как 0, то примерно на 135 градусов он решает, что он перевернут, переворачивая результаты.

Обратите внимание, что та же система координат применяется и к акселерометру, что позволяет использовать векторные операции между данными акселерометра и магнитометра без особых возни.

person speeder    schedule 23.03.2011
comment
Отличный ответ, спидер, но с одной неточностью: истинный курс рассчитывается по информации о местоположении, а не по акселерометру. В зависимости от вашего местоположения на земле, он рассчитывает, насколько магнитный курс отклоняется от истинного северного полюса. - person fishinear; 14.03.2012