我正在使用带有简单3轴磁力计的嵌入式设备。我现在在微特斯拉显示X Y Z值但是如何将它们转换为罗盘标题?我曾尝试在谷歌上查找,但我发现的一切似乎都非常复杂/解释不清楚。
如果可能的话,我想知道如何进行倾斜补偿以及无需补偿倾斜。
我目前在X,Y,Z的平面上获得的值分别为70,0.8和34.1,以防某些方面有所帮助。
P.S如果它有帮助,这里是我用于磁力计的代码片段:
mSensor.enable();
while(true){
wait(1);
mSensor.getAxis(mData);
lcd.cls();
lcd.locate(0,3);
lcd.printf("X=%4.1f micro-Tesla\n\rY=%4.1f micro-Tesla\n\rZ=%4.1f micro-Tesla", mData.x, mData.y, mData.z);
答案 0 :(得分:5)
如果不对倾斜进行补偿,它就不会太复杂:
angle = atan2(Y, X);
这实际上与将笛卡尔坐标[X,Y]中的矢量转换为极坐标[长度,角度]中的矢量相同,而不需要长度。
对于倾斜补偿版本,您需要先将3D矢量[X,Y,Z]投影到平面[X2,Y2]上,然后使用与之前相同的公式。但要做到这一点,你需要一个加速度计来了解倾斜量。
答案 1 :(得分:1)
您首先需要进行校准(可以使用设备校准方法,也可以通过将其旋转一个完整的圆圈来确定整个场强)。
然后,您可以使用X,Y和Z读数来计算“北”相对于您指向的位置的位置(请注意,“北”的变化幅度最大为30度,具体取决于您在地球上的哪个位置是(称为偏角-参见http://www.magnetic-declination.com/),并且也不与地面成水平(令人困惑的称为“倾斜”-参见https://physics.stackexchange.com/questions/283761/if-you-hold-a-compass-needle-vertical-does-it-point-down-or-up-differently-on-wh/283782)
如果将X,Y和Z读数表示为“在一个假想的圆上是磁力的方向-那些3个圆在3个不同的平面上,则您可以计算指向磁的矢量的逻辑位置向北3个维度。
坏消息-没有一种简单的方法可以准确地完成您想要的事情,而且绝对没有一种方法不对所有3个读数都进行精确的数学运算(您不能仅使用X和/或Y)。
好消息-您可能真的不需要知道实际的“标题”-与您已经知道的东西相比,大多数应用程序只需要一些本地相对方向即可。
请注意,很强的磁铁(例如所有现代电动机中的磁铁)会严重干扰很长一段距离(甚至10英尺或更多)的读数,请从您的手机商店中获取一个显示手机磁力计读数的应用,然后挥动磁铁周围容易看到这一点!