ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

毫米波雷达目标识别:从FMCW原理到CFAR与点云聚类实践

毫米波雷达目标识别:从FMCW原理到CFAR与点云聚类实践 1. 为什么从毫米波雷达开始学目标识别干了几年自动驾驶相关的工作我越来越觉得一个事情很关键目标识别这个环节光盯着摄像头和激光雷达是不够的。摄像头怕黑夜、怕逆光、怕大雨糊一脸激光雷达精度高但成本摆在那里而且遇到沙尘、浓雾一样抓瞎。真正在量产车上长期稳定干活的反而是很多人觉得“不够高级”的毫米波雷达。这篇笔记专门聊聊毫米波雷达在自动驾驶目标识别里的定位、原理和上手路径。适合三类人看刚进自动驾驶行业的算法工程师、做传感器融合的嵌入式开发、以及准备做毕业设计想选“毫米波雷达目标检测”方向的学生。我尽量把概念讲到“看完就能动手查 datasheet”的程度公式只保留最核心的其余用大白话解释。先给一个整体结论毫米波雷达不是来替代摄像头的它是来补摄像头的短板的。一个典型的前向感知方案里毫米波雷达负责“稳”摄像头负责“懂”激光雷达负责“准”。三者数据融合之前你得先把毫米波雷达这一路的目标识别做扎实否则后面融合全是空中楼阁。2. 毫米波雷达的工作原理与核心参数2.1 它怎么“看”到目标的毫米波雷达发射的是频率在 24GHz、77GHz、79GHz 甚至更高的电磁波波长在毫米级别所以叫毫米波。它测距的基本原理是飞行时间法发射信号碰到目标反射回来雷达收到回波后根据发射和接收的时间差算出距离。但这里有个工程上的坑直接测飞行时间需要非常高的时间分辨率普通硬件做不到。于是商用雷达普遍改用调频连续波FMCW体制。它发射的不是恒定频率的波而是一个频率随时间线性变化的“扫频信号”专业说法叫 chirp。为什么用 FMCW因为频率变了之后回波和发射信号之间会产生一个频率差。这个差频的大小和目标距离成正比测频率比测时间容易得多精度也高得多。简单类比一下你站在山谷里喊一声靠回声时间判断山有多远FMCW 则是让回声“变了调”你通过音调变化来判断距离。后者在工程上更好实现。2.2 距离、速度、角度是怎么解算的FMCW 雷达处理一个 chirp 的回波后通过 FFT 做频谱分析得到差频进一步算距离。这个 FFT 结果叫距离维 FFT。接下来它连续发射多个 chirp对同一个距离门上的信号再做一次 FFT也就是速度维 FFT多普勒 FFT就能算出目标相对雷达的径向速度。角度估计稍复杂一些用的通常是多天线接收阵列。目标来自不同方向各天线收到的回波就有不同的相位差。通过比较相位的差异就能算出方位角。高端一点的雷达还支持俯仰角测量这就是 4D 毫米波雷达的雏形——距离、速度、水平角、俯仰角四个维度都能输出。下面这张表梳理了最常打交道的一组参数参数典型值范围作用关键点工作频率24GHz / 77GHz / 79GHz决定波长、天线尺寸、探测距离77GHz 是车载主流24GHz 多用于盲区或低速场景最大探测距离10m ~ 250m前向雷达要求远角雷达要求近探测距离和天线增益强相关距离分辨率0.04m ~ 1m区分两个相近目标的能力带宽越大距离分辨率越高速度分辨率0.1m/s ~ 1m/s区分两个相近速度目标与 chirp 时间、帧内 chirp 数量有关角度分辨率1° ~ 10°区分两个相邻方向目标天线阵列数量越多角度分辨率越好更新帧率10Hz ~ 30Hz目标刷新速度30Hz 更适合高速场景新手最容易犯的错误就是只看“最大探测距离”不看距离分辨率和角度分辨率。一个能探测 200 米的雷达可能同时无法分辨 50 米处并排的两个人这就是分辨率指标在起作用。2.3 “点云”和“目标”是两回事刚接触毫米波雷达的人经常混淆两个概念点云Point Cloud和目标列表Track List。雷达内部做完距离维 FFT 和速度维 FFT 后会检测出一堆“过门限”的峰值。这些峰值包含距离、速度、角度信息组合起来就是一个三维或四维空间中的点也就是点云。但点云里的点只是一个“能量反射点”它可能来自目标也可能来自路边的金属护栏、井盖、桥梁反射甚至多径反射造成的“鬼影”。所谓目标识别就是把一堆点云聚成一个个有物理意义的目标这是一辆车、那是一个人、旁边是自行车。这一步通常叫聚类Clustering然后用卡尔曼滤波或其它跟踪算法维持目标的持续 ID形成稳定的目标轨迹。再往后才是目标分类。很多同学拿到的所谓“点云数据”其实是雷达厂商标定好的目标列表不是原始点云。用目标列表做融合比较简单但要注意它已经经过厂商内部算法处理可能过滤掉了部分真实目标也可能保留了虚假目标。做研究时得先搞清楚自己手上的数据类型。3. 目标识别的基础流程与关键算法3.1 从 ADC 数据到目标列表的完整链路我不建议一上来就死磕后端分类模型先把信号处理链路搞通后面调起来才有底气。一条完整的毫米波雷达目标识别链路通常长这样ADC 采集雷达前端将模拟回波数字化得到原始 ADC 数据。距离维 FFT对每个 chirp 做 FFT得到距离-幅度谱。速度维 FFT对同一距离门的多个 chirp 做 FFT得到距离-多普勒图Range-Doppler MapRDM。CFAR 检测在 RDM / 距离-角度图上做恒虚警率检测筛出候选点。角度估计对通过检测的点做波束成形或超分辨算法得到角度。点云生成合并距离、速度、角度信息输出点云。聚类把点云按空间距离、速度接近程度聚成簇。跟踪用卡尔曼滤波等预测目标状态维护 ID。分类根据目标特征RCS、速度分布、尺寸、多普勒特征判定目标类型。这里面 CFAR 是新手最容易懵的一步我单独拿出来说说。3.2 CFAR 检测怎么判断“这里有没有目标”雷达接收到的回波里既有目标信号也有噪声和杂波。如果设置一个固定的检测门限目标强的区域没问题目标弱的区域就容易漏检而平坦路面这种杂波低的区域又容易把噪声误判成目标。**恒虚警率检测CFAR**的思路是对每个待检测单元拿它周围一圈单元的能量来估算局部噪声基底再根据这个基底动态计算检测门限。这样即使整个场景的噪声水平在变化也能保持一致的“虚警率”。最常见的 CA-CFAR单元平均恒虚警做法是对待检测单元左右或上下各取一组参考单元计算参考单元的平均功率将平均功率乘以一个系数得到门限系数由目标虚警率反推待检测单元功率超过门限则判定为目标候选。实际调试中CFAR 的门限系数、参考单元数量、保护单元数量都需要根据场景调。保护单元的作用是防止目标本身能量泄漏到参考单元里把基底抬得太高。如果是窄带目标省略保护单元会导致目标自掩蔽这一点我在很多开源代码里都见过新手务必注意。3.3 聚类与跟踪让点云变成“会动的东西”CFAR 检测完你会得到一堆点。这些点还只是“候选反射点”需要聚类成目标。毫米波雷达点云有几个特点稀疏、分布不均匀、同一目标可能散射多径。因此基于距离阈值和速度一致性的聚类算法比通用 DBSCAN 更适合雷达点云。实际工程里常用简易规则聚类计算相邻点之间的欧氏距离距离小于阈值比如 1 米就归到同一簇同一簇内若各点径向速度差异过大则拆成不同目标簇的点数过少比如少于 3 个且 RCS 很弱通常视为虚警。聚类后每个簇需要绑定一个跟踪器。常用的是卡尔曼滤波器状态量一般是目标的横向位置、纵向位置、横向速度、纵向速度也可以加上加速度。卡尔曼滤波的好处是能平滑掉单帧检测的抖动还能在目标短暂丢失时继续预测位置保持目标 ID 的连续性。跟踪里还有个实际工程问题数据关联。这一帧检测到三个目标上一帧跟踪着四个目标哪几个对应哪几个简单的做法是计算预测位置和检测位置之间的代价矩阵用匈牙利算法或贪心匹配找出最优对应。目标贴近、遮挡时关联错了会导致 ID 互换这是融合里最头疼的问题之一。3.4 目标分类毫米波雷达能做到什么程度毫米波雷达天然的目标信息有限没有摄像头那样丰富的纹理。但它也有独特优势多普勒特征丰富、RCS 相对稳定、不受光照影响。常见的分类方法有两种路线传统路线手工提取目标特征如 RCS 均值、RCS 方差、目标宽度、长度、速度分布、多普勒谱形状微多普勒再用 SVM、决策树、随机森林分类。深度路线把距离-多普勒图RDM或距离-角度图输入 CNN让网络自己学特征。该方法适合区分行人、自行车、汽车等不同类型目标但很依赖数据积累和标注质量。实际量产项目中传统特征路线仍然大量在用。原因很简单可解释性强、算力需求低、目标数量少时精度也很稳定。深度网络在雷达数据上的表现并没有摄像头那么大的碾压优势性价比不如预期高。4. 常用工具链与数据集的选型建议4.1 硬件平台与开发板怎么选做毫米波雷达目标识别第一步要选硬件。目前主流的有三类TI 的毫米波雷达系列如 IWR1443、IWR6843、AWR2944配套的 mmWave SDK 和 Industrial Toolbox 很成熟适合从零开始学习。24GHz 的国产雷达模块很多支持直接输出点云或目标列表适合做应用层开发不太适合做底层信号处理研究。77GHz 高端 4D 雷达如 Arbe、Mobileye 的成像雷达适合做传感器融合和高级感知研究但价格通常不低。我个人建议学生朋友从 TI 的 IWR1443 或 IWR6843 开始原因有四点官方例程多、中文资料丰富、Matlab 和 Python 都有配套工具、价格相对适中。不要一上来就搞 4D 成像雷达数据量和调试复杂度会把你劝退。4.2 平台仿真与数据集怎么上手热词里经常提到“自动驾驶仿真: carsim、ni 和 vtd 联合仿真”。这个路线确实值得研究但我想提醒一句毫米波雷达的物理仿真比摄像头难得多因为电磁波的反射、散射、多径效应很难用普通渲染引擎模拟。如果只是验证感知算法优先用真实雷达采集数据如果是验证决策规划再用 Carsim VTD 做联合仿真。数据集方面常用的是TI 官方提供的 mmWave Studio 采集数据以及部分开源仓库里的 raw ADC 数据。nuScenes 数据集包含 5 个毫米波雷达是研究多传感器融合的标配。各类自采数据通过 rosbag 记录用 python 读取为 numpy 数组。如果做视频目标识别标注建议工具用 labelImg 标注 2D 框用 CloudCompare 标注 3D 点云框毫米波雷达点云也可以用 CloudCompare 打开。但雷达点云和视觉点云的分布差异很大标注雷达点云时要有领域知识否则会把树叶引起的簇标成行人。4.3 在线调试的小技巧做雷达开发最容易出现的问题是你“看不见雷达看见了什么”。有技巧可以做先用 UART 或 CAN 把雷达输出的点云发到 PC用 Python 的 Matplotlib 画实时散点图确认坐标变换正确。在板子上多打印一个“原始点云数量”的统计量数量突增往往意味着有地面杂波或强反射干扰。用 TI 的 mmWave Demo Visualizer 可以先快速验证雷达本身的检测能力再切到自己的算法避免把硬件问题和算法问题混在一起。5. 毫米波雷达目标识别的常见坑与排查经验这一节是整篇笔记里最“值钱”的部分很多内容我在公开资料里没看到有人系统整理过都是踩坑踩出来的。5.1 静态目标被过滤导致护栏和路沿“隐形”不少商用量产雷达默认会过滤静态目标因为自动驾驶的巡航、跟车功能主要关心动态目标。但在泊车、园区低速场景里静态目标恰恰是最重要的参照物。如果你发现雷达对静止的车辆、柱子完全没有输出先检查配置里是否有“静态目标过滤”开关很多国产雷达出厂默认打开。5.2 目标在正前方突然丢失如果目标一直稳稳跟着突然在正前方消失过一会儿又出现大概率不是目标消失了而是多普勒盲区问题。径向速度接近 0 的目标回波在多普勒维上会落在零频附近被静态杂波抑制算法滤掉。解决办法是不要简单粗暴地把多普勒为 0 的bin直接置零而是用更柔和的抑制系数或者在后续聚类时引入 RCS 特征把强反射的静态目标保留下来。5.3 同一辆车被拆成好几个目标雷达角度分辨率不够时同一辆车的车头、车尾和后视镜可能被检测成几个独立的目标且位置跳变剧烈。排查手段增大聚类阈值在聚类中加入同一目标点云速度一致性的约束若频率允许启用更高分辨率的波形配置在跟踪阶段引入“目标合并”逻辑两个 track 位置接近且速度相近时进行融合。5.4 弯道场景目标位置系统性偏移过弯时目标位置会往弯道内侧偏移尤其出现在雷达视场角落。这通常不是检测算法的问题而是雷达角度估计在视场边缘精度变差。工程上的兜底策略是在融合阶段给雷达目标的角度测量设置一个“视场角信任度”越靠近边缘角度权重越低以摄像头或高精地图修正为准。5.5 雨雪天气点云突变毫米波雷达号称全天候工作但大雨中水珠会形成大量散射点导致点云数量暴涨虚警率升高。遇到这种情况可在聚类阶段把“簇内点云密度”作为置信度指标密度极低的簇降权。同时也需要留意雷达天线罩上是否有积水或泥污物理遮挡和算法问题要分开排查。以下是我整理的一份快速排查表建议收藏备用现象可能原因排查方向静态目标消失静态目标过滤开启检查雷达配置参数中远距离目标闪烁CFAR 门限过高降低 CFAR 倍数或增加积累帧数近距目标数量爆增天线罩污染、地面反射检查安装位置启用地面杂波抑制目标位置左右跳变角度估计不稳定、数据关联错误检查天线标定优化关联逻辑直线行驶时横向速度偏大坐标系转换错误检查雷达坐标系到车体坐标系的标定对行人大目标分类不准确微多普勒特征未有效利用引入多普勒谱特征或改用 CNN 对 RDM 分类5.6 调试工具链上的坑调试雷达时时间同步是个容易被忽视的问题。雷达数据帧率可能是 15Hz、20Hz摄像头的帧率是 30Hz两者之间要做精确的时间对齐否则融合阶段会出现“摄像头看到车没动而雷达显示车被甩开”的怪异现象。在采集数据时正确的做法是用 ROS 的 bag 包记录每个传感器的原始时间戳时间同步在后处理阶段做。不要依赖传感器内部的时间戳去同步其他传感器毫秒级偏差在高动态场景下都会被放大。6. 复盘与下一步学习路线建议写这篇笔记的时候我一直在想一个问题如果回到刚入行的状态我会怎么安排毫米波雷达的学习顺序答案是四步走第一步吃透 FMCW 原理看懂距离维 FFT、速度维 FFT 和角度估计的基本推导。这一步可以搭配 TI 的 mmWave Training 视频周末两天就能完成。第二步跑通一个最小例程。用 IWR1443 或者现成的雷达模块在上位机上可视化点云理解目标在笛卡尔坐标系下的分布。第三步实现一个完整的检测链路。从 ADC 原始数据出发写 CFAR、聚类、跟踪的 Python 或 C 代码配合仿真数据或录制的 rosbag 验证效果。这里建议自己写一遍 CFAR不要直接用库函数能加深理解。第四步做传感器融合。把雷达目标和摄像头目标做时间同步、空间对齐再用匈牙利算法做关联最后用卡尔曼滤波输出融合后的目标列表。做完这一步基本就具备独立做量产感知项目的入门能力了。我一直觉得毫米波雷达的学习曲线不像深度学习那么陡但它更像“硬功夫”——你对信号处理的理解越深调试起来就越有底气。等到能信手拈来地分析点云质量、判断跟踪不稳的根源时再回头去看激光雷达和摄像头的融合会有一种“原来如此”的通透感。最后分享一个我在实际项目中常用的习惯每次调试雷达前先花五分钟记录当前环境的“杂波底噪”开车转一圈回看数据对场景特性的理解会比闷头调参数快得多。下一篇笔记我准备写“毫米波雷达与摄像头的时间同步实战”里面会涉及 ROS 时间戳对齐和延迟补偿的具体做法感兴趣的朋友可以继续关注。
返回列表