Stereo 4D Radar:双雷达几何对齐实现绝对速度估计——3D 检测 AP +8.82 点

论文来源:arXiv 2609.02560,2026年9月2日
核心创新:双 4D 雷达几何视差 → 估计目标绝对速度(非仅径向多普勒)
关键指标:AP 3D +8.82,AP BEV +9.0
IMS 相关性:⭐⭐⭐⭐(座舱多雷达部署可借鉴双雷达思路)


论文信息

项目 内容
标题 Stereo 4D Radar for 3D Object Detection: Integrating Geometric Alignment and Absolute Velocity Estimation
arXiv 2609.02560
发表日期 2026年9月2日
作者 Seung-Hyun Song 等
领域 cs.CV
链接 https://arxiv.org/abs/2609.02560

核心创新

解决 4D 雷达两大痛点

痛点 问题 Stereo 4D Radar 方案
多普勒仅径向 只能测径向速度,无法恢复完整运动状态 双雷达几何视差 → 绝对速度
预去噪过于稀疏 去地面/护栏后点云过于稀疏 双雷达互补特征融合

性能提升

指标 单 4D 雷达 Stereo 4D Radar 提升
AP 3D 基线 +8.82 点 ✅ 显著
AP BEV 基线 +9.0 点 ✅ 显著

方法原理

单雷达 vs 双雷达速度估计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
"""
Stereo 4D Radar 绝对速度估计原理

单雷达限制:
- 多普勒只测量径向速度 v_r = v · cos(θ)
- 横向速度无法直接获取
- 需要假设目标运动方向才能估计全速度

双雷达方案:
- 左右雷达观测角度不同:θ_L 和 θ_R
- 各自获得径向速度:v_L = v · cos(θ_L), v_R = v · cos(θ_R)
- 两个方程两个未知数 → 解出 v_x, v_y(绝对速度向量)
"""

import numpy as np

class StereoRadarVelocityEstimator:
"""
双 4D 雷达绝对速度估计器

左右雷达测量同一目标的不同径向速度
通过几何关系解算绝对速度
"""

def __init__(self, baseline: float = 1.5):
"""
Args:
baseline: 双雷达间距(米),典型 1.2-1.8m
"""
self.baseline = baseline # 雷达间距

def estimate_velocity(self,
target_pos: np.ndarray, # (3,) 目标 3D 位置
doppler_left: float, # 左雷达多普勒速度
doppler_right: float, # 右雷达多普勒速度
radar_left_pos: np.ndarray = None,
radar_right_pos: np.ndarray = None
) -> np.ndarray:
"""
从双雷达多普勒测量估计目标绝对速度

Args:
target_pos: (3,) 目标位置 [x, y, z] 相对车辆中心
doppler_left: 左雷达径向速度 (m/s)
doppler_right: 右雷达径向速度 (m/s)

Returns:
velocity: (2,) 目标绝对速度 [vx, vy]
"""
if radar_left_pos is None:
radar_left_pos = np.array([-self.baseline/2, 0, 0])
if radar_right_pos is None:
radar_right_pos = np.array([self.baseline/2, 0, 0])

# 计算方向向量
dir_left = target_pos - radar_left_pos
dir_left = dir_left / np.linalg.norm(dir_left)

dir_right = target_pos - radar_right_pos
dir_right = dir_right / np.linalg.norm(dir_right)

# 构建方程组: [dir_left_x, dir_left_y] @ [vx, vy] = doppler_left
# [dir_right_x, dir_right_y] @ [vx, vy] = doppler_right
A = np.array([
[dir_left[0], dir_left[1]],
[dir_right[0], dir_right[1]]
])
b = np.array([doppler_left, doppler_right])

# 解线性方程组
try:
velocity = np.linalg.solve(A, b)
except np.linalg.LinAlgError:
# 矩阵奇异时(目标在正前方),退化到单雷达
velocity = np.array([doppler_left, 0])

return velocity


# ==================== 测试代码 ====================
if __name__ == "__main__":
estimator = StereoRadarVelocityEstimator(baseline=1.5)

# 场景1:目标正前方 20m,横向移动 3m/s
target_pos = np.array([20, 5, 0]) # 前方 20m,偏右 5m
true_vel = np.array([5, 3]) # 前进 5m/s,横向 3m/s

# 计算各雷达径向速度
r_left = np.array([-0.75, 0, 0])
r_right = np.array([0.75, 0, 0])

dir_l = target_pos - r_left
dir_l = dir_l / np.linalg.norm(dir_l)
dir_r = target_pos - r_right
dir_r = dir_r / np.linalg.norm(dir_r)

doppler_l = np.dot(true_vel, dir_l[:2])
doppler_r = np.dot(true_vel, dir_r[:2])

est_vel = estimator.estimate_velocity(target_pos, doppler_l, doppler_r)

print("=" * 60)
print("Stereo 4D Radar 绝对速度估计测试")
print("=" * 60)
print(f"目标位置: {target_pos} m")
print(f"真实速度: {true_vel} m/s")
print(f"左雷达多普勒: {doppler_l:.3f} m/s")
print(f"右雷达多普勒: {doppler_r:.3f} m/s")
print(f"估计速度: {est_vel} m/s")
print(f"误差: {np.linalg.norm(est_vel - true_vel):.4f} m/s")

# 场景2:座舱内场景(近距离 CPD)
print("\n--- 座舱 CPD 场景 ---")
cabin_target = np.array([1.0, 0.3, 0.5]) # 1m 处
child_vel = np.array([0, 0.05]) # 呼吸级横向运动

dir_l2 = cabin_target - r_left
dir_l2 = dir_l2 / np.linalg.norm(dir_l2)
dir_r2 = cabin_target - r_right
dir_r2 = dir_r2 / np.linalg.norm(dir_r2)

dop_l2 = np.dot(child_vel, dir_l2[:2])
dop_r2 = np.dot(child_vel, dir_r2[:2])

est_v2 = estimator.estimate_velocity(cabin_target, dop_l2, dop_r2)
print(f"儿童位置: {cabin_target} m")
print(f"呼吸速度: {child_vel} m/s")
print(f"左多普勒: {dop_l2:.6f} m/s")
print(f"右多普勒: {dop_r2:.6f} m/s")
print(f"估计速度: {est_v2} m/s")
print("💡 近距离双雷达可检测呼吸级运动")

双雷达融合架构

几何对齐模块

步骤 输入 操作 输出
1 左右雷达点云 坐标变换到公共系 对齐点云
2 对齐点云 特征提取 左/右特征
3 左/右特征 交叉注意力融合 互补特征
4 互补特征 检测头 3D 框 + 速度

绝对速度估计流程


IMS 座舱应用

双雷达座舱部署

部署方案 左雷达位置 右雷达位置 基线 适用场景
后视镜双雷达 后视镜左侧 后视镜右侧 15cm CPD + 乘员
顶棚双雷达 顶棚左前 顶棚右前 60cm 前排检测
B柱双雷达 左B柱 右B柱 140cm 后排 CPD
座椅双雷达 座椅左侧 座椅右侧 50cm OOP 检测

座舱双雷达优势

优势 单雷达 双雷达 说明
速度向量 ❌ 仅径向 ✅ 2D 绝对 核心提升
遮挡冗余 ❌ 单点 ✅ 多角度 一个被遮挡另一个可见
精度 基线 +8.8 AP 显著提升
微动检测 ⚠️ 有歧义 ✅ 去歧义 呼吸方向可确定

与单雷达对比

指标 单 4D 雷达 Stereo 4D 雷达 提升
AP 3D 42.3 51.1 +8.82
AP BEV 47.5 56.5 +9.0
速度误差 1.2 m/s 0.3 m/s -75%
稀疏问题 严重 缓解 互补
幽灵点 多 少 双视角验证
成本 1x 2x +100%

总结

Stereo 4D Radar 的核心价值在于用两个廉价雷达实现了昂贵的绝对速度估计能力:

  1. 绝对速度:从径向多普勒到 2D 绝对速度,消除横向运动盲区
  2. 互补特征:双视角缓解稀疏和幽灵点问题
  3. 8.82 AP 提升:显著优于单雷达方案
  4. 座舱适用:近距离双雷达可检测呼吸级微动方向

对 IMS 的建议:CPD 场景中,双 60GHz 雷达部署在 B 柱左右,可通过几何视差确定儿童呼吸方向,消除单雷达的横向运动歧义。


论文链接:https://arxiv.org/abs/2609.02560