点云生成¶
点云是把 radar cube 里的候选目标点抽出来之后得到的结构。一个点不是一个像素,而是一条雷达反射证据:它告诉我们某个距离、速度、角度位置上有比较明显的回波。
从 cube 到点的直觉¶
Radar cube 里有很多格子,每个格子对应一个距离、速度和角度组合。大部分格子的能量只是噪声或环境背景。点云生成要做的事,是从这些格子里挑出“更像目标反射”的位置。
可以把它想成在三维能量地图里找亮点:
这样得到的点云不是人体表面的精细扫描。它更稀疏,也更吵。但对于离开检测来说,关键不是画出完整的人,而是抓住人体反射随时间移动的模式。
仓库里的 detect_points 输出字段包括:
| 字段 | 含义 |
|---|---|
range_m |
距离,单位米 |
velocity_mps |
径向速度,单位米每秒 |
angle_deg |
角度,单位度 |
power_db |
反射强度,单位 dB |
doppler_bin |
Doppler FFT bin |
angle_bin |
Angle FFT bin |
range_bin |
Range FFT bin |
物理量换算¶
point_cloud.py 里有三个轴换算函数:
range_axis_m(cfg):把 range bin 换算成距离。velocity_axis_mps(cfg):把 Doppler bin 换算成速度。angle_axis_deg(cfg):把 angle bin 换算成角度。
这些函数很重要,因为模型最终不应该只看抽象的 bin index。距离、速度和方向才更接近人体行为本身。
点云和序列模型¶
用户离开不是静态姿势,而是连续动作。单帧点云可以描述某一刻的反射分布,连续点云序列则能描述身体如何移动。CNN + BiLSTM 的思路就是先从每一帧点云里提取空间特征,再让序列模型看时间变化。
一帧点云回答“这一刻反射在哪里”。一段点云序列回答“这些反射怎么移动”。mmLock 需要的是后者,因为安全动作要在用户离开过程中触发,而不是等人完全消失后才反应。
噪声和稀疏性¶
雷达点云通常比较稀疏,也会包含环境反射。桌面、墙、椅子边缘都可能产生点。点检测、距离范围过滤、聚类、点数规整和时间序列建模,都是为了减少这些噪声对离开检测的影响。