MATLAB计算卫星相对位置、速度和加速度

该文介绍了如何使用MATLAB计算两个卫星间的相对位置、速度和加速度,包括从轨道要素到相对参考坐标的转换,并给出了具体的MATLAB代码实现。算例中详细展示了计算过程,最后得到了卫星在移动坐标系下的相对坐标、速度和加速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MATLAB计算卫星相对位置、速度和加速度

问题描述:
给定两个卫星的轨道根数,计算出追踪卫星B (chase satellite) 相对目标卫星A (target satellite) 的位置、速度和加速度。相对运动的参考坐标系(xyz)附在目标卫星A上,见下图。
在这里插入图片描述
计算步骤:

  1. 根据给定的轨道要素,计算卫星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
  2. 计算两个卫星的加速度矢量。 a A = − μ r A ∣ ∣ r A ∣ ∣ 3 \bm{a_A}= -\mu \frac{\bm{r_A}}{||\bm{r_A}||^3} aA=μrA3rA
    a B = − μ r B ∣ ∣ r B ∣ ∣ 3 \bm{a_B}= -\mu \frac{\bm{r_B}}{||\bm{r_B}||^3} aB=μrB3rB
  3. 计算相对参考坐标的单位矢量(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×vArA×vA
    j ^ = k ^ × i ^ \hat{\bm{j}} =\hat{\bm{k}} \times \hat{\bm{i}} j^=k^×i^
  4. 计算相对参考坐标系的角速度。
    Ω = 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
  5. 计算相对参考坐标系的角加速度。
    Ω ˙ = − 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(rAvA)Ω
  6. 计算卫星的相对位置(相对于赤惯系)。
    r r e l = r B − r A \bm{r_{rel}} = \bm{r_B} - \bm{r_A} rrel=rBrA
  7. 计算卫星的相对速度(相对于赤惯系)。
    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=vBvAΩ×rrel
  8. 计算卫星的相对加速度(相对于赤惯系)。
    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=aBaAΩ˙×rrelΩ×(Ω×rrel)2Ω×vrel
  9. 计算卫星从赤惯系转换到移动坐标系(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^
  10. 计算卫星的相对位置、速度和加速度(参考系为移动坐标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]Xxrrel
    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]Xxvrel
    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]Xxarel

算例:
卫星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.100571.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.0001390.0001890.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
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值