计算Android中两个加速度矢量之间的3D旋转

时间:2017-01-11 17:34:27

标签: android vector 3d accelerometer

我正在使用Android智能手机中的加速计创建可测量每个轴的车辆加速度的应用程序。我需要以某种方式将电话测量协调系统旋转到车辆的协调系统 - 允许驾驶员将电话放在支架上 - 这样手机就会对车辆产生不同的旋转。

我从校准过程开始,我告诉用户按住手机以匹配车辆协调系统 - 所以我保存了TYPE_GRAVITY传感器X,Y和Z重力加速度值。然后我告诉用户将手机放入支架并再次保存TYPE_GRAVITY传感器X,Y和Z重力加速度值。

现在我需要在这两个矢量之间找到一些关系,这样我就可以用它来校正(旋转)TYPE_LINEAR_ACCELERATION X,Y,Z数据以匹配车辆协调系统。

1 个答案:

答案 0 :(得分:0)

仅使用重力传感器,您将缺少一个旋转轴来计算您想要的东西。

想象一下,您的手机是垂直握持的,加速度计会向您显示手机底部的方向。如果您现在围绕垂直轴旋转 - 您仍然可以从加速度计获得相同的结果。这意味着您无法通过这种方式绕垂直轴旋转。

一种解决方案是使用陀螺仪 - 这可以让您完全旋转手机,但会增加应用的硬件要求。

但更好的解决方案是IMHO将摆脱整个校准过程。汽车大部分都是直线行驶,有时你只能获得侧向加速度,所以你可以扫描你的读数几秒钟并找到一个主要的'轴和一侧'之一。

此外,您的校准过程仍然取决于用户在放置手机时的精确度,因此可能无法达到预期效果。