3. 星间链路几何与可见性建模
星间链路能否建立,首先取决于两颗卫星在空间中是否“互相看得见”。几何与可见性建模的任务,就是把轨道位置转化为可判定的距离、角度和遮挡关系,并进一步生成连续可用的时间窗口。本节围绕三个核心量——星间距离、仰角与方位角——以及两类遮挡——地球遮挡与大气遮挡,说明从轨道数据到可见性时间窗口的完整建模方法。
一、坐标系与角度定义
建模前必须先固定参照系,否则角度正负号会前后矛盾。工程中常用两种坐标系:地心惯性系(ECI)用于描述卫星在惯性空间的位置,地心固连系(ECEF)用于描述地面站与地球几何。本节统一约定:所有位置矢量在 ECI 下计算,地球遮挡判断在 ECI 下完成;涉及地面站仰角时,将地面站坐标转换到 ECI 后再计算。
设卫星 A 位置为 r_A,卫星 B 位置为 r_B,两者相对矢量 d = r_B − r_A。星间距离即 |d|。仰角与方位角是“站心”概念:以某一端(如卫星 A)为观测点,其本地水平面由地心指向 A 的径向矢量 r_A 定义。仰角 el 是目标方向与本地水平面的夹角,方位角 az 是目标方向在本地水平面投影相对本地北向的夹角,通常从北向东为正(0°~360°)。
二、星间距离、仰角与方位角计算
星间距离直接由矢量模长得到:range = |r_B − r_A|。仰角计算需要构造本地坐标基。以 A 为观测点,本地天顶单位矢量为 u_z = r_A / |r_A|;本地东向可取 u_e = (z_axis × u_z) / |z_axis × u_z|,其中 z_axis 为 ECI 的 Z 轴;本地北向 u_n = u_z × u_e。于是目标方向单位矢量 u_d = d / |d|,仰角为:
el = asin( u_d · u_z )
az = atan2( u_d · u_e , u_d · u_n ) // 归一到 [0, 360°)
需要注意,当 A 位于极点附近时 z_axis × u_z 接近零,本地东向退化,应改用其他参考轴或直接以轨道面法向构造本地基。实际仿真中,这一退化点常被忽略,导致极轨卫星在极点附近方位角跳变。
三、地球遮挡与大气遮挡判断
地球遮挡的本质是:连接 A、B 的线段是否与地球球体相交。设地球半径 R_e(含平均半径约 6371 km),A 到地心距离 rA = |r_A|,B 到地心距离 rB = |r_B|,A、B 间距离 L = |d|。地心到线段 AB 的最短距离 h 可由三角形面积公式求得:
s = (rA + rB + L) / 2
area = sqrt( s(s−rA)(s−rB)(s−L) )
h = 2 * area / L
若 h < R_e 且垂足落在线段内,则被地球遮挡
更稳健的判据是同时检查两端是否在地球背面:若 r_A · d < 0 且 r_B · (−d) < 0,说明地心投影落在线段内部,此时才用 h < R_e 判定遮挡;否则线段延长线虽靠近地心,但实际路径并不穿过地球。
大气遮挡通常以“大气有效半径”近似,即把地球半径加上大气层厚度 H_atm(对流层与平流层有效折射影响常取 80~100 km,工程中也可取 100 km 作为保守值)。判据与地球遮挡相同,只是把 R_e 替换为 R_e + H_atm。这样得到的可见性更保守,能避免链路在低仰角穿越稠密大气时出现额外衰减或折射误差。若链路两端都在大气层外,大气遮挡主要影响的是“擦地”路径,因此该判据对低轨星间链路尤为关键。
四、可见性时间窗口的生成方法
可见性时间窗口不是单点判断,而是沿时间轴对可见性函数做连续采样与边界细化。典型流程如下:
- 设定仿真时间步长。低轨星间链路相对运动快,建议步长 1~10 s;若只做粗筛,可用 30 s,再对边界做二分细化。
- 逐时刻计算几何量。由轨道递推得到
r_A(t)、r_B(t),计算range(t)、el(t)、az(t),并判断地球遮挡与大气遮挡。 - 构造可见性布尔序列。当且仅当“未被地球遮挡、未被大气遮挡、且两端仰角满足任务门限”时,该时刻可见。门限可按任务设定,例如星间链路要求两端仰角均大于 5°。
- 提取上升沿与下降沿。布尔序列由 false 变 true 的时刻为窗口起点,由 true 变 false 的时刻为窗口终点。
- 边界细化。在跨越时刻前后各取一个步长,用二分法迭代 10~20 次,把窗口边界精度提高到亚秒级。
- 窗口合并与筛选。若两个窗口间隔小于最小中断时间(如 5 s),可合并为一个窗口;剔除持续时间小于最小可用时长(如 30 s)的碎片窗口。
下面给出一个可直接参考的窗口生成伪代码,参数均为示例值:
输入:轨道递推函数 pos(sat, t),时间区间 [t0, t1],步长 dt = 5 s
R_e = 6371 km,H_atm = 100 km,仰角门限 el_min = 5°
for t = t0 to t1 step dt:
rA = pos(A, t); rB = pos(B, t)
d = rB - rA; L = |d|
h = 2 * area(rA, rB, L) / L
earth_block = (h < R_e) and 垂足在线段内
atm_block = (h < R_e + H_atm) and 垂足在线段内
elA = 仰角(rA, d); elB = 仰角(rB, -d)
visible[t] = (not earth_block) and (not atm_block)
and (elA > el_min) and (elB > el_min)
扫描 visible[],记录 false→true 与 true→false 的相邻时刻
对每个边界区间做二分细化,输出窗口列表 [start, end, duration]
五、结果判读与常见问题
生成窗口后,应重点检查三类现象。第一,窗口是否出现“碎片化”:若步长过大,边界附近可能漏判,导致窗口被切成多段,此时应减小步长或改用事件驱动检测。第二,方位角是否在极点附近跳变:这通常不是真实遮挡,而是本地东向退化,应检查坐标基构造。第三,大气遮挡是否使窗口明显缩短:若把 H_atm 从 80 km 提高到 100 km,擦地链路的窗口会进一步收窄,这是保守建模的正常结果,需在任务指标中明确采用哪一档。
综上,星间链路几何与可见性建模的关键在于:先固定坐标系与角度定义,再用矢量运算得到距离、仰角和方位角,随后用“地心到线段最短距离”统一处理地球与大气遮挡,最后沿时间轴采样、提取边界并细化,得到可用的可见性时间窗口。这套方法既适用于同轨、异轨星间链路,也可扩展到星座层级的链路规划与拓扑生成。