其他分享
首页 > 其他分享> > android – 磁场,旋转矩阵和全局坐标

android – 磁场,旋转矩阵和全局坐标

作者:互联网

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

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

解决方法:

如果您在Convert magnetic field X, Y, Z values from device into global reference frame阅读我的答案,您仍然不理解.

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

让我强调一下:上面说的旋转矩阵并没有反转旋转矩阵.

通过调用getRotationMatrix获得的旋转矩阵是基础矩阵从设备基础到世界基础的变化.给定任何具有设备坐标系中坐标的矢量v,可以通过将旋转矩阵与设备系统坐标中的坐标相乘来获得相同矢量v的世界坐标系中的坐标.

反转矩阵是基础矩阵从世界基础到设备基础的变化.因此,当您使用坐标多次显示此矩阵时,它被解释为将矩阵与世界坐标系中的矢量坐标相乘,以获得设备坐标系中相同矢量的坐标.因此,如果将反转旋转矩阵乘以磁传感器返回的磁场矢量坐标.然后,坐标被解释为世界坐标系中的矢量的坐标,因此不表示磁场矢量,并且所得到的乘积不是世界坐标系中的磁场矢量的坐标.实际上它是设备坐标系中矢量的坐标.

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

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

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

标签:android-sensors,android,math
来源: https://codeday.me/bug/20191006/1858837.html