第四章:点云生成与滤波
各位同学,今天我们来聊聊毫米波雷达点云处理中最基础、也最考验功夫的一环——点云生成与滤波。说实话,我在刚入行那会儿,总觉得点云数据拿到手就能直接用,结果被现实狠狠教育了一顿。你想想看,雷达回波里混杂着地面反射、雨雪噪声、甚至旁边卡车的二次反射,如果不做滤波,定位系统分分钟给你跑偏。
4.1 点云数据结构
先说说点云长什么样。毫米波雷达输出的点云,本质上是一组离散的检测点。每个点通常包含以下信息:
| 字段 | 含义 | 典型范围 |
|---|---|---|
| x, y, z | 三维空间坐标(米) | [-100, 100] |
| range | 径向距离 | [0.5, 250] |
| doppler | 多普勒速度(米/秒) | [-40, 40] |
| azimuth | 水平方位角(度) | [-60, 60] |
| elevation | 俯仰角(度) | [-15, 15] |
| snr | 信噪比(dB) | [0, 40] |
我个人习惯用结构体来组织这些数据。在嵌入式C代码里,我会这样定义:
typedef struct {
float x; // 米
float y;
float z;
float range; // 径向距离
float doppler; // 多普勒速度
float azimuth; // 弧度
float elevation; // 弧度
float snr; // 信噪比
uint32_t timestamp; // 时间戳,微秒
} RadarPoint_t;
这里有个细节——时间戳。我在项目中遇到过,如果不同传感器的时间基准没对齐,融合出来的位置能差出半米。所以每个点云帧必须带上精确的时间戳,最好是雷达硬件直接打上的。
4.2 噪声滤除
噪声滤除,说白了就是把那些明显不靠谱的点扔掉。常见的噪声来源有:
- 热噪声:接收机自身产生的随机波动
- 多径反射:信号打在地面或建筑物上反弹回来
- 雨雪杂波:水滴或雪花产生的散射
- 闪烁噪声:目标快速移动导致的相位抖动
我常用的滤波策略是三步走:
- 信噪比门限:SNR低于8dB的点直接丢弃。这个阈值我调过很多次,太低会引入噪声,太高又会丢掉弱目标。
- 距离一致性检查:如果一个点的距离和它相邻帧的距离跳变超过3米,大概率是野点。
- 多普勒一致性:静止目标的doppler应该接近0,如果出现明显非零值,可能是多径干扰。
核心原则:宁可漏检,不要误检。在定位场景中,一个错误点比十个缺失点更致命。
4.3 静态杂波抑制
静态杂波抑制,这是高精地图融合里最关键的预处理步骤。为什么?因为地图里已经包含了静态环境信息,雷达再检测到静止点,那就是冗余甚至干扰。
我曾经在一个隧道场景里吃过亏。隧道墙壁的反射非常强,雷达每帧能生成上百个静态点。如果不做抑制,这些点会严重干扰定位匹配。我的做法是这样的:
// 静态杂波抑制伪代码
void suppress_static_clutter(RadarPoint_t *points, int num_points) {
for (int i = 0; i < num_points; i++) {
// 多普勒速度接近0,且连续3帧位置变化小于0.2米
if (fabs(points[i].doppler) < 0.5f) {
// 检查历史帧
if (is_position_stable(points[i], history_buffer)) {
points[i].valid = false; // 标记为静态杂波
}
}
}
}
嗯,这里要注意:不能一刀切地把所有低速点都干掉。比如行人走路的速度也就1-2米/秒,如果门限设得太宽,会把行人当成杂波滤掉。我一般保留0.5米/秒以下的点,但会额外检查它们的空间分布是否与地图中的静态物体匹配。
实战技巧:结合高精地图做静态杂波抑制效果最好。把雷达点投影到地图坐标系,如果落在已知的建筑物、护栏、路沿上,直接标记为静态杂波。这样既干净又不会误伤动态目标。
4.4 聚类算法
聚类,就是把属于同一个物理目标的点归到一起。毫米波雷达的点云稀疏且不规则,常用的聚类方法有:
| 算法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| DBSCAN | 不需要预设类别数,能处理任意形状 | 参数敏感,计算量大 | 稀疏点云,目标数量未知 |
| 欧式聚类 | 实现简单,速度快 | 对点云密度敏感 | 近距离,点云较密 |
| 基于网格的聚类 | 计算效率高 | 边界处理粗糙 | 实时性要求高的场景 |
我个人最常用的是DBSCAN。为什么?因为毫米波雷达的点云密度不均匀——近处点很密,远处点很稀疏。DBSCAN的密度连通性正好能处理这种情况。
不过DBSCAN有两个参数需要调:eps(邻域半径)和minPts(最小点数)。我一般这样设初始值:
eps:根据雷达角分辨率来定。比如角分辨率是1°,100米处的点间距大约是1.7米,那eps设2米比较合理。minPts:对于汽车目标,至少需要3-5个点才能构成一个可信的聚类。
避坑指南:我曾经在高速场景中把两个并排行驶的车辆聚成了一个类。原因是它们距离太近,且相对速度一致。后来我加了一个多普勒速度的约束——同一个聚类内的点,多普勒速度差异不能超过2米/秒。这样就把相邻但速度不同的目标分开了。
4.5 知识体系总览
下面这张图概括了本章的核心逻辑。从原始回波到可用的目标点云,每一步都在做减法——去掉噪声、去掉静态杂波、把散点聚成有意义的目标。
你看,整个流程就像筛沙子——先把大石头(噪声)扔掉,再把小石子(静态杂波)过滤掉,最后把沙子聚成一堆一堆(聚类)。每一步都有它的道理,也都有它的坑。
好了,关于点云生成与滤波,我就讲这么多。记住一点:在嵌入式平台上跑这些算法,一定要考虑计算资源和实时性。我见过有人把DBSCAN的复杂度优化到O(n log n),但代价是聚类精度下降。怎么平衡?嗯,这就是工程的艺术了。
可可精品资料库