본문 바로가기
항공우주/우주역학

궤도요소 (COE) 계산

by 깊은대학 2023. 7. 26.

고전 궤도요소 (COE, classical orbital elements)의 6개 파라미터는 우주비행체의 위치벡터 및 속도벡터와 함수관계에 있다. 따라서 임의의 시간 t=t0 에서 주어진 위치벡터와 속도벡터를 궤도요소로 변환하면 궤도의 크기, 모양, 자세 등을 알 수 있다. 시간 t=t0 에서 주어진 위치벡터와 속도벡터 r(t0), v(t0) 에서 궤도요소를 구하는 과정은 두 단계로 나누어진다.

우선 위치벡터와 속도벡터로부터 각운동량 벡터 h, 승교선 벡터(ascending node vector) n, 이심율 벡터(eccentricity vector) e 를 구하는 단계와 이들 벡터로부터 궤도요소를 구하는 단계이다.

 

 

다음은 위치벡터와 속도벡터로부터 각운동량 벡터, 승교선 벡터, 이심율 벡터를 구하는 방법에 대한 설명이다.

각운동량 벡터 h:
각운동량 벡터 h 는 정의에 의해서

 

(1)h=r(t0)×v(t0)

 

로 구하면 된다. 각운동량 벡터는 전 궤도상에서 상수로 유지되므로 모든 tt0 에서 같다. 즉, h=r(t)×v(t), tt0 이다.

승교선 벡터 n:
승교선 벡터는 적도면과 궤도면의 교차선과 평행하며 크기는 각운동량과 같고 방향은 지구중심에서 우주비행체가 지구의 남반구에서 북반구로 올라가면서 만나는 점을 향하는 벡터이다. 적도면과 직각인 벡터는 i^3 이고 궤도면과 직각인 벡터는 h 이므로 승교선 벡터는 두 벡터에 모두 직각이 되도록 다음과 같이 정의한다.

 

(2)n=i^3×h

 

h 가 상수벡터이므로 승교선 벡터도 상수벡터이다.

 

 

이심율 벡터 e:
이심율 벡터는 크기가 이심율 e 과 같고 방향은 근지점을 향하는, 즉 궤도중심좌표계(perifocal frame)의 p^1 축과 같은 방향을 가지는 벡터로 정의한다. 궤도중심좌표계 {p} 는 우주비행체의 위치를 궤도상에 표시하기 위한 기준좌표계로서 지구의 중심에 원점이 위치한다. p^1 축은 근지점을 향하며, p^3 는 궤도면의 직각 방향 또는 각운동량 벡터 방향을 향하고 p^2 는 오른손 법칙에 의해서 정해진다. 원궤도의 경우 근지점이 없으므로 승교선 벡터 방향을 p^1 축으로 정의하며, 적도궤도이면서 원궤도인 경우는 ECI좌표계의 i^1 축을 p^1 축으로 정의한다. 궤도중심좌표계는 ECI좌표계에 고정되어 있으므로 관성좌표계의 하나로 볼 수 있다.

 

 

궤적방정식 유도 과정 (https://pasus.tistory.com/102)에 의하면 다음 식이 있었다.

 

(3)v×h=μrr+B

 

여기서 B 는 적분상수벡터이다. 실제비행각 θ 는 위치벡터 r 과 적분상수벡터 B 의 사잇각이므로 (https://pasus.tistory.com/171) B 는 근지점을 향하는, 또는 궤도중심좌표계의 p^1 과 같은 방향을 가지는 벡터이다. 이심율은 e=Bμ 이므로 이심율 벡터는

 

(4)e=Bμ

 

로 놓을 수 있다. B 가 상수벡터이므로 이심율 벡터도 상수벡터임을 알 수 있다. 식 (3)에서 B 를 구하고 식 (4)에 대입하면

 

(5)e=1μ(v×hμrr)

 

가 된다. h=r×v 이고, a×(b×c)=(ac)b(ab)c 의 관계를 이용하여 오른쪽 항을 다시 쓰면,

 

(6)e=1μ((v2μr)r(rv)v)

 

이 된다.

 

 

다음은 각운동량 벡터 h, 승교선 벡터 n, 이심율 벡터 e 로부터 궤도요소를 구하는 단계이다.

통반경 p 와 이심율 e:
이심율은 이심율 벡터의 크기이고, 통반경은 정의에 의하여 구하면 된다. 장반경은 포물선궤도를 제외하고는 p=a(1e2) 의 관계가 성립하므로 다음과 같이 구할 수 있다.

 

(7)e=|e|p=h2μ,     a=p1e2

 

여기서 h=|h| 이다.

 

 

경사각 i:
경사각은 i^3h 의 사잇각이므로 i^3h 의 내적을 이용하여 구할 수 있다. 경사각의 범위는 0도에서 180도 이다.

 

(8) i=cos1(i^3hh)

 

RAAN Ω:
RAAN은 i^1n 의 사잇각이므로 i^1n 의 내적을 이용하여 계산할 수 있다.

 

(9) Ω=cos1(i^1nn)

 

 

 

RAAN은 180도에서 180도의 범위를 가지나 식 (9)의 계산으로는 0도에서 180도의 범위밖에 계산하지 못하므로 부호를 구별할 수 있는 정보가 더 필요하다. 다음 그림의 A영역에서는 RAAN 이 0도에서 180도 사이지만 B영역에서는 RAAN 이 180도에서 0도 사이가 된다. 만약 n 이 B영역에 있다면 식 (9)로 계산한 RAAN 을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 i^2n 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하므로, RAAN 부호에 관한 다음 교정식을 도입한다.

 

 만약  i^2n<0  이면,  ΩΩ

 

 

 

적도궤도인 경우 n 이 정의되지 않으므로 RAAN 역시 정의되지 않는다. 이 경우 RAAN을 0도로 간주한다.

근점편각 ω:
근점편각은 ne 의 사잇각이므로 ne 의 내적을 이용하여 구할 수 있다.

 

(10) ω=cos1(nene)

 

 

 

근점편각은 궤도의 운동방향으로 측정해야 한다. RAAN 과 마찬가지로 식 (10)으로 계산한 근점편각도 0도에서 180도의 범위밖에 계산하지 못하므로 부호를 구별할 수 있는 정보가 더 필요하다. 아래 그림의 A영역에서는 근점편각이 0도에서 180사이지만 B영역에서는 근점편각이 180도에서 0도 사이가 된다. 만약 e 가 B영역에 있다면 식 (10)으로 계산한 근점편각을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 i^3e 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하므로, 근점편각 부호에 관한 다음 교정식을 도입한다.

 

 만약  i^3e<0  이면,  ωω

 

 

 

적도궤도인 경우 n 이 정의되지 않으므로 근점편각은 i^1e 의 사잇각으로 정의하며 i^1e 의 내적을 이용하여 구할 수 있다.

 

(11) ω=cos1(i^1ee)

 

다음 그림의 A영역에서는 근점편각이 0도에서 180도 사이지만 B영역에서는 근점편각이 180도에서 0도 사이가 되므로, 만약 e 가 B영역에 있다면 식 (11)로 계산한 근점편각을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 i^2e 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하다. 한편, 경사각이 180도이면 궤도의 회전방향이 반대이므로 근점편각의 부호를 반대로 해줘야 한다. 따라서 근점편각 부호에 관한 다음 교정식을 도입하기로 한다.

 

만약  i^2e<0  이면,  ωω만약  i=1800  이면,  ωω

 

 

 

원궤도인 경우 e 가 정의되지 않으므로 근점편각 역시 정의되지 않는다. 이 경우 근점편각을 0도로 간주한다.

 

 

실제비행각 θ:
실제비행각은 위치벡터 r 의 함수이므로 다른 궤도요소가 모두 상수이었던 것과는 달리 시간의 함수이다. 따라서 이를 명확히 하기 위하여 θ(t) 라고 표기하기도 한다. 이 경우는 위치벡터가 t=t0 에서 주어졌으므로 실제비행각은 θ(t0) 라고 표기한다.

실제비행각은 er 의 사잇각이므로 er 의 내적을 이용하여 구할 수 있다.

 

(12) θ(t0)=cos1(erer)

 

실제비행각은 궤도의 운동방향으로 측정해야 한다. 다음 그림의 A영역에서는 실제비행각이 0도에서 180도 사이지만 B영역에서는 실제비행각이 180도에서 0도 사이가 되므로, 만약 r 이 B영역에 있다면 식 (12)로 계산한 실제비행각을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 rv 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하므로, 실제비행각 부호에 관한 다음 교정식을 도입한다.

 

만약  rv<0  이면,  θ(t0)θ(t0)

 

 

 

원궤도인 경우 e 가 정의되지 않으므로 실제비행각은 nr 의 사잇각으로 정의하며 nr 의 내적을 이용하여 구할 수 있다.

 

(13) θ(t0)=cos1(nrnr)

 

다음 그림의 A영역에서는 실제비행각이 0도에서 180도 사이지만 B영역에서는 실제비행각이 180도에서 0도 사이가 되므로, 만약 r 이 B영역에 있다면 식 (13)으로 계산한 실제비행각을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 nv 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하므로, 실제비행각 부호에 관한 다음 교정식을 도입한다.

 

만약  nv>0  이면,  θ(t0)θ(t0)

 

 

 

원궤도이면서 적도궤도인 경우 e 뿐만 아니라 n 도 정의되지 않으므로 실제비행각은 i^1r 의 사잇각으로 정의하며 i^1r 의 내적을 이용하여 구할 수 있다.

 

(14) θ(t0)=cos1(i^1rr)

 

다음 그림의 A영역에서는 실제 비행각이 0도에서 180도 사이지만 B영역에서는 실제비행각이 180도에서 0도 사이가 되므로, 만약 r 이 B영역에 있다면 식 (14)로 계산한 실제비행각을 음수로 바꾸어 줘야 한다. 두 영역의 구별은 i^1v 의 사잇각이 예각인지 둔각인지를 판별함으로써 가능하므로, 실제 비행각 부호에 관한 다음 교정식을 도입한다.

 

만약  i^1v>0  이면,  θ(t0)θ(t0)

 

 

 

예를 들어서, 어떤 싯점에서 우주비행체의 위치벡터와 속도벡터가 다음과 같이 주어졌다면,

 

r=6044.2 i^13491.6 i^2+2500.2 i^3 (km)v=3.4587 i^1+6.6171 i^2+2.5326 i^3 (km/sec)

 

궤도요소 a, e, i, Ω, ω, θ 는 각각 다음과 같이 계산된다.

 

a=8788.1 km,   e=0.1712,   i=153.250Ω=255.300,   ω=20.070,   θ=28.450

 

다음은 위치벡터와 속도벡터를 고전 궤도요소로 변환해 주는 매트랩 코드다.

 

function [a,es,ii,W,w,theta] = rv2coe(r,v)

% [a,e,i,W,w,theta] = rv2coe(r,v)
%        Converting vectors R and V in inertial frame to orbit elements,
%        where V=dR/dt in inertial frame.
% Input  (R, V) in km, km/sec
% Output (a, e, i, W, w, theta) in (km, sec) and degrees  (p=a(1-e^2))
%        equatorial orbit: W=0, w is angle between (i_1) and perigee
%        circular orbit:   w=0, theta is angle between ascending node and R
%        equatorial and circular orbit: W=w=0, theta is angle between (i_1) and R
%
% coded by st.watermelon

Req = 6378.137; % km Earth radius
e_er = 0.0818191908426; % Earth eccentricity


mu=398600; % gravitational parameter km^3/s^2

% angular momentum, ascending node and eccentricity vectors
h = cross(r,v);
n = cross([0 0 1]',h);
ev = ((v'*v-mu/norm(r))*r-(r'*v)*v)/mu;

% 
p = h'*h/mu;   % semi-latus rectum
es = norm(ev); % eccentricity
ns = norm(n);
ii = acos([0 0 1]*h/(norm(h)))*180/pi;  % inclination
a = p/(1-es^2);

eps = 1e-8;
 

if abs(ii)<=eps | abs(ii-180)<=eps % equatorial orbit

    W=0;
    
    if abs(es)>eps % equatorial, but NOT circular orbit
    
        w = acos([1 0 0]*ev/es)*180/pi;
        if ([0 1 0]*ev<0) w = -w; end
        if (abs((ii-180))<=eps) w = -w; end
        theta = acos(ev'*r/(es*norm(r)))*180/pi;
        if (r'*v<0) theta = -theta; end
        
    else % euqatorial and circular orbit
        w = 0;
        theta = acos([1 0 0]*r/(nomr(r)))*180/pi;
        if ([1 0 0]*v>0) theta = -theta; end
    end
    
else  % NOT equatorial orbit
    
    W = acos([1 0 0]*n/ns)*180/pi;
    if ([0 1 0]*n<0) W = -W; end
    
    if abs(es)>eps % NOT circular orbit
    
        w = acos(n'*ev/(ns*es))*180/pi;
        if ([0 0 1]*ev<0) w = -w; end
        theta=acos(ev'*r/(es*norm(r)))*180/pi;
        if (r'*v<0) theta = -theta; end
        
    else % circular orbit
        w = 0;
        theta = acos(n'*r/(ns*norm(r)))*180/pi;
        if (n'*v>0) theta = -theta; end
    end
    
end

 

 

댓글