Космическая наука с Python

Космическая наука с Python — бурные времена кометы

В 13-й части учебной серии будут рассмотрены элементы орбиты 67P/Чурюмов–Герасименко. Это простая орбитальная механика. Правильно?

Предисловие

Это 13-я часть моей серии руководств по Python Космические науки с Python. Все коды, которые показаны здесь, загружены на GitHub. Наслаждайтесь!

Пользователи предлагали добавлять небольшие задачи в конце каждого блокнота Jupyter Notebook для решения научных задач или вопросов по программированию. Начиная с этой сессии, я добавлю эти задания и предоставлю решение через некоторое время на GitHub. Удачи!

Введение

На последнем занятии (Космическая наука с Python — комета в 3D) мы начали рассматривать очень конкретную комету: 67P/Чурюмова–Герасименко. Комета, которую посетила миссия ЕКА Rosetta/Philae. С 2014 по 2016 год орбитальный аппарат исследовал этот ледяной мир и развернул свой посадочный модуль Philae в ноябре 2014 года. Через несколько часов после сближения с кометой человечество собрало больше данных и информации о кометах, чем все предыдущие миссии и наблюдения вместе взятые. В 2004 г. была опубликована книга под названием Comets 2, в которой собрана вся необходимая информация об этих испаряющихся мирах [1]. Теперь у нас есть еще несколько научных открытий, которые частично находятся в свободном доступе в Интернете: Специальные выпуски по астрономии и астрофизике.

Наш последний сеанс дал нам подробный обзор трехмерной структуры кометы, полученной с помощью одной из систем камер Rosetta. Сегодня и на следующем занятии мы хотим узнать больше о его траектории; его движение вокруг Солнца. Как комета вращается вокруг Солнца? Существуют ли различные информационные ресурсы? И какие выводы мы можем из этого извлечь?

Нечего ожидать, верно?

Учитывая простые задачи с двумя телами, орбитальную механику довольно просто понять. Две массы вращаются вокруг общего центра масс. На предыдущем занятии (Космическая наука с Python: кометы — гости издалека) мы создали базу данных SQLite, содержащую орбитальные элементы всех известных комет. Данные получены из Центра малых планет (ЦМП). Эти данные могут быть использованы для расчета траектории кометы. Но так ли это просто?

Во-первых, мы импортируем наши необходимые модули. На этот раз нам понадобится Инструментарий SPICE от NASA и оболочка Python spiceypy. Также используются другие модули, такие как numpy, pandas и matplotlib.

Мы устанавливаем соединение с нашей базой данных в строке 2. Из-за небольшого размера базы данных, около 180 КБ, база данных также хранится в моем репозитории GitHub, поэтому вам не нужно беспокоиться о создании этой базы данных с нуля.

Какие данные нам нужны для описания траектории 67P? Очевидно, нам нужны элементы орбиты, такие как перигелий (линия 5), большая полуось (линия 6), афелий и эксцентриситет (строка 7), а также аргумент перигелия и наклонения (строка 8). Названия комет начинаются с аббревиатуры номера и типа (C, P, X и т. д.), за которыми следует фактическое название. Чтобы получить данные о комете, указав только номер, мы используем команду SQL NAME LIKE 67P%. Оператор where ищет имена, строки которых похожи на 67P с присоединенной любой (под) строкой (%). Данные сохраняются в кадре данных pandas с помощью команды read_sql.

Давайте посмотрим на данные из базы данных. Мы просто печатаем результаты с помощью команды iloc внутри f-строки.

Результат показан ниже. Мы успешно извлекли информацию о комете 67P. Перигелий находится на расстоянии 1,2 а.е., то есть в пределах диапазона, в котором нагрев Солнца заставляет кометы испаряться [2]. Афелий находится на расстоянии 5,7 а.е.; а небольшой наклон около 4 градусов указывает на то, что комета пересекает плоскость орбиты Юпитера, что делает ее кометой семейства Юпитера (JFC).

NAME                  67P/Churyumov-Gerasimenko
PERIHELION_AU                           1.20213
SEMI_MAJOR_AXIS_AU                      3.45513
APHELION_AU                             5.70813
ECCENTRICITY                           0.652073
ARG_OF_PERIH_DEG                        21.8178
INCLINATION_DEG                          3.8868
Name: 0, dtype: object

С этими данными мы могли легко визуализировать и проанализировать орбиту кометы. Но рассмотрим статью о параметре Тиссерана (Космическая наука с Пифоном — рандеву с Юпитером): На орбиту малых тел влияют планетарные гравитационные возмущения (как Юпитер). Возмущения изменяют элементы орбиты, однако база данных предоставляет только статические результаты в определенную эпоху!

Нужно ли нам создавать сложные и ресурсоемкие численные модели? Это не обязательно. Пересмотрите уже используемые ядра SPICE. Возможно, мы найдем ядро, которое уже содержит некоторые более сложные соображения. Давайте посмотрим.

В общедоступном репозитории ядра есть подпапка для миссии Rosetta. Там мы находим подпапки kernels, а затем spk. Мы подробнее рассмотрим старые данные в подпапке former_versions. В aareadme.txt указано:

Name                               Comments                                    
---------------------------------  ---------------------------------   
67P_CHURY_GERAS_2004_2016.BSP      Contains ephemeris data for the
                                   Comet Churyumov-Gerasimenko/67P.
                                   This file has been originated from
                                   JPL Horizons On-Line Ephemeris          
                                   System and IT IS NOT an official  
                                   Rosetta Project SPK. It is 
                                   provided as support to study 
                                   cases until an official SPK is 
                                   released. Spans from January 2004 
                                   to January 2016.

Хотя это не официальный проект spk, мы используем это ядро ​​из-за охвата времени между 2004 и 2016 годами. Мы добавляем путь к ядру (с некоторыми другими необходимыми ядрами) в kernel_meta.txt. и загрузите файл через furnsh.

Для элементов орбиты, которые были загружены ранее, нам понадобится гравитационная постоянная, умноженная на массу Солнца. Мы извлекаем эту информацию в строке 5 и 6 с помощью команды bodvcd.

Чего мы хотим достичь? Данные MPC предоставляют элементы орбиты, которые не меняются со временем. С другой стороны, ядро ​​SPICE может содержать более сложный набор данных о траектории кометы. Итак, давайте проанализируем временной диапазон в 10 лет; с 2004 по 2014 год. Во-первых, нам нужно создать массив, содержащий шаги даты и времени между обоими годами. Строки 2 и 3 создают панды Timestamp(s) на 1 января каждого года. Строка 6 создает numpy массив с 1000 временными шагами, а строка 9 преобразует его обратно в объект даты и времени с помощью pandas to_datetime .

Теперь мы вычисляем орбитальные элементы 67P для каждого временного шага на основе соответствующего ядра SPICE. В строке 2 создается пустой фрейм данных, в котором будут храниться все результаты. Строки времени UTC хранятся в строке 5 и преобразуются в эфемеридное время (ET) в строках с 8 по 9 с помощью функции SPICE utc2et. Затем вычисляется вектор состояния 67P, видимый со стороны Солнца (строки 12–16). Для этого вычисления используется функция spkgeo, а ECLIPJ2000 устанавливается в качестве системы отсчета. Идентификационный код НАИФ для 67P — 1000012 [*]. Наконец, строки с 19 по 23 вычисляют соответствующие орбитальные элементы векторов состояния с помощью функции oscltx.

Орбитальные элементы хранятся в виде массивов в столбце STATE_VEC_ORB_ELEM. Теперь мы извлекаем необходимые орбитальные элементы из массива и назначаем их отдельным столбцам фрейма данных. Порядок элементов орбит в массивах объясняется в документации oscltx:

elts        are equivalent conic elements describing the orbit 
            of the body around its primary. The elements are, 
            in order: 
 
              RP      Perifocal distance. 
              ECC     Eccentricity. 
              INC     Inclination. 
              LNODE   Longitude of the ascending node. 
              ARGP    Argument of periapsis. 
              M0      Mean anomaly at epoch. 
              T0      Epoch. 
              MU      Gravitational parameter. 
              NU      True anomaly at epoch. 
              A       Semi-major axis. A is set to zero if 
                      it is not computable. 
              TAU     Orbital period. Applicable only for 
                      elliptical orbits. Set to zero otherwise.

Пространственная информация дается в км, а угловая информация дается в радианах. Мы конвертируем значения в астрономические единицы (используя функцию convrt в строках с 3 по 7 и с 26 по 30) и градусы (используя numpy degrees в строках 14–15, 18–19 и 22–23) соответственно. В строках с 33 по 36 мы дополнительно вычисляем афелий, используя большую полуось и эксцентриситет.

Теперь можно отобразить результаты ядра SPICE и статический набор данных из набора данных MPC. Мы используем matplotlib для визуализации и интерпретации результатов. Мы устанавливаем темную тему в строке 4 и увеличиваем размер шрифта для лучшей читаемости в строке 7. Цикл for теперь перебирает 3 разных параметра: перигелий, эксцентриситет и аргумент перигелия (строки 11–50). Данные SPICE отображаются в строках с 22 по 24, а данные MPC отображаются в виде горизонтальной опорной линии в строках кода с 28 по 29 с использованием функции matplotlib hlines. Процедура построения графика требует статического значения y и необходимого диапазона оси x (xmin и xmax). Задаются сетка (строка 35) и метки осей (строки 38 и 39). В строках с 43 по 47 настраиваются параметры легенды (прозрачность строк удалена для лучшей читаемости), и рисунок, наконец, сохраняется (строка 50).

Давайте посмотрим на получившиеся графики. Первые два рисунка показывают перигелий и эксцентриситет относительно даты и времени, указанных в формате UTC. Сплошная линия представляет значения из ядра SPICE, а горизонтальная пунктирная линия — справочные данные из набора данных MPC. Как видите, оба результата различаются. Кроме того, результаты SPICE со временем меняются. Например, между 2004 и 2008 годами перигелий изменился примерно с 1,29 а.е. до менее чем 1,25 а.е., то есть около 6 миллионов километров! Наименьшая разница между данными MPC и результатом ядра SPICE составляет около 0,04 а.е. для данных перигелия и 0,0125 для эксцентриситета. Учитывая, что мы не учли ошибку из данных MPC (ядро SPICE не предоставило ошибку для значений), разница не является существенно большой.

На последнем рисунке показано отношение перигелия к дате и времени в формате UTC. Вы можете видеть, что положение перигелия кометы повернулось примерно на 2 градуса за 2 года. Это "много"? Наша родная планета Земля также подвержена влиянию гравитационных возмущений. Однако из-за большего расстояния до других планет и собственной массы эффекты довольно малы. Аргумент перигелия Земли поворачивается на 360° за более чем 100 000 лет [3]!

Вывод

Как можно доверять источникам данных? Есть ли способ получить настоящие данные? На этот вопрос нельзя ответить. Это всегда зависит от вашего варианта использования и требуемой степени детализации. Для анализа большой популяции всех комет (Космическая наука с Python — все ли мы наблюдали?) данных MPC достаточно. Даже для краткосрочных прогнозов и расчетов траекторий статические результаты подходят. Однако исследования по проектированию космических аппаратов и детальный научный анализ конкретных комет требуют более сложного и скорректированного взгляда. Численный анализ, учитывающий гравитационные возмущения и выделение газа из кометы, является наиболее подробным. Предоставление ядер SPICE в общедоступном репозитории всегда является первым хорошим подходом к обеспечению хорошего качества данных.

Но можно ли объяснить возмущения количественно? Без слишком сложных вычислений? Да! И это будет сделано в следующий раз, когда мы будем использовать SPICE для получения собственного решения истории 67P.

Томас

Задания

По совету некоторых пользователей я буду добавлять небольшие задачи в конце каждого урока. Таким образом, вы сможете применить полученные знания. Не стесняйтесь обращаться ко мне, если у вас возникнут какие-либо проблемы.

  1. Имеет ли параметр Тиссерана w.r.t. Юпитер меняется со временем?
  2. Визуализируйте расстояние между Юпитером и 67P между начальным и конечным временем. Используйте для этой цели spkgps и подумайте о параметрах targ и obs. Преобразуйте результаты в AU.

Сноски

Как узнать идентификаторы NAIF, не проверяя веб-сайт NAIF ID? Каковы временные окна или охваты ядер SPICE? На эти вопросы можно ответить с помощью функций SPICE, которые будут показаны в следующем руководстве, где я представлю дополнительную статью об извлечении информации о ядре SPICE.

использованная литература

[1] Мишель С. Фестоу (редактор), Х. Уве Келлер (редактор), Гарольд А. Уивер-младший (редактор). (2004). Кометы II. Издательство Аризонского университета. стр. 780. ISBN-10: 0816524505. ISBN-13: 978–0816524501

[2] Комби, М. Р.; Харрис, WM; Смит, WH (2004). Газовая динамика и кинетика кометной комы: теория и наблюдения. В: Кометы II [1]. п. 523–552

[3] van den Heuvel, EPJ (1966). О прецессии как причине плейстоценовых вариаций температуры воды Атлантического океана. Международный геофизический журнал. 11: 323–336. Бибкод: 1966GeoJ…11..323V. doi: 10.1111/j.1365–246X.1966.tb03086.x