Как нормализовать ускорение с ориентацией?

  • Ускорение отслеживается (X,Y,Z) в м/с^2 относительно телефона.
  • Ориентация отслеживается в углах Эйлера относительно «земли».

Могу ли я использовать ориентацию для расчета ускорения относительно «земли»?

Если да, то не могли бы вы объяснить, как это сделать?

Я создал планкр: http://plnkr.co/edit/JOeqcFqagiI5z4YKNU65?p=preview (вы можете запустить его на своем телефоне: http://run.plnkr.co/MOVkJip5LSMklY4O/)

Предпочтительный ответ в Javascript, но я могу портировать.


person markmarijnissen    schedule 27.11.2013    source источник


Ответы (1)


чтобы вы начали,

Угол Эйлера определяет версор (ориентацию), который идет вниз к центру земли, например:

   x = cos(alpha)cos(beta);
   y = cos(alpha)sin(beta);
   z = sin(alpha);
   Vector3 versor = new Vector3(x, y, z);

(вероятно, вам придется исправить это ±alpha±Math.PI/2, в зависимости от того, как выражается эйлер, где 0° и т. д.) Используя этот вектор, гравитация создаст силу:

Vector3 force = 9.81 * versor;

таким образом, если у вас есть показания акселерометра (то есть сила), вы можете рассчитать:

double grav = Math.sqrt(Math.pow(acc.x/versor.x, 2) + Math.pow(acc.y/versor.y) + Math.pow(acc.z/versor.z));

или сила на устройстве, которая не вызвана силой тяжести:

   Vector3 not_gravitational_force = acc - (9.81 * versor);
person Exceptyon    schedule 29.11.2013