Я и моя команда участвуем в конкурсе ESA Astro Pi. Наша программа будет работать на МКС в течение 3 часов, и мы вернем наши результаты и проанализируем их.
Мы хотим исследовать связь между измерениями напряженности магнитного поля с помощью магнитометра Sense HAT и прогнозами. из Магнитной модели мира (WMM). Мы хотим исследовать точность магнитометра на Sense HAT.
Программа получит необработанные данные магнитометра (X
, Y
и Z
) в микротеслах из Sense HAT и рассчитает значения H и F, как описано в статья Британской геологической службы (раздел 2.1). Затем он сохранит их в файл CSV вместе с отметкой времени и местоположением, рассчитанными с помощью ephem.
Затем мы сравним значения Z, H и F из ISS и WMM и создадим карты с нашими данными и различиями (как на рисунках 6, 8 и 10). Затем мы исследуем, насколько точны данные магнитометра Sense HAT.
Мы хотим сравнить наши данные с данными WMM, чтобы увидеть, насколько точен магнитометр Sense HAT, но у нас есть проблема, связанная с тем, что ориентация магнитометра всегда будет разной. Из-за этого наши данные всегда будут (сильно) отличаться от WMM, поэтому мы не сможем их корректно сравнить.
Мы поговорили со службой поддержки Astro Pi, и они предложили «нормализовать угловые измерения, чтобы они выглядели так, как будто они были сделаны устройством, выровненным с севера на юг».
К сожалению, мы (и они) не знаем, как это сделать, поэтому они предложили задать этот вопрос на Stack Exchange. Я задал этот вопрос на Math Stack Exchange, Physics Stack Exchange и Форумы Raspberry Pi. К сожалению, они не получили никаких ответов, поэтому я задаю этот вопрос снова.
Как мы можем это сделать? У нас есть данные для временной метки, местоположения МКС (широта, долгота, высота), магнитные данные (X
, Y
и Z
), а также направление с севера.
Мы хотим нормализовать наши данные, чтобы иметь возможность корректно сравнивать их с данными из WMM.
Вот часть нашей программы, которая вычисляет значения магнитометра (который получает не нормализованные данные):
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
Часть электронного письма от команды Astro Pi о расположении и положении магнитометра:
- Z проходит через середину Sense Hat.
- X проходит между портами USB и слотом для SD-карты.
- Y проходит от порта HDMI к 40-контактному разъему.
На ISS ориентация AstroPi такова, что порты Ethernet + USB обращены к деке, а слот для SD-карты — к небу. Итак, это в основном вращение вокруг оси Y из плоскости. Таким образом, вы сохраняете ось Y прежней и меняете местами Z и X.
Чтобы лучше понять, как расположен AstroPi, можно взглянуть на вид Google Street на внутреннюю часть модуля ISS Columbus. https://www.google.com/streetview/#international-space-station/columbus-research-laboratory
Если вы повернете камеру вниз и вправо, вы увидите зеленый свет — это AstroPi. Направление движения всей космической станции — к надувному земному шару, который вы видите слева.
Таким образом, в широком смысле слот для SD-карты указывает на азимут, то есть в сторону от центра Земли (то есть на ось X). Светодиодная матрица обращена в сторону движения космической станции (ось Z).
Из-за орбитального пути МКС оси Z и Y будут постоянно менять направление относительно полюсов по мере ее движения вокруг Земли.
Итак, я предполагаю, что вы хотите нормализовать угловые измерения, чтобы они выглядели так, как будто они были сделаны устройством, ориентированным на север/юг?