首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >归一化转角地磁场

归一化转角地磁场
EN

Stack Overflow用户
提问于 2019-01-25 17:37:34
回答 1查看 848关注 0票数 3

我和我的团队正在参加欧空局的阿童木Pi挑战。我们的节目将运行在国际空间站3个小时,我们将返回和分析他们的结果。

我们要研究感观帽磁强计的磁场强度测量与世界磁模型预测之间的联系。我们要研究感测帽上磁强计的精度。

该程序将获得原始磁强计数据(XYZ)在微型从感官帽子和计算值H和F的描述在英国地质调查文章 (第2.1节)。然后将它们保存到CSV文件中,同时使用ephem计算时间戳和位置。

然后,我们将比较ISS和WMM的值Z、H和F,并用我们的数据和差异创建地图(如图6、8和10)。然后我们将研究,有多准确的感觉帽子磁强计的数据。

我们想把我们的数据和WMM的数据进行比较,看看HAT磁强计有多精确,但是我们有一个问题,就是磁强计的方向总是不一样的。因此,我们的数据总是(非常)不同于WMM,所以我们无法正确地比较它们。

我们与阿童木Pi支持小组进行了交谈,他们建议“将角度测量结果正常化,这样看起来它们就像是由一个向北/向南排列的设备所拍摄的”。

不幸的是,我们(和他们)不知道如何做到这一点,所以他们建议在Stack Exchange上问这个问题。我是在数学堆栈交换物理堆栈交换树莓Pi论坛上问的。他们没有得到任何答案,所以我再次问这个问题。

我们怎么能这么做?我们有时间戳、国际空间站位置(纬度、经度、海拔)、磁数据(XYZ)以及来自北方的方向的数据。

我们希望标准化我们的数据,这样我们就能够正确地将它们与来自WMM的数据进行比较。

下面是我们计算磁强计值的程序的一部分(该程序获得未标准化的数据):

代码语言:javascript
复制
compass = sense.get_compass_raw()

try:
    # Get raw data (values are swapped because Sense HAT on ISS is in different position)
    # x: northerly intensity
    # y: easterly intensity
    #  z: vertical intensity
    x = float(compass['z'])
    y = float(compass['y'])
    z = float(compass['x'])

except (ValueError, KeyError) as err:
    # Write error to log (excluded from this snippet)
    pass

try:
    # h: horizontal intensity
    # f: total intensity
    # d: declination
    # i: inclination
    h = sqrt(x ** 2 + y ** 2)
    f = sqrt(h ** 2 + z ** 2)
    d = degrees(atan(y / x))
    i = degrees(atan(z / h))

except (TypeError, ValueError, ZeroDivisionError) as err:
    # Write error to log (excluded from this snippet)
    pass

我们的代码还提供了一些简单的模拟器:https://trinket.io/library/trinkets/cc87813ce7

阿童木派团队关于磁强计位置和位置的部分电子邮件:

  • Z正在穿过感觉帽的中间。
  • X在USB端口和SD卡插槽之间运行。
  • Y从HDMI端口运行到40路引脚头。

在国际空间站上,AstroPi定位是以太网+ USB端口面向甲板,SD卡插槽面向天空。所以,这基本上是从平面绕Y轴旋转。所以你保持Y轴不变,围绕Z和X交换。

它可以帮助您查看国际空间站哥伦布舱内部的Google视图,从而更好地了解AstroPi是如何定位的;https://www.google.com/streetview/#international-space-station/columbus-research-laboratory

如果你把相机移到右边,你就会看到绿灯--那是AstroPi。整个空间站的运行方向是向左边的充气地球球移动。

因此,广义地说,SD卡插槽指向方位角,就像远离地球中心(所以是X轴)。LED矩阵面向空间站的运动方向(Z轴)。

由于国际空间站的轨道路径,Z和Y轴在围绕地球运行时将不断改变相对于两极的方向。

所以,我猜你想要标准化的角度测量,所以他们看起来是由一个装置对齐南北?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 08:35:04

我认为您需要创建类似于NEH (北、东、高/高/高)的本地参考坐标系。

它通常用于航空作为参考框架(标题是从它派生出来的),因此你的参考框架是从你的地理位置及其指向North、EastUp的轴计算出来的。

现在的问题是aligned North/Southnormalizing是什么意思。?

如果参考设备只测量投影,则需要这样做:

代码语言:javascript
复制
dot(measured_vector,reference_unit_direction)

其中的方向将是North方向,但作为单位向量。

如果参考设备也测量一个全三维,那么您需要将参考数据和测试测量数据转换到同一个坐标系中。这是通过使用

所以简单的matrix * vector乘法就行了。只有这样,我才算出H,F,Z值,我不知道它们是什么,而且懒得翻阅论文.而是期望使用E,HB向量。

然而,如果你在测量的时刻没有地理位置,那么你就只有North方向与国际空间站有关的欧拉角,所以你根本无法构造三维参考框架(除非你得到2个已知向量,而不是一个像UP)。在这种情况下,您需要选择1投影(使用点积和北向向量)。因此,您将处理的只是标量值,而不是三维向量之后。

Edit1

从你的链接:

地磁场矢量B由正交分量X(北强)、Y(东风强度)和Z(垂直强度,正向下)表示;

这不是我的专业领域,所以我可能错了,但我是这么理解的:

B(Bx,By,Bz) -磁场矢量

a(ax,ay,az) -加速

现在FB的一个数量级,所以它在旋转时是不变的:

代码语言:javascript
复制
F = |B| = sqrt( Bx*Bx + By*By + Bz*Bz )

您需要在NED参考框架(北、东、下)中计算B的X、Y、Z值,因此首先需要基向量:

代码语言:javascript
复制
Down = a/|a|  // gravity points down
North = B/|B| // north is close to B direction
East = cross(Down,North) // East is perpendicular to Down and North
North = cross(East,Down) // north is perpendicular to Down and East, this should convert North to the horizontal plane

您应该让它们直观地检查它们是否指向正确的方向,如果不是通过重新排列交叉操作数来否定它们(我可能有错误的顺序,我习惯使用Up向量)。现在只需将B转换为NED

代码语言:javascript
复制
X = dot(North,B)
Y = dot(East,B)
Z = dot(Down,B)

现在你可以计算H

代码语言:javascript
复制
H = sqrt( X*X +Y*Y )

在上面的转换矩阵链接中,您可以找到所需的向量数学。

请注意,只有在没有加速度的情况下才能工作(传感器在运行期间不在机器人手臂上,或者ISS没有燃烧.)否则,您需要以不同的方式获得NED帧(如从车载系统获得)。

如果这不能正确工作,那么您可以从您的ISS位置计算NED,但为此,您需要知道传感器的确切方向和位移相对于您的模拟模型,提供您的位置。我不知道国际空间站做了什么旋转,所以我不会触及这个问题,除非作为最后的手段。

恐怕我有一段时间没有时间编码了.无论如何,没有样本输入数据或坐标系扩展和所有输入/输出变量的编码都是疯狂的.简单的轴的否定会使整个事情失效,而且在整个过程中会有很多的重复,为了掩盖所有这些问题,你最终会有很多版本来尝试.

应用程序应该是逐步建立,但我担心,如果没有模拟或真正的HW,这是不可能的。还有很多事情可能会出错..。即使是简单的程序也很难编码.我将首先检查F,因为它不需要任何“规范化”首先查看结果是否关闭。如果它可以暗示不同的单位或者天知道..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54370267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档