Гравитационные маневры представляют собой технологию, используемую космическими миссиями для изменения орбиты и скорости космических аппаратов с минимальными затратами энергии. Эта техника включает в себя использование силы гравитации планет или других небесных тел для увеличения скорости космического аппарата при его прохождении вблизи этих объектов. Гравитационные маневры позволяют не только эффективно управлять траекторией полета, но и значительно увеличивать дальность путешествий, что особенно актуально для межпланетных миссий. Правильное планирование таких маневров может сократить время полета и сократить затраты на топливо, что делает их важным инструментом в астрономии и исследовании космоса.
Что такое гравитационный манёвр?
Гравитационный манёвр — это придание космическому аппарату нужных величины и направления за счёт энергии небесного тела.
Первый в истории такой манёвр был совершён советской межпланетной станцией Луна-3 в 1959 году. Под действием гравитации Луны её орбитальная плоскость сместилась. Это позволило аппарату вернуться к Земле по нужной траектории, пролетев по возвращении над наблюдательными станциями.
«Вояджер-2», покинувший землю в 1977 году, сократил за счёт гравитационных манёвров у Юпитера, Сатурна и Урана срок полёта к Нептуну на 18 лет (по сравнению с полётом по гомановской траектории).
Как это работает?
На рисунке представлена схема манёвра. Здесь вектора v0 и v- скорости космического аппарата в гелиоцентрической СО до попадания в сферу гравитационного влияния планеты и после её преодоления. Bектора v’0 и v’ — те же скорости, но в СО планеты. Вектор u — скорость планеты.
Космический аппарат, попав в поле тяжести планеты, сначала ускоряется, а затем покидая её, тормозится. При этом скорость аппарата относительно планеты после того, как он покинет сферу её влияния, останется по модулю равной изначальной: |v’0 |= |v’|
Направление её однако поменяется. Из-за этого скорость космического аппарата в гелиоцентрической СО:
изменит не только направление, но и величину.
Таким образом аппарат использует энергию планеты для придания своей скорости нужной величины и направления.
График изменения модуля скорости, построенный программой на языке Python, показывает более детально, как изменяется модуль скорости аппарата в процессе взаимодействия с небесным телом.
Математическое описание движения космического аппарата в процессе совершения гравитационного манёвра.
Перейдем в систему отсчета, связанную с планетой. Чтобы тело в конечном итоге преодолело гравитационное поле планеты, оно должно двигаться по гиперболе (в предельном случае — по параболе). Причём сама планета находится в одном из её фокусов. По свойству гиперболы, разность между расстояниями от некоторой её точки до её фокусов одинакова для всех точек гиперболы. Приравняем эти разности для точки X и для точки, бесконечно удалённой от планеты:
Запишем закон сохранения энергии:
И закон сохранения момента импульса:
Решив систему из этих уравнений (где ℓ — прицельная дальность), получим:
Прицельная дальность не может быть меньше эффективного радиуса планеты (прицельной дальности, при которой аппарат коснётся поверхности земли). Поэтому предельный случай:
Чтобы найти эффективный радиус, вновь воспользуемся законом сохранения энергии и законом сохранения момента импульса:
Решив систему, получим:
где v2 — вторая космическая скорость планеты:
Воспользовавшись полученным соотношением, можно найти максимальный угол отклонения как функцию скорости сближения с планетой:
Модуль вектора изменения скорости равен:
Подставив в это выражение значение угла и продифференцировав, получим, что максимальный модуль вектора приращения скорости достигается при скорости сближения:
где v1 — первая космическая скорость для данной планеты. Аппарат при этом отклонится от первоначальной траектории в СО планеты на 60 градусов.
Ниже в таблице приведены значения максимального приращения скорости для тел солнечной системы (в км/c).
Меркурий |
3, 01 |
Юпитер |
42,73 |
Венера |
7,33 |
Сатурн |
25,62 |
Земля |
7,91 |
Уран |
15,18 |
Луна |
1,68 |
Нептун |
16,73 |
Марс |
3,56 |
Плутон |
1,09 |
Код.
import matplotlib.pyplot as plt import numpy as np # Constants G = 6.67430e-11 # Gravitational constant M_p = 5.972e24 # Mass of the planet (in kg) M_s = 1000 # Mass of the spacecraft (in kg) r_p = 6.371e6 # Radius of the planet (in meters) # Initial conditions x_p, y_p = 0, 0 # Initial coordinates of the planet v_px, v_py = 0, 0.5e3 # Initial velocity of the planet x_s, y_s = 3 * r_p, -4 * r_p # Initial position of the spacecraft v_x, v_y = -7e3, 3e3 # Initial velocity of the spacecraft (tuned for hyperbolic orbit) dt = 10 # Time step (in seconds) num_steps = 785 # Number of steps for the simulation # Lists to store trajectory data, speed, and distance x_trajectory, y_trajectory = [], [] x_planet_trajectory, y_planet_trajectory = [], [] speed, distance = [], [] # Calculate initial distance between planet and spacecraft initial_distance = np.sqrt((x_s - x_p)**2 + (y_s - y_p)**2) for _ in range(num_steps): r = np.sqrt((x_s - x_p)**2 + (y_s - y_p)**2) if r <= r_p: print("Crash! The spacecraft has collided with the planet.") break # Gravitational acceleration a_x = -G * M_p * (x_s - x_p) / r**3 a_y = -G * M_p * (y_s - y_p) / r**3 # Update velocities v_x += a_x * dt v_y += a_y * dt # Update positions x_s += v_x * dt y_s += v_y * dt x_p += v_px * dt y_p += v_py * dt # Store trajectory data x_trajectory.append(x_s) y_trajectory.append(y_s) x_planet_trajectory.append(x_p) y_planet_trajectory.append(y_p) # Calculate and store speed and distance speed.append(np.sqrt(v_x**2 + v_y**2)) distance.append(r) # Plotting the trajectory of the spacecraft and planet plot_limit = 2 * initial_distance # Set plot limit to 2 times the initial distance # Trajectory plot fig1, ax1 = plt.subplots(figsize=(10, 10)) ax1.plot(x_trajectory, y_trajectory, label='Spacecraft Trajectory') ax1.plot(x_planet_trajectory, y_planet_trajectory, label='Planet Trajectory', linestyle='--') ax1.plot(x_p, y_p, 'ro', markersize=10, label='Planet') # Planet ax1.plot(x_trajectory[0], y_trajectory[0], 'go', markersize=8, label='Start Point') # Start point of the spacecraft (dynamic) ax1.set_aspect('equal', adjustable='box') ax1.set_xlabel('X coordinate (m)') ax1.set_ylabel('Y coordinate (m)') ax1.set_title('Trajectory of the Spacecraft with Moving Planet (Hyperbolic)') ax1.set_xlim(-plot_limit, plot_limit) # Set x-axis limits ax1.set_ylim(-plot_limit, plot_limit) # Set y-axis limits ax1.grid(True) # Add grid for better visualization ax1.legend() # Speed plot fig2, ax2 = plt.subplots(figsize=(10, 5)) time = np.arange(0, len(speed) * dt, dt) ax2.plot(time, speed) ax2.axhline(speed[0], color='r', linestyle='--', label=f'Начальная скорость: {speed[0]:.2f} м/с') ax2.axhline(speed[-1], color='g', linestyle='--', label=f'Конечная скорость: {speed[-1]:.2f} м/с') ax2.set_xlabel('Время (c)') ax2.set_ylabel('Скорость (м/с)') ax2.set_title('Зависимость скорости космического аппарата от времени') plt.minorticks_on() plt.grid(True) plt.grid(which = 'minor' , color="grey", alpha=0.25) ax2.legend() # Add legend to the plot # Distance plot fig3, ax3 = plt.subplots(figsize=(10, 5)) ax3.plot(time, distance) ax3.set_xlabel('Time (s)') ax3.set_ylabel('Distance (m)') ax3.set_title('Distance Between Spacecraft and Planet Over Time') ax3.grid(True) # Add grid for better visualization plt.show()
Объяснение кода.
1. Константы и начальные условия
G = 6.67430e-11 # Гравитационная постоянная в м^3 кг^-1 с^-2 M_p = 5.972e24 # Масса планеты в килограммах M_s = 1000 # Масса космического аппарата в килограммах r_p = 6.371e6 # Радиус планеты в метрах
-
G: Универсальная гравитационная постоянная.
-
M_p: Масса планеты, в данном случае Земли.
-
M_s: Масса космического аппарата.
-
r_p: Радиус планеты.
2. Начальные позиции и скорости
x_p, y_p = 0, 0 # Начальные координаты планеты v_px, v_py = 0, 0.5e3 # Начальная скорость планеты x_s, y_s = 3 * r_p, -4 * r_p # Начальная позиция космического аппарата v_x, v_y = -7e3, 3e3 # Начальная скорость космического аппарата
-
x_p, y_p: Начальные координаты планеты.
-
v_px, v_py: Начальные компоненты скорости планеты.
-
x_s, y_s: Начальная позиция космического аппарата, относительно центра планеты.
-
v_x, v_y: Начальные компоненты скорости космического аппарата, настроенные для гиперболической орбиты.
3. Параметры моделирования
dt = 10 # Временной шаг в секундах num_steps = 785 # Количество шагов моделирования
-
dt: Временной шаг для каждого итерации моделирования.
-
num_steps: Общее количество шагов моделирования.
4. Инициализация хранения данных
x_trajectory, y_trajectory = [], [] x_planet_trajectory, y_planet_trajectory = [], [] speed, distance = [], []
-
x_trajectory, y_trajectory: Списки для хранения позиций космического аппарата во времени.
-
x_planet_trajectory, y_planet_trajectory: Списки для хранения позиций планеты во времени.
-
speed: Список для хранения скорости космического аппарата.
-
distance: Список для хранения расстояния между космическим аппаратом и планетой.
5. Вычисление начального расстояния
initial_distance = np.sqrt((x_s - x_p)**2 + (y_s - y_p)**2)
-
initial_distance: Вычисляет начальное расстояние между космическим аппаратом и планетой по формуле Евклидова расстояния.
6. Основной цикл моделирования
for _ in range(num_steps): r = np.sqrt((x_s - x_p)**2 + (y_s - y_p)**2) if r <= r_p: print("Crash! The spacecraft has collided with the planet.") break
-
r: Текущее расстояние между космическим аппаратом и планетой.
-
Если r меньше или равно радиусу планеты, моделирование останавливается, указывая на столкновение.
7. Гравитационное ускорение
pythonCopy
a_x = -G * M_p * (x_s - x_p) / r**3 a_y = -G * M_p * (y_s - y_p) / r**3
-
a_x, a_y: Компоненты гравитационного ускорения, действующего на космический аппарат со стороны планеты.
8. Обновление скоростей
v_x += a_x * dt v_y += a_y * dt
-
Обновляет компоненты скорости космического аппарата с использованием гравитационного ускорения и временного шага.
9. Обновление позиций
x_s += v_x * dt y_s += v_y * dt x_p += v_px * dt y_p += v_py * dt
-
Обновляет позиции как космического аппарата, так и планеты с использованием их скоростей и временного шага.
10. Сохранение данных
x_trajectory.append(x_s) y_trajectory.append(y_s) x_planet_trajectory.append(x_p) y_planet_trajectory.append(y_p) speed.append(np.sqrt(v_x**2 + v_y**2)) distance.append(r)
-
Сохраняет текущие позиции, скорость и расстояние для каждого шага моделирования.
11. Построение графиков
График траектории
fig1, ax1 = plt.subplots(figsize=(10, 10)) ax1.plot(x_trajectory, y_trajectory, label='Spacecraft Trajectory') ax1.plot(x_planet_trajectory, y_planet_trajectory, label='Planet Trajectory', linestyle='--') ax1.plot(x_p, y_p, 'ro', markersize=10, label='Planet') # Планета ax1.plot(x_trajectory[0], y_trajectory[0], 'go', markersize=8, label='Start Point') # Начальная точка космического аппарата ax1.set_aspect('equal', adjustable='box') ax1.set_xlabel('Координата X (м)') ax1.set_ylabel('Координата Y (м)') ax1.set_title('Траектория космического аппарата с движущейся планетой (гиперболическая)') ax1.set_xlim(-plot_limit, plot_limit) # Установить пределы по оси X ax1.set_ylim(-plot_limit, plot_limit) # Установить пределы по оси Y ax1.grid(True) # Добавить сетку для лучшей визуализации ax1.legend()
-
fig1, ax1: Создает фигуру и ось для графика траектории.
-
Строит траектории космического аппарата и планеты.
-
Отмечает начальную позицию космического аппарата и планеты.
График скорости
fig2, ax2 = plt.subplots(figsize=(10, 5)) time = np.arange(0, len(speed) * dt, dt) ax2.plot(time, speed) ax2.axhline(speed[0], color='r', linestyle='--', label=f'Начальная скорость: {speed[0]:.2f} м/с') ax2.axhline(speed[-1], color='g', linestyle='--', label=f'Конечная скорость: {speed[-1]:.2f} м/с') ax2.set_xlabel('Время (с)') ax2.set_ylabel('Скорость (м/с)') ax2.set_title('Зависимость скорости космического аппарата от времени') plt.minorticks_on() plt.grid(True) plt.grid(which = 'minor', color="grey", alpha=0.25) ax2.legend()
-
fig2, ax2: Создает фигуру и ось для графика скорости.
-
Строит график скорости космического аппарата во времени.
-
Добавляет горизонтальные линии для обозначения начальной и конечной скоростей космического аппарата.
График расстояния
fig3, ax3 = plt.subplots(figsize=(10, 5)) ax3.plot(time, distance) ax3.set_xlabel('Время (с)') ax3.set_ylabel('Расстояние (м)') ax3.set_title('Расстояние между космическим аппаратом и планетой во времени') ax3.grid(True) # Добавить сетку для лучшей визуализации
-
fig3, ax3: Создает фигуру и ось для графика расстояния.
-
Строит график расстояния между космическим аппаратом и планетой во времени.
-
Замечание: время полета подбирался таким образом, чтобы данный график имел вид параболы, где концы имели одинаковыми значениями.
Резюме
Этот код моделирует и визуализирует динамику космического аппарата в гравитационном поле движущейся планеты. Путем итеративного обновления скоростей и позиций и построения данных, он позволяет понять поведение траектории космического аппарата, его скорости и расстояния от планеты во времени.
Графики.
Вывод
Мы смогли объяснить процесс гравитационного маневра с точки зрения физики и математики. Также написали код, который подтвердил нашу теорию.
ссылка на оригинал статьи https://habr.com/ru/articles/873928/
Добавить комментарий