Как преобразовать 3D-ускорение во вращение? - PullRequest
1 голос
/ 05 февраля 2011

У меня есть программа, которая использует акселерометр в Windows Phone 7, и мне нужно определить, каково вращение устройства. У меня есть ускорения X, Y, Z, и мне нужно как-то выяснить ориентацию телефона на основе этого. Как это можно сделать? (Значения вращения должны быть в градусах)

Ответы [ 3 ]

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

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

Используя акселерометр, вы можете толькообнаружение поворота вокруг оси X и оси Z, но не оси Y.

Предположим, что ваш телефон находится в положении покоя, сила тяжести приведет к ускорению Y, равному -9,8, иУскорение X и Z будет около 0.

Предположим, что телефон остается плоским в положении.При повороте телефона вокруг оси Y (при условии, что при повороте телефон не переводится или не изменяется в положении телефона), значительных изменений значений ускорения X, Y и Z не происходит.Таким образом, вы не можете обнаружить вращение вокруг оси Y.

При вращении вокруг оси X и Z (при условии отсутствия изменения положения телефона при вращении) все 3 значения ускорения изменяются, но векторыбудет иметь характеристику x ^ 2 + y ^ 2 + z ^ 2 = 9,8 ^ 2.

Вы можете использовать простую тригонометрическую формулу для определения поворота вокруг осей Z и Z.

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

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

Если вы хотите, чтобы угол поворота телефона удерживался в ваших руках (т.е. вращался в одной плоскости), скажем, удерживал его лицом к груди ...

atan2 (у ускорения, х ускорения)

Вы получите значения поворота :) Вероятно, это будет нервно, поэтому вам, вероятно, понадобится усреднить результаты за период выборки, чтобы сгладить их.

1 голос
/ 08 февраля 2011

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

1) Пользователи должны держать устройство определенным образом, чтобы вы могли правильно определить вращение

2) Даже если выПолучил лучший случай 45 градусов к земле, очень трудно получить все 3 измерения.Вам лучше, если вы можете ограничить обнаружение только в двух направлениях вращения.

3) Вы ограничены либо вращениями, либо перемещениями, но комбинировать обнаружение вращений с линейными движениями одновременно довольно сложно.

Вывод: для гоночной игры вынудите пользователей держать устройство под определенным углом, ограничьте z-Rotation для рулевого колеса и некоторые другие направления, например, для скольжения с электроприводом или чем-то еще.

...