对于Android应用程序,我需要在全球(世界)坐标系的轴获得磁场测量。 下面是我怎么回事(猜测)来实现这一点。 请,如果必要的指正。 此外,请注意,问题是有关任务的算法部分,而不是关于Android的API用于传感器 - 我有后者的经验。
第一步骤是获得TYPE_MAGNETIC_FIELD
传感器数据( M
)和TYPE_ACCELEROMETER
传感器数据( G
)。 二是应该根据Android的文档中使用,但我不知道,如果它不应该是TYPE_GRAVITY
代替(如再次G
),因为加速度似乎不提供纯净的重力。
下一个步骤是通过获得旋转矩阵getRotationMatrix(R, I, G, M)
其中R
和I
相应地旋转和倾斜基质。
而现在进入最questionnable部分:为了转换M
向量为世界坐标系,我想乘[R * I] * M
。
我不知道这是一种把磁场读数到另一个基础的正确道路。 另外,我不知道是否remapCoordinateSystem
应作为补充或替代上面的东西被使用。
如果存在一些源代码,已经做这件事情,我会很感激张贴链接,但我不希望使用大一般用途库(例如,用于增强现实的支持)这一特定的任务,因为我想保持尽可能简单。
PS
我来到了主意,一些信息添加到原岗位的清晰度。
让我们假设一个设备放置在桌子上,不断地从它的磁传感器读取数据。 每个测量包含3个值,在轴线X,Y,Z,这是设备的局部坐标系呈递磁场。 我认为,我可以忽略环境领域的波动(由低通滤波器平滑),因此这3个值应保持几乎相同的所有设备保持在原位的时间。 如果我们周围的任何轴旋转装置,值的变化,因为我们改变了局部坐标系。 但该领域本身实际上并没有改变。 所以,我要翻译本地X,Y,Z实地测量到这种X“ Y”,Z”,他们保持各自的价值,无论对设备旋转,只要设备没有从它的位置移动(只旋转)。
我实现了上述算法和价值得到了定期和noticable变化X“ Y”,Z”,通过建议转换获得,这样有什么不对的吧。
PPS
偶尔我发现在这里我的问题完全相同的副本- 我怎样才能得到磁场矢量,独立于设备的旋转? - 但很不幸,答案包含了我的建议,并认为这一问题的任择议定书证实,他们不工作。