MATLAB计算卫星相对位置、速度和加速度
问题描述:
给定两个卫星的轨道根数,计算出追踪卫星B (chase satellite) 相对目标卫星A (target satellite) 的位置、速度和加速度。相对运动的参考坐标系(xyz)附在目标卫星A上,见下图。
计算步骤:
- 根据给定的轨道要素,计算卫星A和卫星B的绝对位置矢量和绝对速度矢量(参考系为赤惯系), r A , r B , v A , v B \bm{r_{A}}, \bm{r_{B}}, \bm{v_{A}}, \bm{v_{B}} rA,rB,vA,vB。
- 计算两个卫星的加速度矢量。
a
A
=
−
μ
r
A
∣
∣
r
A
∣
∣
3
\bm{a_A}= -\mu \frac{\bm{r_A}}{||\bm{r_A}||^3}
aA=−μ∣∣rA∣∣3rA
a B = − μ r B ∣ ∣ r B ∣ ∣ 3 \bm{a_B}= -\mu \frac{\bm{r_B}}{||\bm{r_B}||^3} aB=−μ∣∣rB∣∣3rB - 计算相对参考坐标的单位矢量(unit vector)。
i ^ = r A r A \hat{\bm{i}} = \frac{\bm{r_A}}{r_A} i^=rArA
k ^ = r A × v A ∣ ∣ r A × v A ∣ ∣ \hat{\bm{k}} = \frac{\bm{r_A}\times\bm{v_A}}{||\bm{r_A}\times\bm{v_A}||} k^=∣∣rA×vA∣∣rA×vA
j ^ = k ^ × i ^ \hat{\bm{j}} =\hat{\bm{k}} \times \hat{\bm{i}} j^=k^×i^ - 计算相对参考坐标系的角速度。
Ω = r A × v A r A 2 = h A r A 2 \bm{\Omega} = \frac{\bm{r_A}\times\bm{v_A}}{{r_A}^2} = \frac{\bm{h_A}}{{r_A}^2} Ω=rA2rA×vA=rA2hA - 计算相对参考坐标系的角加速度。
Ω ˙ = − 2 ( r A ⋅ v A ) r A 2 Ω \bm{\dot{\Omega}} = -\frac{2(\bm{r_A}\cdot\bm{v_A})}{{r_A}^2}\bm{\Omega} Ω˙=−rA22(rA⋅vA)Ω - 计算卫星的相对位置(相对于赤惯系)。
r r e l = r B − r A \bm{r_{rel}} = \bm{r_B} - \bm{r_A} rrel=rB−rA - 计算卫星的相对速度(相对于赤惯系)。
v B = v A + Ω × r r e l + v r e l \bm{v_B} = \bm{v_A}+\bm{\Omega}\times\bm{r_{rel}} + \bm{v_{rel}} vB=vA+Ω×rrel+vrel
v r e l = v B − v A − Ω × r r e l \bm{v_{rel}} = \bm{v_B} - \bm{v_A}-\bm{\Omega}\times\bm{r_{rel}} vrel=vB−vA−Ω×rrel - 计算卫星的相对加速度(相对于赤惯系)。
a B = a A + Ω ˙ × r r e l + Ω × ( Ω × r r e l ) + 2 Ω × v r e l + a r e l \bm{a_B} = \bm{a_A}+\bm{\dot{\Omega}}\times\bm{r_{rel}}+\bm{\Omega}\times(\bm{\Omega}\times\bm{r_{rel}})+2\bm{\Omega}\times\bm{v_{rel}}+\bm{a_{rel}} aB=aA+Ω˙×rrel+Ω×(Ω×rrel)+2Ω×vrel+arel
a r e l = a B − a A − Ω ˙ × r r e l − Ω × ( Ω × r r e l ) − 2 Ω × v r e l \bm{a_{rel}} = \bm{a_B} - \bm{a_A}-\bm{\dot{\Omega}}\times\bm{r_{rel}}-\bm{\Omega}\times(\bm{\Omega}\times\bm{r_{rel}})-2\bm{\Omega}\times\bm{v_{rel}} arel=aB−aA−Ω˙×rrel−Ω×(Ω×rrel)−2Ω×vrel - 计算卫星从赤惯系转换到移动坐标系(xyz)的变换矩阵。
[ Q ] X x = [ i ^ j ^ k ^ ] [\bm{Q}]_{Xx} = \begin{bmatrix} \hat{\bm{i}} \\ \hat{\bm{j}} \\ \hat{\bm{k}} \end{bmatrix} [Q]Xx=⎣⎡i^j^k^⎦⎤ - 计算卫星的相对位置、速度和加速度(参考系为移动坐标xyz)。
r r e l ) x y z = [ Q ] X x ⋅ r r e l \bm{r_{rel}})_{xyz} =[\bm{Q}]_{Xx}\cdot\bm{r_{rel}} rrel)xyz=[Q]Xx⋅rrel
v r e l ) x y z = [ Q ] X x ⋅ v r e l \bm{v_{rel}})_{xyz} =[\bm{Q}]_{Xx}\cdot\bm{v_{rel}} vrel)xyz=[Q]Xx⋅vrel
a r e l ) x y z = [ Q ] X x ⋅ a r e l \bm{a_{rel}})_{xyz} =[\bm{Q}]_{Xx}\cdot\bm{a_{rel}} arel)xyz=[Q]Xx⋅arel
算例:
卫星A:
a
=
6803.6
k
m
,
e
=
0.02
,
i
=
60
°
,
Ω
=
40
°
,
ω
=
30
°
,
θ
=
40
°
a = 6803.6km,e=0.02, i = 60\degree, \Omega = 40\degree,\omega=30\degree,\theta = 40\degree
a=6803.6km,e=0.02,i=60°,Ω=40°,ω=30°,θ=40°
卫星B:
a
=
6878.9
k
m
,
e
=
0.005
,
i
=
50
°
,
Ω
=
40
°
,
ω
=
120
°
,
θ
=
40
°
a = 6878.9km,e=0.005, i = 50\degree, \Omega = 40\degree,\omega=120\degree,\theta = 40\degree
a=6878.9km,e=0.005,i=50°,Ω=40°,ω=120°,θ=40°
Matlab 代码:
% Satellite relative motion in orbit
% Calculate the position, velocity and acceleration of spacecraft B relative to spacecraft A, measured along the xyz axes of the co-moving coordinate system of spacecraft A
% Input:Six orbital elements
% Output: Relative position, velocity and acceleration
clc
clear all
mu = 3.9860*1e5;
a1 = 6803.6;
a2 = 6878.9;
e1 = 0.02;
e2 = 0.005;
i1 = 60;
i2 = 70;
raan1 = 40;
raan2 = 40;
perigee1 = 30;
perigee2 = 120;
true1 = 40;
true2 = 40;
% Keplerian_RV() convert orbital elements into position and velocity vectors
[rA, vA] = Keplerian_RV(a1,e1,raan1,i1,perigee1,true1);
[rB, vB] = Keplerian_RV(a2,e2,raan2,i2,perigee2,true2);
% accelerations of two spacecraft
aA = -mu*rA/(norm(rA)^3);
aB = -mu*rB/(norm(rB)^3);
% momentum
hA = cross(rA,vA);
% co-moving frame of reference
I = rA/norm(rA);
K = hA/norm(hA);
J = cross(K,I);
% angular velocity
angV = hA/(norm(rA)^2);
% angular acceleration
angA = -2*(dot(rA,vA))/(norm(rA)^2)*angV;
% relative position
rRel = rB - rA;
% relative velocity: vB-vA-angV x rRel
vRel = vB-vA- cross(angV,rRel);
% relative acceleration:
aRel = aB-aA-cross(angA,rRel)-cross(angV,cross(angV,rRel))-cross(2*angV,vRel);
% transformation matrix
Q = [I';J';K'];
% relative components along the axes of the co-moving xyz frame of spacecraft A
rRelXYZ = Q*rRel;
vRelXYZ = Q*vRel;
aRelXYZ = Q*aRel;
计算结果:
r
r
e
l
)
x
y
z
=
[
−
6730
6840.1
406.96
]
(
k
m
)
;
\bm{r_{rel}})_{xyz} = \begin{bmatrix}-6730 \\6840.1 \\406.96\end{bmatrix}(km);
rrel)xyz=⎣⎡−67306840.1406.96⎦⎤(km);
v r e l ) x y z = [ 0.30306 0.10057 − 1.24546 ] ( k m / s ) ; \bm{v_{rel}})_{xyz}=\begin{bmatrix}0.30306\\0.10057\\-1.24546\end{bmatrix}(km/s); vrel)xyz=⎣⎡0.303060.10057−1.24546⎦⎤(km/s);
a r e l ) x y z = [ − 0.000139 − 0.000189 − 0.000504 ] ( k m / s 2 ) \bm{a_{rel}})_{xyz}=\begin{bmatrix}-0.000139\\-0.000189\\ -0.000504 \end{bmatrix}(km/s^2) arel)xyz=⎣⎡−0.000139−0.000189−0.000504⎦⎤(km/s2)
参考文献:
Curtis, Howard D. Orbital mechanics for engineering students. Butterworth-Heinemann, 2013.
注:本文为作者的一篇学习笔记,记录了计算卫星相对位置、速度和加速度的算法和程序代码。
附Keplerian_RV代码:
% This is to convert keplerian orbital elements to position and velocity
% vectors
% Inputs: [a,eccen,raan,inclin,arg_perigee,true_anomaly]
% Outputs: rijk, vijk
% Example: [rijk,vijk] = Keplerian_RV(7437147.167,0.0017234,99.850837,312.921873,119.8701972,155.0849921)
function [rijk, vijk] = Keplerian_RV(a,eccen,inclin,raan,arg_perigee,true_anomaly)
mu = 3.9860*1e14; % mu = 3.9860*1e5 (Choose the correct measurement unit)
h = sqrt(mu*a*(1-eccen*eccen));
R_x = h*h/mu*(1/(1+eccen*cosd(true_anomaly)))*[cosd(true_anomaly), sind(true_anomaly), 0];
V_x = (mu/h)*[-sind(true_anomaly), eccen+cosd(true_anomaly), 0];
Q1 = [cosd(arg_perigee), sind(arg_perigee), 0;-sind(arg_perigee), cosd(arg_perigee),0;0,0,1];
Q2 = [1,0,0;0,cosd(inclin), sind(inclin);0,-sind(inclin),cosd(inclin)];
Q3 = [cosd(raan), sind(raan),0; -sind(raan),cosd(raan),0; 0,0,1];
Qx = Q1*Q2*Q3;
Qxt = Qx';
rijk = Qxt * R_x';
vijk = Qxt * V_x';
end