【问题标题】:Align acceleration data via gravity to one axis通过重力将加速度数据与一个轴对齐
【发布时间】:2019-03-06 15:42:41
【问题描述】:

我从骑自行车时收集了一些加速度数据。它仍然有重力,因为我想将手机的 z 轴与现实世界的 z 轴对齐。电话几乎与地面平行安装。 (其他两个轴不必与另一个轴匹配,因为似乎只有加速度数据存在一些问题。)
为了得到我计算的旋转矩阵:

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');

数据似乎是对齐的,但也乘以了一些奇怪的因素。我错过了什么或做错了什么?

【问题讨论】:

  • 函数 fcn_RotationFromTwoVectors 是如何工作的,给定 az 是唯一的参数,但是您在函数中使用变量 AB 而没有事先分配?
  • 对不起,我把它弄混了我在问题中改变了它。

标签: android matlab accelerometer imu


【解决方案1】:

我自己才发现,我必须使用单位向量——a 当然不是。 只需要使用unit_a

unit_a = a/norm(a);

现在一切都按计划进行。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 2014-04-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多