1

我想我已经阅读了关于这个主题的所有帖子,但我仍然无法理解一些事情:

Q1:要获得全局坐标中的磁场矢量,我需要将反转的旋转矩阵和磁场矢量相乘,为什么我需要反转旋转矩阵?

Q2:假设我有一个设备,我可以使用 getOrientation(...) 方法根据沿 Z 轴的旋转计算方位角。无论手机的姿态如何,我可以使用旋转矩阵或其他方法来计算磁北的方位角吗?所以如果我旋转手机,我和磁北之间的角度会保持不变吗?

Q3:当我将磁矢量(第 4 列为零)与反向旋转矩阵相乘时,我得到 x 非常接近于零。我知道其他帖子没问题,但我不明白为什么?

Q4:理论上,假设我有两个设备相距 1 米,是否可以仅根据它们的磁场(在全局坐标中)来确定这两个设备的空间位置

提前致谢。

PS 我已经读过这些帖子: Getting magnetic field values in global coordinates如何获得磁场矢量,与设备旋转无关?

将设备中的磁场 X、Y、Z 值转换为全局参考系

4

2 回答 2

4

如果您在将磁场 X、Y、Z 值从设备转换为全局参考系中阅读了我的答案,您仍然不明白。

A1将旋转矩阵与设备坐标系中的磁场矢量坐标相乘,得到世界坐标系中的磁场矢量坐标。

让我强调一下:上面说的是旋转矩阵,而不是反转的旋转矩阵。

调用得到的Rotation矩阵getRotationMatrix是基矩阵从设备基到世界基的变化。即给定任意向量v,坐标在设备坐标系中,通过旋转矩阵乘以设备坐标系中的坐标,可以得到同一向量v在世界坐标系中的坐标。

旋转矩阵是基矩阵从世界基到设备基的变化。因此,当您将此矩阵与坐标相乘时,它被解释为将矩阵与世界坐标系中的向量坐标相乘,以获得相同向量在设备坐标系中的坐标。因此,如果将反向旋转矩阵与磁传感器返回的磁场矢量坐标相乘。然后坐标被解释为世界坐标系中矢量的坐标,因此不代表磁场矢量,所得乘积不是世界坐标系中的磁场矢量。实际上它是一个向量在设备坐标系中的坐标。

A2。 getOrientation仅当设备是flat时才有意义。对我来说,这只是一堆角度计算。我看看我尝试在几何上做什么,然后使用旋转矩阵来计算我想要的。例如,要计算后置摄像头指向的方向,我将其视为-z的方向(与屏幕正交的向量的相反方向)。因此,为了找到这个方向,我将-z投影到世界东西北平面并计算这个投影向量North axis之间的角度。现在如果你这样想,那么设备的旋转不会改变-z的方向,因此投影矢量与您旋转设备时相同。如果你使用getOrientation,那么你必须预先remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)要求getOrientation给你正确的结果

A3。getRotationMatrix假设地磁参数是完全位于北天平面中的向量的坐标。那么位于这个平面上的任何向量都必须有x坐标等于0。这只是基本的线性代数。

A4。答案是不。要获得空间位置,您必须相对于固定坐标系表达这些向量。只有这些向量在设备坐标系中的坐标,你无法找到一个固定的基础来计算基础矩阵从设备基础到这个固定基础的变化。需要满足我上面链接中所述的两个条件才能计算基数的变化。

于 2013-03-21T19:52:18.143 回答
1

A1。旋转矩阵告诉您手机在世界坐标中的位置。如果要将磁矢量从手机坐标转换为世界坐标,则必须乘以逆。

A2。不太明白这个问题,对不起。

A3。x坐标是磁力的横向分量,对应于北极与磁极的偏差或类似的东西。它应该很小,与 z 坐标相同,它是垂直分量。

A4。从理论上讲,这可能可行,但是由于您在 Android 设备中拥有的传感器的精度,这种方法似乎不太可行。

于 2013-03-21T13:28:43.350 回答