Выровнять данные ускорения через гравитацию по одной оси - PullRequest
0 голосов
/ 06 марта 2019

У меня есть некоторые данные об ускорении, полученные во время езды на велосипеде. В нем все еще есть гравитация, потому что я хочу выровнять ось Z моего телефона с осью Z реального мира. Телефон был установлен почти параллельно земле. (Две другие оси не должны быть сопоставлены с другой осью, поскольку, похоже, существуют некоторые проблемы только с данными ускорения.)
Чтобы получить Rotationmatrix, я вычислил:

a_x = mean(data(:,1));
a_y = mean(data(:,2));
a_z = mean(data(:,3)); and defined
a = [a_x;a_y;a_z];
z = [0;0;1];
R=fcn_RotationFromTwoVectors(a,z);

и поместите его в функцию

function R=fcn_RotationFromTwoVectors(A,B)
v = cross(A,B);
ssc = [0 -v(3) v(2);v(3) 0 -v(1); -v(2) v(1) 0];
R = eye(3) + ssc + ssc^2*(1-dot(A,B))/(norm(v))^2;
end

, который вычисляет матрицу вращения. Однако, когда я вычисляю

data_calib = rot90(R*data');

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

1 Ответ

1 голос
/ 06 марта 2019

Только что я узнал, что мне пришлось использовать единичный вектор - а это, конечно, не так.Просто нужно было использовать unit_a

unit_a = a/norm(a);

, теперь все работает, как и планировалось.

...