【问题标题】:Converting Device Coordinates to world Coordinates将设备坐标转换为世界坐标
【发布时间】:2011-11-09 02:08:41
【问题描述】:

我正在做这个项目,其中一部分需要我获取手机(android)在每个轴上的加速度值。因此,例如,无论手机如何放置,z 轴上的加速度值,如果手机静止,则应为 9.8,沿其他轴应为 0。 现在我经历了很多线程来让它正常工作。 我尝试按照here的建议进行操作

        trueacceleration[0] =(float) (accelerometervalues[0]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.sin(orientationvalues[0])) + accelerometervalues[2]*(-Math.sin(orientationvalues[2])*Math.cos(orientationvalues[0])+Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.sin(orientationvalues[0])));
        trueacceleration[1] = (float) (accelerometervalues[0]*(-Math.cos(orientationvalues[2])*Math.sin(orientationvalues[0])+Math.sin(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[1]*(Math.cos(orientationvalues[1])*Math.cos(orientationvalues[0])) + accelerometervalues[2]*(Math.sin(orientationvalues[2])*Math.sin(orientationvalues[0])+ Math.cos(orientationvalues[2])*Math.sin(orientationvalues[1])*Math.cos(orientationvalues[0])));
        trueacceleration[2] = (float) (accelerometervalues[0]*(Math.sin(orientationvalues[2])*Math.cos(orientationvalues[1])) + accelerometervalues[1]*(-Math.sin(orientationvalues[1])) + accelerometervalues[2]*(Math.cos(orientationvalues[2])*Math.cos(orientationvalues[1])));

但这给了我一些完全不同的东西,并且随着我移动手机而改变。 知道什么应该是正确/最简单的方法吗?

【问题讨论】:

  • "如果手机静止,则应为 9.8,沿其他轴应为 0。"我不明白,如果手机静止,加速度计不会报告任何内容。
  • @Glenn.nz:如果手机静止,加速度计将只返回重力加速度
  • 否——可能有一个作用在手机上,但如果它不动,就不会加速。如果你放下手机,你会看到你的 9.8。

标签: java android math coordinates accelerometer


【解决方案1】:

加速度计受重力影响,即使设备在没有施加任何其他力的情况下静止不动地坐在桌子上。

取自Android Developer

这种类型的传感器测量施加到设备 (Ad) 的加速度。从概念上讲,它是通过使用以下关系测量施加在传感器本身 (Fs) 上的力来实现的:

Ad = - ∑Fs / mass

特别是,重力总是影响测得的加速度:

Ad = -g - ∑F / mass

因此,当设备坐在桌子上(显然没有加速)时,加速度计读取的幅度为g = 9.81 m/s^2

至于将设备坐标转换为世界坐标,为什么不改用getRotationMatrix()呢?

【讨论】:

  • 你能告诉我要采取的具体步骤吗?目前我只是将旋转矩阵与加速度计值向量相乘。但是我得到的值不正确,因为即使我旋转手机,沿 z 轴的值也会发生显着变化。此外,无论我施加多大的力,沿 x 和 y 坐标的值都保持为 0。
  • @copperhead 首先,您需要一个传感器侦听器来获取加速度计和磁力计值。之后,您可以调用 getRotationMatrix()。 This article 给出一个在增强现实应用中使用 getRotationMatrix 的例子。对于加速度计值,也许您可​​以尝试this tutorial
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多