3. ADAS感知层数据:摄像头、雷达、激光雷达数据特征

各位工程师朋友,大家好。今天我们聊聊ADAS的“眼睛”——感知层数据。说白了,就是摄像头、毫米波雷达和激光雷达这三兄弟,它们各自能看到什么、怎么看的、数据长什么样。

我个人习惯把感知层比作人的感官系统。摄像头像眼睛,雷达像耳朵(能听距离和速度),激光雷达则像触觉——精确但范围有限。这三者协同,才能让车“看”清世界。

3.1 摄像头数据特征

摄像头是ADAS里最常用的传感器。它输出的是图像数据,本质上是二维像素矩阵。每个像素包含亮度(灰度)或颜色(RGB)信息。

关键参数:

  • 分辨率:常见的有1920x1080(1080p)、2048x1536(3MP)、3840x2160(4K)。分辨率越高,细节越丰富,但数据量也越大。
  • 帧率:通常30fps或60fps。高速场景下,60fps能减少运动模糊。
  • 视场角(FOV):水平视角一般在30°~120°之间。广角镜头能看到更多,但边缘畸变严重。
  • 动态范围:典型值120dB~140dB。高动态范围(HDR)能同时看清暗处和亮处。

数据格式示例:

// 摄像头原始数据(YUV422格式)
// 每个像素2字节,Y亮度,U/V色度
uint8_t frame[1920 * 1080 * 2];  // 约4MB/帧

// 经过ISP处理后,转为RGB888
uint8_t rgb_frame[1920 * 1080 * 3];  // 约6MB/帧

我在项目中遇到过一个问题:某款摄像头在隧道出口处,因为动态范围不够,导致画面一片白。后来换了HDR摄像头,才解决。嗯,这里要注意:动态范围比分辨率更重要,尤其是在强光/逆光场景。

3.2 雷达数据特征

毫米波雷达(通常77GHz或24GHz)输出的是点云数据。每个点代表一个目标,包含距离、速度、角度信息。

关键参数:

  • 探测距离:长距雷达(LRR)可达250m,短距雷达(SRR)约50m。
  • 距离分辨率:典型值0.1m~0.5m。分辨率越高,越能区分两个靠近的目标。
  • 速度精度:通常±0.1m/s。雷达测速非常准,这是它的核心优势。
  • 角度分辨率:水平约1°~3°,垂直约5°~10°。角度分辨率低,是雷达的短板。

避坑指南:我曾经调试一个AEB系统,发现雷达在弯道处经常丢失目标。后来分析数据才发现,雷达的波束宽度太宽,导致弯道内侧的护栏被误判为车辆。解决办法是增加雷达数量,或者融合摄像头数据。

数据格式示例:

// 雷达目标列表(CAN总线输出)
typedef struct {
    uint16_t id;          // 目标ID
    float distance;       // 距离(m)
    float velocity;       // 相对速度(m/s)
    float angle;          // 水平角度(°)
    float rcs;            // 雷达散射截面(dBsm)
    uint8_t confidence;   // 置信度(0-100%)
} RadarTarget;

// 典型一帧数据包含64个目标
RadarTarget targets[64];

3.3 激光雷达数据特征

激光雷达(LiDAR)输出的是高密度3D点云。每个点包含X、Y、Z坐标和反射强度(Intensity)。

关键参数:

  • 线束:16线、32线、64线、128线。线束越多,垂直分辨率越高。
  • 点频:每秒点数(PPS),常见的有30万点/秒(16线)到240万点/秒(128线)。
  • 探测距离:通常100m~200m(10%反射率)。
  • 精度:±2cm(距离),±0.1°(角度)。
  • 视场角:水平360°,垂直通常30°~40°。

注意:激光雷达在雨、雾、雪天气下性能会大幅下降。我做过一个测试:在大雨中,64线激光雷达的有效探测距离从150m骤降到30m。所以,不要完全依赖激光雷达做远距离感知

数据格式示例:

// 激光雷达点云数据(PCD格式)
typedef struct {
    float x;            // X坐标(m)
    float y;            // Y坐标(m)
    float z;            // Z坐标(m)
    uint8_t intensity;  // 反射强度(0-255)
    uint16_t ring;      // 线束编号
    double timestamp;   // 时间戳(us)
} LiDARPoint;

// 一帧数据包含约10万~100万个点
LiDARPoint point_cloud[100000];

3.4 三种传感器数据对比

特性 摄像头 毫米波雷达 激光雷达
数据类型 图像(像素矩阵) 稀疏点云(目标列表) 密集点云(3D坐标)
空间分辨率 高(像素级) 低(角度分辨率差) 极高(厘米级)
速度测量 间接(帧间差分) 直接(多普勒效应) 间接(帧间差分)
颜色/纹理 无(仅有强度)
夜间性能 差(需红外补光)
恶劣天气 较好
数据量 大(MB级/帧) 小(KB级/帧) 极大(MB~GB级/帧)
成本

3.5 数据融合的关键点

你想想看,这三种数据格式完全不同,怎么融合?核心在于时间同步空间对齐

  • 时间同步:所有传感器必须使用同一时钟源(如PTP协议),确保数据时间戳一致。我见过一个项目,因为摄像头和雷达的时间差50ms,导致融合后的目标位置偏差了1.5米——这在高速上足以引发事故。
  • 空间对齐:将雷达和激光雷达的点云投影到摄像头图像坐标系下。这需要精确的标定参数(旋转矩阵R、平移向量t)。

投影公式(雷达→图像):

// 雷达点 (X, Y, Z) 投影到图像像素 (u, v)
// 需要:相机内参矩阵K,外参矩阵[R|t]
// 1. 将雷达点转换到相机坐标系
P_cam = R * P_radar + t
// 2. 投影到图像平面
u = fx * (P_cam.x / P_cam.z) + cx
v = fy * (P_cam.y / P_cam.z) + cy

说白了,数据融合就是“取长补短”。摄像头提供语义信息(这是车、那是人),雷达提供精确的速度和距离,激光雷达提供高精度的3D轮廓。三者结合,才能实现可靠的感知。

3.6 知识体系结构图

下面这张图,我画了三种传感器数据在ADAS系统中的流转关系。你可以看到,从原始数据到最终的目标列表,每一步都离不开数据特征的理解。

ADAS感知层数据特征与融合流程 摄像头 图像数据(RGB/YUV) 毫米波雷达 稀疏点云(目标列表) 激光雷达 密集点云(3D坐标) ISP处理/畸变校正 CFAR检测/聚类 点云滤波/降采样 时间同步(PTP/硬件触发) 空间对齐(标定/投影) 融合目标列表(Fusion Object List)

这张图展示了从原始传感器数据到融合目标列表的完整流程。每一步都依赖对数据特征的深刻理解。比如,摄像头数据需要做畸变校正,雷达数据需要做CFAR检测,激光雷达数据需要做降采样——这些预处理步骤,都是基于数据本身的特性来设计的。

我的经验:在实际项目中,我建议先花一周时间,把三种传感器的原始数据录下来,用Python或MATLAB可视化看看。你会发现很多意想不到的问题——比如雷达的虚假目标、激光雷达的噪点、摄像头的过曝区域。只有亲眼看过这些数据,你才能设计出鲁棒的融合算法。


公众号:蓝海资料掘金营,微信deep3321