B-평면 타겟팅(B-plane targeting)은 우주 탐사에서 행성 플라이바이(flyby)나 행성의 접근 경로를 설계할 때 사용되는 중요한 개념이다. B-평면 타켓팅의 목표는 B-평면 상에서 특정 목표점을 맞추는 것이며 이 과정을 통해서 행성 플라이바이, 궤도 진입 (orbit insertion) 또는 행성 착륙 목표 지점 타겟팅의 조건을 만족시킬 수 있다.
또한 행성 간 임무를 수행하는 동안 우주비행체는 섭동력의 영향을 받아 궤도가 원하는 임무 궤도에서 벗어날 수 있으므로 현재 우주비행체의 상태벡터와 목표점 좌표를 바탕으로 오차를 보정하기 위한 궤적수정기동(TCM, trajectory correction manuever)을 설계하는 데에도 B-평면 타겟팅을 적용할 수 있다.
먼저 B-평면 타켓팅과 관련하여 유용한 3가지 알고리즘을 소개한다.
첫번째 알고리즘은 쌍곡선 초과속도(hyperbolic excess velocity) 벡터
0. 입력:
1.
2.
3.
여기서 위 식에 의하면,
이므로
4.
5. 도착 쌍곡선 궤도 파라미터를 계산한다.
5-1. 에너지와 장반경
5-2. 이심율 계산
5-3. 무한대에서 실제비행각 계산
5-4. 점근선의 각도

다음은 이 알고리즘의 매트랩 코드다.
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-평면 파라미터를 계산하는 것이었다면, 두번째 알고리즘은 실제 우주비행체의 위치벡터
0. 입력
1.
2. 쌍곡선 초과속도
3. 장반경
4. 실제비행각과 근지점을 계산한다.
5. 최근접 도달 시간(TCA)을 계산한다.
6. 무한대에서 실제비행각을 계산한다.
7. 점근선의 각도
8. B-평면 좌표축
9.
10.
다음은 이 알고리즘의 매트랩 코드다.
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) 비행에 유용한 알고리즘으로서 진입과 진출 쌍곡선 초과속도 벡터인
0. 입력
1.
2.
3.
4. 진입(incoming) 점근선과 진출(outgoing) 점근선 사이의 각도인 회전각(turn angle)
5. 점근선의 각도
6.
7.

'항공우주 > 우주역학' 카테고리의 다른 글
태양동기궤도(Sun Synchronous Orbit) (0) | 2025.02.23 |
---|---|
[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 |
댓글