Мировые эталонные значения для датчика акселерометра при ходьбе
Я пытался разработать приложение Pedestrian Dead Reckoning для Android, и, позаботившись о компонентах обнаружения и длины шага, я решил заняться проблемой определения ориентации.
После того, как я наткнулся на пару постов, касающихся преобразования координат (и даже в чате с частым Hoan Nguyen), я постепенно Hoan Nguyen лучших результатов, но некоторые вещи меня беспокоят.
Эксперимент:
Я пошел вперед на север, повернул назад и пошел обратно на юг. Повторили процедуру в направлении на запад, затем на восток.
Вопросы:
Я ожидал, что, идя прямо в нескольких направлениях, значения X и Y колеблются с шагами и имеют относительно стабильное значение Z на всем протяжении. Вместо этого значения Y ведут себя так, а значение Z имеет ожидаемое поведение. Как так? Это как-то связано со мной, не используя remapCoordinates ()? (см. график 1)
Я ожидал, что угловые графики будут прыгать около 180º и -180º, но почему они также делают это около 35º? (см. график 2)
Заметки:
- Я использую значения силы тяжести и магнитометра для вычисления матрицы вращения и умножения ее с помощью метода multiplyMV() OpenGL;
- Я не использую remapCoordinates (), потому что я думал, что мне не нужно: телефон стоит прямо в моем кармане (Y указывает вверх / вниз, Z обычно вперед) и должен смещаться на 45º вперед и назад, в худшем случае;
- Значения азимута кажутся нормальными и не имеют колебаний, описанных в выпуске 2. (см. График 3)
Графы:
Мировое эталонное ускорение силы тяжести (синий X, красный Y, зеленый Z)
Мировые опорные гравитационные углы (синий atan2(Y/X), красный atan2(Z/Y) и зеленый atan2(Z/X))
Значения ориентации (синий - азимут, красный - высота, а зеленый - рулон)