Мировые эталонные значения датчика акселерометра при ходьбе

Я пытался разработать приложение Pedestrian Dead Reckoning для Android, и после того, как я позаботился о компонентах обнаружения шагов и длины шага, я решил заняться проблемой определения ориентации.

Наткнувшись на пару сообщений о координате transformation (и даже общение с частым answerer), я постепенно получаю лучшие результаты, но меня все еще беспокоят некоторые вещи.

Эксперимент:

Я пошел вперед на север, повернул назад и пошел обратно на юг. Повторил процедуру в сторону Запада, затем Востока.

Проблемы:

  1. Я ожидал, что при движении прямо в нескольких направлениях значения значений X и Y будут колебаться вместе с шагами и иметь относительно стабильное значение Z на всем протяжении. Вместо этого значения Y ведут себя таким образом, а значение Z имеет ожидаемое поведение. Почему? Это как-то связано с тем, что я не использую remapCoordinates()? (см. график 1)

  2. Я ожидал, что угловые графики будут прыгать примерно на 180º и -180º, но почему они также делают это около 35º? (см. график 2)

Примечания:

  • Я использую значения силы тяжести и магнитометра для вычисления матрицы вращения и умножаю ее с помощью OpenGL multiplyMV();
  • Я не использую remapCoordinates(), потому что думал, что в этом нет необходимости: телефон лежит в кармане вертикально (Y указывает вверх/вниз, Z обычно вперед) и должен сместиться на 45º вперед назад. и вперед, в худшем случае;
  • Значения азимута кажутся нормальными и не имеют колебаний, описанных в проблеме 2 (см. график 3).

Графики:

Ускорение силы тяжести в мире Ускорение мировой системы отсчета (синий – X, красный – Y, зеленый – Z)

Эталонные углы гравитации мира Значения Atan2 из мировых координат (синий — это atan2 (Y/X), красный — это atan2 (Z/Y) и зеленый это atan2(Z/X) )

Значения ориентации Значения ориентации (синий – азимут, красный – шаг, зеленый – крен)


person ravemir    schedule 21.04.2013    source источник
comment
Я понятия не имею, что означает ваш график. Что представляют собой оси x и y и что обозначают цвета?   -  person Hoan Nguyen    schedule 22.04.2013
comment
Вы можете щелкнуть графики, чтобы увидеть увеличенное изображение. Но у первого есть мировые эталонные значения ускорения, вычисленные из матрицы вращения с использованием значений гравитации (синий — это X, красный — Y, зеленый — Z). Второй — это значения atan2, вычисленные с указанным выше ускорением (синий — Y/X, красный — Z/Y, зеленый — Z/X). Наконец, третье — это значения getOrientation() (синий — азимут, красный — тангаж, зеленый — крен).   -  person ravemir    schedule 22.04.2013
comment
На вопрос 1 какое положение телефона в кармане? экран телефона смотрит в ту же сторону, что и ходячий?   -  person Hoan Nguyen    schedule 23.04.2013
comment
Обычно телефон находится в портретном положении, экраном к пользователю (таким образом, против направления движения). Имеет ли значение ориентация экрана? А если нам нужна только относительная ориентация? (имеется в виду относительно начала)   -  person ravemir    schedule 23.04.2013
comment
Измерение графика идет только на север или включает все данные?   -  person Hoan Nguyen    schedule 23.04.2013
comment
Для вопроса 1 вам не нужно переназначать координаты. Вы ожидаете, что Y будет демонстрировать какое-то периодическое поведение (ходячая походка). Z также периодически меняются, поскольку движение вверх и вниз вносит ускорение в направлении силы тяжести. X зависит от того, как ходок машет ногой, но также должен быть периодическим.   -  person Hoan Nguyen    schedule 23.04.2013
comment
Никакая ориентация телефона не имеет значения, по крайней мере, для вопроса 1, если X, Y, Z - мировые координаты.   -  person Hoan Nguyen    schedule 23.04.2013
comment
Одна вещь, которую я не упомянул, заключалась в том, что я делаю проекцию на мировые координаты, умножая матрицу вращения на вектор гравитации. Может ли этот аспект влиять на странное поведение графиков Y и Z первого графика?   -  person ravemir    schedule 23.04.2013
comment
И да: графики строятся по всем данным, а не только по ряду шагов   -  person ravemir    schedule 23.04.2013
comment
Я не думаю прямо последние пару дней. Когда моя голова прояснится, я дам вам больше комментариев. Я думаю, вы должны сначала построить свой график для ходьбы в каждом направлении отдельно. Вы имеете в виду, умножая матрицу вращения на вектор гравитации, что вы передаете вектор гравитации в getRotationMatrix?   -  person Hoan Nguyen    schedule 23.04.2013
comment
Нет. Я передаю вектор гравитации в метод getRotationMatrix(), так как он должен давать более точные результаты. Я имел в виду, что затем я умножил эту матрицу вращения на тот же вектор силы тяжести (я использовал нефильтрованное ускорение в предыдущих случаях, и когда я решил заменить его, чтобы получить дополнительную точность, я по ошибке заменил его). Между тем, я вчера исправил, что умножение должно быть сделано на датчике LINEAR_ACCELERATION (ускорение - гравитация), но значения все равно кажутся странными. Выложу графики через секунду.   -  person ravemir    schedule 24.04.2013
comment
И вообще, не торопитесь. Может быть, моя собственная нехватка времени может затуманить мое суждение о том, что отсутствует/неправильно.   -  person ravemir    schedule 24.04.2013
comment
давайте продолжим это обсуждение в чате   -  person ravemir    schedule 24.04.2013
comment
Разместил графики с разделением каждого компонента, как и просили, в чате.   -  person ravemir    schedule 26.04.2013
comment
Я добавляю новое сообщение, следует проверять чат при входе в систему.   -  person Hoan Nguyen    schedule 26.04.2013