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

在Android中计算两个加速度矢量之间的3D旋转,android,vector,3d,accelerometer,Android,Vector,3d,Accelerometer,我正在创建一个应用程序,它将使用Android智能手机中的加速计测量车辆在每个轴上的加速度。我需要以某种方式将手机的测量坐标系统旋转到车辆的坐标系统中,以允许驾驶员将手机放在支架中,这样手机将对车辆有一些不同的旋转 我从校准过程开始,我告诉用户拿着电话以匹配车辆协调系统-所以我保存了X、Y和Z型重力传感器的重力加速度值。然后我告诉用户把手机放在支架上,再次保存X、Y和Z型重力传感器的重力加速度值 现在我需要找到这两个向量之间的一些关系,这样我就可以用它来校正(旋转)类型的线性加速度X,Y,Z数据

我正在创建一个应用程序,它将使用Android智能手机中的加速计测量车辆在每个轴上的加速度。我需要以某种方式将手机的测量坐标系统旋转到车辆的坐标系统中,以允许驾驶员将手机放在支架中,这样手机将对车辆有一些不同的旋转

我从校准过程开始,我告诉用户拿着电话以匹配车辆协调系统-所以我保存了X、Y和Z型重力传感器的重力加速度值。然后我告诉用户把手机放在支架上,再次保存X、Y和Z型重力传感器的重力加速度值


现在我需要找到这两个向量之间的一些关系,这样我就可以用它来校正(旋转)类型的线性加速度X,Y,Z数据,以匹配车辆坐标系统。

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

假设您的手机垂直放置,加速度计将向您显示手机底部的方向。如果你现在绕垂直轴旋转它-你仍然会从加速度计得到相同的结果。这意味着您无法通过这种方式获得绕垂直轴的旋转

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

但更好的解决方案是取消整个校准过程。汽车基本上是直线行驶的,只是有时候你会得到侧向加速度,这样你就可以扫描读数几秒钟,找到一个“主”轴和一个“侧”轴

此外,您的校准过程仍然取决于用户在放置手机时的精度,因此它可能不会像您预期的那样工作