我认为我已经阅读了有关此主题的所有帖子,但我仍然无法理解一些事情:
Q1: 为了得到全局坐标系中的磁场矢量,我需要将反转旋转矩阵和磁场矢量相乘,为什么我需要反转旋转矩阵?
Q2: 假设我有一个设备,我可以使用getOrientation(...)方法根据沿Z轴的旋转计算方位角。 我可以使用旋转矩阵或其他方法来计算磁北的方位角,而不管手机的姿态如何? 那么,如果我要旋转手机,我和磁北之间的角度将保持不变?
Q3: 当我将磁矢量(第4个col为零)乘以反转的旋转矩阵时,得到x非常接近于零。我知道这是o.k来自其他帖子,但我不明白为什么?
Q4: 理论上,假设我有两个相距1米的设备,是否可以仅根据磁场(全局坐标)制作两个设备的空间位置
先谢谢。
P.S 我已经阅读过这些帖子了: Getting magnetic field values in global coordinates, How can I get the magnetic field vector, independent of the device rotation?
Convert magnetic field X, Y, Z values from device into global reference frame
答案 0 :(得分:4)
如果您在Convert magnetic field X, Y, Z values from device into global reference frame阅读我的回答,您仍然不理解。
<强> A1 即可。将旋转矩阵与设备坐标系中磁场矢量的坐标相乘,得到世界中磁场矢量的坐标坐标系。
让我强调一下:上面说的旋转矩阵并没有反转旋转矩阵。
通过调用getRotationMatrix
获得的旋转矩阵是基础矩阵从设备基础到世界基础的变化。给出任何带有坐标的设备坐标系中的矢量 v ,可以通过乘以旋转矩阵<来获得相同矢量 v 的世界坐标系中的坐标/ strong>使用设备系统坐标中的坐标。
反向旋转矩阵是基础矩阵从世界基础到设备基础的变化。因此,当您使用坐标多次显示此矩阵时,它被解释为将矩阵与世界坐标系中的矢量坐标相乘,以获得设备坐标系中相同矢量的坐标。因此,如果将反转旋转矩阵乘以磁传感器返回的磁场矢量的坐标。然后坐标被解释为世界坐标系中矢量的坐标,因此不代表磁场矢量,结果产品不是<的坐标世界坐标系中的强>磁场矢量。实际上它是设备坐标系中矢量的坐标。
A2。 getOrientation
仅在设备平面时才有意义。对我来说,它只是一堆角度计算。我看看我尝试做什么几何然后使用旋转矩阵来计算我想要的东西。例如,要计算后置摄像头指向的方向,我将其视为 -z 的方向(与屏幕正交的矢量相反)。因此,为了找到这个方向,我将 -z 投影到世界东 - 北平面并计算此投影向量与北轴。现在,如果你这么想,那么设备的旋转不会改变 -z 的方向,因此投影向量与旋转设备相同。如果您使用getOrientation
,那么您必须为remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)
预先getOrientation
提供正确的结果。
A3。 getRotationMatrix
假设地磁参数是完全位于北极天线的矢量坐标>。那么位于这个平面的任何向量都必须具有等于 0 的 x 坐标。这只是基本的线性代数。
A4。答案是否定的。要获得空间位置,您必须相对于固定坐标系表达这些向量。在设备坐标系中只有这些矢量的坐标,你无法找到一个固定基础,它允许你从设备基础计算基础矩阵的变化这个固定基础。我需要满足上述链接中所述的2个条件来计算基础的变化。
答案 1 :(得分:1)
A1。旋转矩阵告诉您手机在世界坐标中的位置。如果你想将磁性矢量从手机坐标转换为世界坐标,你必须乘以反转。
A2。不太明白这个问题,对不起。
A3。 x坐标是磁力的横向分量,其对应于北极与磁极的偏差或类似的东西。它应该是非常小的,与z坐标相同,它是垂直分量。
A4。理论上这可能有用,但是你的Android设备中传感器的精确度,这种方法似乎不太可行。