4. 基于雷达ARPA目标跟踪的碰撞风险评估
ARPA 跟踪数据到风险等级的可执行评估链
本案例的任务不是重新推导 DCPA/TCPA,而是把 ARPA 已经输出的目标位置与速度,组织成一条可复现的风险评估流程:先做数据有效性检查,再计算距离、DCPA、TCPA 三个因子,分别映射为子等级,最后按“取最严”原则合成综合风险等级并输出报告。这样做的工程意义在于:ARPA 给出的原始跟踪量往往带有噪声、丢点和坐标约定差异,直接拿一个 DCPA 数值下结论容易误判。
1. 输入字段与坐标约定
假设 ARPA 以本船为原点的极坐标输出目标:相对距离 R(n mile)、相对方位 B(°,真方位,自北顺时针)、目标真航向 TC(°)、目标真航速 TS(kn),本船真航向 HC、真航速 HS。统一采用“北为 0°、顺时针为正”的方位约定,速度分解到北向(x)与东向(y)两个分量。若 ARPA 输出的是相对速度矢量,则需先叠加本船速度还原为目标真速度,否则 DCPA/TCPA 会整体偏移。
2. 三因子计算与分级映射
相对位置分量:dx = R·cos(B),dy = R·sin(B)。目标真速度分量:vtx = TS·cos(TC),vty = TS·sin(TC);本船:vhx = HS·cos(HC),vhy = HS·sin(HC)。相对速度 vrx = vtx − vhx,vry = vty − vhy,相对速度大小 Vr = √(vrx²+vry²)。
TCPA 与 DCPA 用标准闭式解:TCPA = −(dx·vrx + dy·vry) / Vr²;DCPA = |dx·vry − dy·vrx| / Vr。当 TCPA < 0 表示目标正在远离,DCPA 取当前距离作为“已通过”的保守值。分级采用下表的多因子映射,每个因子独立给出 1~4 级,最终综合等级取三者最大值(最严原则),避免某一因子宽松掩盖另一因子的紧迫性。
| 因子 | 1 级(低) | 2 级(中) | 3 级(高) | 4 级(紧迫) |
|---|---|---|---|---|
| 距离 R / n mile | > 6.0 | 3.0 ~ 6.0 | 1.5 ~ 3.0 | < 1.5 |
| DCPA / n mile | > 1.0 | 0.5 ~ 1.0 | 0.2 ~ 0.5 | < 0.2 |
| TCPA / min | > 20 | 10 ~ 20 | 5 ~ 10 | < 5 |
3. 评估流程与数据流
下图给出从 ARPA 跟踪量到风险报告的完整数据流:左侧为输入与有效性门控,中部为三因子并行计算与分级,右侧为“取最严”合成与报告输出。注意有效性门控是流程的一部分——当 Vr 接近 0(目标与本船同速同向)时,TCPA 公式分母趋零,必须单独处理为“无接近趋势”,否则会得到数值爆炸的错误等级。
4. 参考实现
下面给出一个自洽的 Python 实现,包含单位换算、有效性门控、三因子分级与报告生成。示例数据为教学假设值,用于演示流程,不代表任何实测结果。
import math
# 分级阈值(可配置)
TH = {
"R": [(6.0, 1), (3.0, 2), (1.5, 3), (0.0, 4)], # 距离越小等级越高
"DCPA": [(1.0, 1), (0.5, 2), (0.2, 3), (0.0, 4)],
"TCPA": [(20.0, 1), (10.0, 2), (5.0, 3), (0.0, 4)],
}
def grade(value, table):
"""按阈值表映射等级:value 大于等于某档下界则取该档等级。"""
for lower, level in table:
if value >= lower:
return level
return 4
def assess(r_nm, brg_deg, tc_deg, ts_kn, hc_deg, hs_kn):
# 1) 有效性门控
if r_nm is None or r_nm <= 0:
return {"valid": False, "reason": "距离无效或丢点"}
# 2) 相对位置与真速度分量(北 x,东 y)
dx = r_nm * math.cos(math.radians(brg_deg))
dy = r_nm * math.sin(math.radians(brg_deg))
vtx = ts_kn * math.cos(math.radians(tc_deg))
vty = ts_kn * math.sin(math.radians(tc_deg))
vhx = hs_kn * math.cos(math.radians(hc_deg))
vhy = hs_kn * math.sin(math.radians(hc_deg))
vrx, vry = vtx - vhx, vty - vhy
vr = math.hypot(vrx, vry)
# 3) Vr 趋零保护
if vr < 0.05:
return {"valid": True, "R": r_nm, "DCPA": r_nm, "TCPA": None,
"level": grade(r_nm, TH["R"]), "dominant": "R",
"note": "相对速度趋零,无接近趋势"}
# 4) TCPA / DCPA
tcpa_min = -(dx * vrx + dy * vry) / (vr * vr) * 60.0
dcpa = abs(dx * vry - dy * vrx) / vr
if tcpa_min < 0:
dcpa = r_nm # 已通过,保守取当前距离
tcpa_eff = 999.0
else:
tcpa_eff = tcpa_min
# 5) 三因子分级与取最严
lr = grade(r_nm, TH["R"])
ld = grade(dcpa, TH["DCPA"])
lt = grade(tcpa_eff, TH["TCPA"])
level = max(lr, ld, lt)
dominant = ["R", "DCPA", "TCPA"][[lr, ld, lt].index(level)]
return {"valid": True, "R": round(r_nm, 2), "DCPA": round(dcpa, 2),
"TCPA": round(tcpa_min, 1), "L_R": lr, "L_DCPA": ld, "L_TCPA": lt,
"level": level, "dominant": dominant}
# 教学示例:目标在右前方 2.0 n mile、方位 045°,真航向 225°、真航速 12 kn
# 本船真航向 000°、真航速 10 kn
res = assess(2.0, 45.0, 225.0, 12.0, 0.0, 10.0)
print(res)
按示例参数可直接推出:目标真速度分量约为 vtx = −8.49、vty = −8.49,本船 vhx = 10、vhy = 0,相对速度 vrx ≈ −18.49、vry ≈ −8.49,Vr ≈ 20.35 kn。相对位置 dx ≈ 1.41、dy ≈ 1.41。代入得 TCPA ≈ 0.17 min(约 10 s),DCPA ≈ 0.58 n mile。分级结果为:R=2.0 属 3 级,DCPA=0.58 属 2 级,TCPA≈0.17 属 4 级,综合取 4 级,主导因子为 TCPA。这一结果说明:即使 DCPA 尚在中等区间,极短的 TCPA 也足以把风险推到紧迫级,这正是“取最严”原则要防止的漏判。
5. 报告输出与判读
评估报告至少应包含:综合等级、三个子等级、主导因子、R/DCPA/TCPA 数值、数据有效性标记。判读时先看 valid,再看综合等级,最后看主导因子决定后续动作方向——主导因子为 TCPA 时优先考虑立即减速或大角度转向以拉长时间余量;主导因子为 DCPA 时优先修正航向以增大通过距离;主导因子为 R 时说明已进入近距离区,需结合当时能见度与水域条件判断。
| 综合等级 | 含义 | 建议响应 |
|---|---|---|
| 1 级 | 低风险,目标远离或通过距离充裕 | 保持正规瞭望,常规跟踪 |
| 2 级 | 中等风险,存在接近趋势 | 加密观测,核对 ARPA 跟踪稳定性 |
| 3 级 | 高风险,通过距离或时间余量不足 | 启动避碰决策,准备转向或减速 |
| 4 级 | 紧迫,随时可能形成紧迫局面 | 立即执行避让,复评 DCPA/TCPA |
验证方法:用同一组输入分别计算三因子并手工核对分级,确认综合等级等于三者最大值;再构造一个 Vr < 0.05 的同速同向目标,确认流程走“无接近趋势”分支而不是产生异常 TCPA。通过这两项检查,即可认为评估链在数值与逻辑上闭合。