B-평면 타겟팅(B-plane targeting)은 우주 탐사에서 행성 플라이바이(flyby)나 행성의 접근 경로를 설계할 때 사용되는 중요한 개념이다. B-평면 타켓팅의 목표는 B-평면 상에서 특정 목표점을 맞추는 것이며 이 과정을 통해서 행성 플라이바이, 궤도 진입 (orbit insertion) 또는 행성 착륙 목표 지점 타겟팅의 조건을 만족시킬 수 있다.
또한 행성 간 임무를 수행하는 동안 우주비행체는 섭동력의 영향을 받아 궤도가 원하는 임무 궤도에서 벗어날 수 있으므로 현재 우주비행체의 상태벡터와 목표점 좌표를 바탕으로 오차를 보정하기 위한 궤적수정기동(TCM, trajectory correction manuever)을 설계하는 데에도 B-평면 타겟팅을 적용할 수 있다.
먼저 B-평면 타켓팅과 관련하여 유용한 3가지 알고리즘을 소개한다.
첫번째 알고리즘은 쌍곡선 초과속도(hyperbolic excess velocity) 벡터 \(\vec{v}_\infty\), 설계자가 목표로 하는 근지점(periapsis 또는 perigee)까지의 거리 \(r_p\) 및 궤도의 경사각 \(i\) 가 입력으로 주어졌을 때, B-평면 파라미터를 계산하고 이를 기반으로 도착 쌍곡선 궤도를 결정하는 알고리즘이다. 이 알고리즘을 이용하면 B-평면 타겟팅을 위한 조준점(aim point)을 설정할 수 있다. 여기서 쌍곡선 초과속도 벡터는 행성간 비행단계의 결과로 얻어진다. 알고리즘은 다음과 같다.
0. 입력: \(\vec{v}_\infty, \ r_p, \ i\)
1. \(\vec{v}_\infty\) 로 부터 B-평면 좌표축 \(\hat{S}, \hat{R}, \hat{T}\) 을 계산한다.
\( \hat{S} = \frac{\vec{v}_\infty}{ \vert \vec{v}_\infty \vert }, \ \ \ \ \ \hat{T}= \frac{ \hat{S} \times \hat{N} }{ \vert \hat{S} \times \hat{N} \vert }, \ \ \ \ \ \hat{R}= \hat{S} \times \hat{T} \)
2. \(\hat{S}\) 으로부터 적경 (RA, right ascension) \(\alpha_\infty\) 과 적위 (Dec, declination) \(\delta_\infty\) 를 계산한다.
\(\alpha_\infty = \tan^{-1} \frac{S_y}{S_x}, \ \ \ \ \ \delta_\infty = \sin^{-1} S_z \)
3. \(r_p, \ i\) 로 부터 \(B\) 와 \(\phi \) 를 계산한다.
\(B=r_p \sqrt{1+ \frac{2\mu}{v_\infty^2 r_p } } \)
\( \cos (-\phi) = \frac{ \cos i}{\cos \delta_\infty } \)
여기서 위 식에 의하면,
\[ \vert \cos (-\phi) \vert = \lvert \frac{ \cos i}{ \cos \delta_\infty } \rvert \le 1 \]
이므로 \( \vert \cos \delta_\infty \vert \ge \vert \cos i \vert\) 또는 \(\vert \sin \delta_\infty \vert \le \vert \sin i \vert\) 을 만족해야 한다. 즉 \(\vert \delta_\infty \vert \le \vert i \vert \) 이어야 하므로 궤도의 경사각은 진입 점근선의 적위보다 크거나 같게 설정해야 한다.
4. \(B\) 와 \(\phi\) 로 부터 \(B_T, \ B_R\) 및 B-벡터를 계산한다.
\( B_T=B \cos \phi, \ \ \ \ \ B_R=B \sin \phi \)
\( \vec{B}=B_T \hat{T}+B_R \hat{R} \)
5. 도착 쌍곡선 궤도 파라미터를 계산한다.
5-1. 에너지와 장반경 \(a\) 계산
\( \mathcal{E} = \frac{ v_\infty^2 }{2}=- \frac{\mu}{2a} \)
5-2. 이심율 계산
\( e=1- \frac{r_p}{a} \)
5-3. 무한대에서 실제비행각 계산
\( \theta_\infty = \cos^{-1} \left(- \frac{1}{e} \right) \)
5-4. 점근선의 각도 \(\beta\) 및 회전각 \(\delta\) 계산
\( \beta= \cos^{-1} \left( \frac{1}{e} \right), \ \ \ \ \ \delta=2 \sin^{-1} \left( \frac{1}{e} \right) \)
다음은 이 알고리즘의 매트랩 코드다.
vri2bplane.m
function [bplane, hyper] = vri2bplane(vinf_vec, rp, i, mu)
%
% [bplane, hyper] = vri2bplane(vinf_vec, rp, i, mu)
% input
% vinf_vec: excessive velocity vector wrt target planet
% rp : perigee
% i: inclination
% mu: gravitational parameter of target planet (km^3/s^2)
% Mars - 42 828
% Venus - 324 900
% Moon - 4903
% Earth - 398 600
%
% output
% bplane.S_hat: incoming asymptote vector
% bplane.T_hat: B-plane axis
% bplane.R_hat:
% bplane.B_vec: B-vector
% bplane.BT: impact parameter (km)
% bplane.BR
% bplane.phi: B-vector angle (rad)
%
% hyper.vinf: excessive velocity (km/s)
% hyper.RA (rad)
% hyper.Dec
% hyper.a: SMA
% hyper.e: ECC
% hyper.rp: perigee
% hyper.the_inf: true anomaly at inifinity
% hyper.delta: turn angle
% hyper.beta: asymptote angle
%
% (c) st.watermelon
% 1. B-plane axes
vinf = norm(vinf_vec);
S_hat = vinf_vec/vinf;
N_hat = [0 0 1]';
T_hat = cross(S_hat, N_hat);
T_hat = T_hat/norm(T_hat);
R_hat = cross(S_hat, T_hat);
% 2. asymptote RA and Dec
RA = atan2(S_hat(2), S_hat(1));
Dec = asin(S_hat(3));
% 3. B-plane paramters
B = rp*sqrt(1+2*mu/(vinf^2*rp));
phi = -acos(cos(i)/cos(Dec));
if Dec<0
phi = -phi;
end
% 4. B-vector
BT = B*cos(phi);
BR = B*sin(phi);
B_vec = BT*T_hat + BR*R_hat;
% 5. hyperbolic parameters
% 5-1. energy and SMA
E = vinf^2/2;
a = -mu/(2*E);
% 5-2. eccentricity
e = 1-rp/a;
% 5-3. true anomaly at inifinity
the_inf = acos(-1/e);
% 5-4. turn angle and asymptote angle
delta = 2*asin(1/e);
beta = acos(1/e);
%%
% output
bplane.S_hat = S_hat;
bplane.T_hat = T_hat;
bplane.R_hat = R_hat;
bplane.B_vec = B_vec;
bplane.BT = BT;
bplane.BR = BR;
bplane.phi = phi;
hyper.vinf = vinf;
hyper.RA = RA;
hyper.Dec = Dec;
hyper.a = a;
hyper.e = e;
hyper.rp = rp;
hyper.the_inf = the_inf;
hyper.delta = delta;
hyper.beta = beta;
첫번째 알고리즘이 목표로 하는 B-평면 파라미터를 계산하는 것이었다면, 두번째 알고리즘은 실제 우주비행체의 위치벡터 \(\vec{r}\) 과 속도벡터 \(\vec{v}\) 를 이용하여 B-평면과 쌍곡선궤도의 파라미터를 계산하는 알고리즘이다.
0. 입력 \(\vec{r}, \ \vec{v}\)
1. \(\vec{r}\) 와 \(\vec{v}\) 로 부터 각운동량벡터 \(\vec{h}\) 와 이심율벡터 \(\vec{e}\) 를 계산한다.
\( \vec{h}= \vec{r} \times \vec{v}, \ \ \ \ \ \vec{e}= \frac{1}{\mu} \left( \vec{v} \times \vec{h}- \mu \frac{ \vec{r}}{r} \right) \)
2. 쌍곡선 초과속도 \(v_\infty\) 를 계산한다.
\( v_\infty = \sqrt{ v^2- \frac{ 2 \mu}{r} } \)
3. 장반경 \(a\) 와 경사각 \(i\) 를 계산한다.
\( \mathcal{E} = \frac{v_\infty^2 }{2} =- \frac{\mu}{2a} , \ \ \ \ \ \cos i= \frac{ \hat{N} \cdot \vec{h}}{h} \)
4. 실제비행각과 근지점을 계산한다.
\( \cos \theta = \frac{ \vec{e} \cdot \vec{r}}{er}, \ \ \ \ \ r_p=a(1-e) \)
5. 최근접 도달 시간(TCA)을 계산한다.
\( \tanh\frac{F}{2} = \sqrt{ \frac{e-1}{e+1} } \tan \frac{\theta}{2} \)
\( t_{TCA}= \sqrt{ \frac{(-a)^3}{\mu} } (F-e \sinh F ) \)
6. 무한대에서 실제비행각을 계산한다.
\( \theta_\infty = \cos^{-1} (- \frac{1}{e} ) \)
7. 점근선의 각도 \(\beta\) 및 회전각 \(\delta\) 를 계산한다.
\( \beta =\cos^{-1} ( \frac{1}{e} ), \ \ \ \ \ \delta =2 \sin^{-1} ( \frac{1}{e}) \)
8. B-평면 좌표축 \(\hat{S}, \ \hat{R}, \ \hat{T}\) 을 계산한다.
\( \hat{S}= \frac{\vec{e}}{e^2} + \frac{ \sqrt{e^2-1} }{e^2} \frac{ \vec{h} \times \vec{e} }{h} \)
\( \hat{T}= \frac{ \hat{S} \times \hat{N} }{ \vert \hat{S} \times \hat{N} \vert }, \ \ \ \ \ \hat{R}= \hat{S} \times \hat{T} \)
9. \( \vec{B}\) 를 계산한다.
\( \vec{B}= \frac{ \hat{S} \times \vec{h} }{v_\infty } \)
\( B_T= \vec{B} \cdot \hat{T}, \ \ \ \ \ B_R= \vec{B} \cdot \hat{R} \)
\( \tan \phi= \frac{B_R}{B_T} \)
10. \(\hat{S}\) 으로부터 적경 (RA, right ascension) \(\alpha_\infty\) 과 적위 (Dec, declination) \(\delta_\infty\) 를 계산한다.
\( \alpha_\infty = \tan^{-1} \frac{S_y}{S_x}, \ \ \ \ \ \delta_\infty= \sin^{-1} S_z \)
다음은 이 알고리즘의 매트랩 코드다.
rv2bplane.m
function [bplane, hyper] = rv2bplane(r_vec, v_vec, mu)
%
% [bplane, hyper] = rv2bplane(r_vec, v_vec, mu)
% input
% r_vec, v_vec : position and velocity vector (km, km/s) wrt target
% mu: gravitational parameter of target planet (km^3/s^2)
% Mars - 42 828
% Venus - 324 900
% Moon - 4903
% Earth - 398 600
%
% output
% bplane.S_hat: incoming asymptote vector
% bplane.T_hat: B-plane axis
% bplane.R_hat:
% bplane.B_vec: B-vector
% bplane.BT: impact parameter (km)
% bplane.BR
% bplane.phi: angle (rad)
%
% hyper.vinf: excessive velocity (km/s)
% hyper.RA (rad)
% hyper.Dec
% hyper.a: SMA
% hyper.e: ECC
% hyper.i: inclination
% hyper.the: true anomaly
% hyper.rp: perigee
% hyper.tca: time to closest approachs (sec)
% hyper.the_inf: true anomaly at inifinity
% hyper.delta: turn angle
% hyper.beta: asymptote angle
%
% (c) st.watermelon
% 1. angluar momentum and eccentricity
r = norm(r_vec);
v = norm(v_vec);
h_vec = cross(r_vec, v_vec);
h = norm(h_vec);
e_vec = cross(v_vec, h_vec)/mu - r_vec/r;
e = norm(e_vec);
% 2. hyperbolic excessive velocity
vinf = sqrt(v^2-2*mu/r);
% 3. SMA and inlination
E = vinf^2/2;
a = -mu/(2*E);
i = acos([0 0 1]*h_vec/h);
% 4. true anomaly and perigee
the=acos(e_vec'*r_vec/(e*r));
if (r_vec'*v_vec<0) the = -the; end
rp = a*(1-e);
% 5. TCA
tmp = sqrt((e-1)/(e+1))*tan(the/2);
F = 2*atanh(tmp);
tca = sqrt((-a)^3/mu)*(F-e*sinh(F));
% 6. true anomaly at infinity
the_inf = acos(-1/e);
% 7. asymptote angle and turn angle
beta = acos(1/e);
delta = 2*asin(1/e);
% 8. B-plane axes
S_hat = e_vec/e^2 + sqrt(e^2-1)/e^2 * cross(h_vec, e_vec)/h;
N_hat = [0 0 1]';
T_hat = cross(S_hat, N_hat);
T_hat = T_hat/norm(T_hat);
R_hat = cross(S_hat, T_hat);
% 9. B-vector
B_vec = cross(S_hat, h_vec)/vinf;
BT = B_vec'*T_hat;
BR = B_vec'*R_hat;
phi = atan2(BR, BT);
% asymptote RA and Dec
RA = atan2(S_hat(2), S_hat(1));
Dec = asin(S_hat(3));
% output
bplane.S_hat = S_hat;
bplane.T_hat = T_hat;
bplane.R_hat = R_hat;
bplane.B_vec = B_vec;
bplane.BT = BT;
bplane.BR = BR;
bplane.phi = phi;
hyper.vinf = vinf;
hyper.RA = RA;
hyper.Dec = Dec;
hyper.a = a;
hyper.e = e;
hyper.i = i;
hyper.the = the;
hyper.rp = rp;
hyper.tca = tca;
hyper.the_inf = the_inf;
hyper.delta = delta;
hyper.beta = beta;
세번째는 플라이바이 또는 중력도움(gravity assist) 비행에 유용한 알고리즘으로서 진입과 진출 쌍곡선 초과속도 벡터인 \(\vec{v}_{\infty,in}\) 과 \(\vec{v}_{\infty,out}\) 이 주어졌을 때, B-벡터와 근지점 거리 \(r_p\) 를 구하는 알고리즘이다.
0. 입력 \( \vec{v}_{\infty,in}, \ \vec{v}_{\infty,out} \)
1. \(\vec{v}_{\infty,in}\) 로 부터 \(\hat{S}\) 를 계산한다.
\( \hat{S}= \frac{ \vec{v}_{\infty,in} }{ \vert \vec{v}_{\infty,in} \vert } \)
2. \(\vec{v}_{\infty,in}\) 와 \(\vec{v}_{\infty,out}\) 로 부터 \(\hat{h}\) 을 계산한다. \(\hat{h}\) 은 \(\vec{h}\) 와 같은 방향을 갖는 단위벡터다.
\( \hat{h}= \frac{ \vec{v}_{\infty,in} \times \vec{v}_{\infty,out} }{ \vert \vec{v}_{\infty,in} \times \vec{v}_{\infty,out} \vert } \)
3. \(\hat{R}, \ \hat{T}\) 과 \(\hat{B}\) 을 계산한다. \(\hat{B}\) 은 B-백터와 같은 방향을 갖는 단위벡터다.
\( \hat{T}= \frac{ \hat{S} \times \hat{N} }{ \vert \hat{S} \times \hat{N} \vert }, \ \ \ \ \ \hat{R}= \hat{S} \times \hat{T} \)
\(\hat{B} = \hat{S} \times \hat{h} \)
4. 진입(incoming) 점근선과 진출(outgoing) 점근선 사이의 각도인 회전각(turn angle) \(\delta\) 를 계산한다.
\( \cos \delta= \frac{ \vec{v}_{\infty,in} \cdot \vec{v}_{\infty,out} }{ \vert \vec{v}_{\infty,in} \vert \ \vert \vec{v}_{\infty,out} \vert } \)
5. 점근선의 각도 \(\beta\) 와 이심율 \(e\) 를 계산한다.
\( \beta= \frac{\pi-\delta }{2}, \ \ \ \ \ \cos \beta =\frac{1}{e} \)
6. \(r_p\) 를 계산한다.
\( e=1+ \frac{r_p v_\infty^2}{\mu} \ \ \ \ \ \to \ \ \ r_p = \frac{ \mu}{ \vert \vec{v}_{\infty,in} \vert ^2 } (e-1) \)
7. \( \vec{B}\) 를 계산한다.
\( B= \frac{ \mu }{ \vert \vec{v}_{\infty,in} \vert ^2 } \sqrt{e^2-1} \)
\( \vec{B}=B \ \hat{B} \)
'항공우주 > 우주역학' 카테고리의 다른 글
[B-Plane] B-평면 타켓팅 - 2 (0) | 2025.01.31 |
---|---|
[B-Plane] 좌표변환 (0) | 2025.01.04 |
[B-Plane] B-평면의 정의 (0) | 2024.12.30 |
쌍곡선 궤도의 기하학 (0) | 2024.12.27 |
대기 항력에 의한 궤도요소의 시간 변화율 (0) | 2024.10.29 |
댓글