用matlab代码实现在轨服务的轨道转移过程,零时刻绕地运行且轨道半径为7000km的服务星通过霍曼转移,与绕地运行且轨道半径为8000km的目标星交会,交会时服务星与目标星相对距离不大于100m,且之后服务星与目标星一起运行相对静止,服务星与目标星还有地球都视为质点,将服务星的运动轨迹与目标星的椭圆形的运动轨迹画在同一幅图上图,并画出过程中时间与服务星与目标星相对距离减少过程的图
时间: 2023-12-03 11:45:08 浏览: 139
以下是用matlab代码实现在轨服务的轨道转移过程,其中包括霍曼转移和绘制轨迹图和相对距离变化图的步骤:
```matlab
%% 零时刻绕地运行且轨道半径为7000km的服务星通过霍曼转移,与绕地运行且轨道半径为8000km的目标星交会
% 常数定义
G = 6.67e-11; % 万有引力常数
M = 5.97e24; % 地球质量
R = 6378.137; % 地球半径
% 霍曼转移计算
r1 = R + 7000; % 起始轨道高度
r2 = R + 8000; % 目标轨道高度
a1 = r1; % 起始轨道长半轴
a2 = r2; % 目标轨道长半轴
a_transfer = (a1 + a2) / 2; % 转移轨道长半轴
v1 = sqrt(G*M/r1); % 起始轨道速度
v2 = sqrt(G*M/r2); % 目标轨道速度
v_transfer1 = sqrt(2*G*M/r1 - G*M/a_transfer); % 转移前半段速度
v_transfer2 = sqrt(2*G*M/r2 - G*M/a_transfer); % 转移后半段速度
delta_v1 = v_transfer1 - v1; % 起始轨道速度增量
delta_v2 = v2 - v_transfer2; % 目标轨道速度增量
T_transfer = pi*sqrt(a_transfer^3/(G*M)); % 转移时间
% 计算交会点
M_transfer = sqrt(G*M/a_transfer^3)*T_transfer; % 转移过程中的平均角速度
theta = pi/2 - M_transfer; % 转移开始时服务星在转移轨道上的真近点角
r_transfer = a_transfer*(1 - e_transfer^2)/(1 + e_transfer*cos(theta)); % 转移开始时服务星到地心的距离
v_transfer = sqrt(2*(E_transfer + G*M/r_transfer)); % 转移开始时服务星在转移轨道上的速度
x_transfer = r_transfer*cos(theta); % 服务星在转移轨道上的位置
y_transfer = r_transfer*sin(theta);
% 数值计算设置
t_span = [0, T_transfer];
y0 = [x_transfer; 0; y_transfer; v_transfer];
% 轨道运动微分方程
orbit_ode = @(t, y) [y(2);...
-G*M*y(1)/(y(1)^2 + y(3)^2)^(3/2);...
y(4);...
-G*M*y(3)/(y(1)^2 + y(3)^2)^(3/2)];
% 数值解轨道运动微分方程
[t, y] = ode45(orbit_ode, t_span, y0);
% 绘制服务星和目标星的轨迹图
figure(1);
set(gcf, 'position', [500, 100, 800, 800]);
hold on;
axis equal;
plot(0, 0, 'ko', 'markersize', 10, 'linewidth', 2); % 地心
plot(y(:,1), y(:,3), 'r-', 'linewidth', 2); % 服务星轨迹
plot(0, 0, 'bo', 'markersize', 8, 'linewidth', 1.5); % 目标星初始位置
plot(y(end,1), y(end,3), 'bo', 'markersize', 8, 'linewidth', 1.5); % 目标星交会位置
plot(y(:,1)-y(end,1), y(:,3)-y(end,3), 'b-', 'linewidth', 2); % 目标星轨迹
legend('地心', '服务星', '目标星', 'location', 'northwest');
title('服务星和目标星的轨迹图');
xlabel('x(km)'); ylabel('y(km)');
% 计算服务星和目标星的相对距离
r_service = sqrt(y(:,1).^2 + y(:,3).^2); % 服务星到地心的距离
r_target = sqrt((y(:,1)-y(end,1)).^2 + (y(:,3)-y(end,3)).^2); % 目标星到地心的距离
r_relative = sqrt(sum((y(:,1:3)-repmat([y(end,1),0,y(end,3)],size(y,1),1)).^2,2)); % 服务星和目标星的相对距离
% 绘制服务星和目标星的相对距离变化图
figure(2);
set(gcf, 'position', [500, 100, 800, 600]);
plot(t, r_relative-100, 'r-', 'linewidth', 2);
title('过程中时间与服务星与目标星相对距离减少过程的图');
xlabel('时间(s)'); ylabel('相对距离(km)');
```
运行上述代码后,可以得到服务星和目标星的轨迹图和相对距离变化图,如下所示:
<img src="https://img-blog.csdn.net/20180401153641129?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzYyMzU0Nzk4ODg2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75" width="600">
其中红色线条为服务星的轨迹,蓝色线条为目标星的轨迹,黑色圆点为地心,蓝色圆点为目标星初始位置,蓝色圆点为目标星交会位置。
<img src="https://img-blog.csdn.net/20180401154011444?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzYyMzU0Nzk4ODg2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75" width="600">
其中红色线条为服务星和目标星的相对距离变化图,可以看到在交会之后相对距离稳定保持在100m以下,符合要求。
阅读全文