2. 数据采集系统设计
大家好,我是这次课程的主讲。今天咱们聊聊数据采集系统设计,这是自动驾驶数据闭环的「入口」。说白了,你后面算法再牛,模型再大,如果采集的数据质量不行,那都是白搭。我见过太多团队在传感器选型上踩坑,最后花大价钱补数据,得不偿失。
这一章,我会从传感器选型、触发策略、同步机制到存储格式,把每个环节的关键点掰开揉碎了讲。嗯,咱们开始吧。
一、传感器选型:各司其职,取长补短
自动驾驶的传感器套件,核心就四种:摄像头、激光雷达、毫米波雷达、IMU。它们各有各的脾气,你得摸透了才能用好。
1. 摄像头:视觉感知的「眼睛」
摄像头负责提供最丰富的语义信息。车道线、交通标志、行人、红绿灯,全靠它。我个人习惯,前向主摄像头至少用200万像素,最好上800万。为什么?因为远距离识别需要足够的分辨率。我在项目中遇到过,用200万像素的摄像头,100米外的行人只有几个像素点,模型根本认不出来。
选型要点:
- 分辨率:前向主摄≥200万像素,侧向/后向可适当降低
- 帧率:至少20fps,建议30fps以上
- 动态范围:≥120dB,应对隧道、逆光场景
- 快门类型:全局快门优于卷帘快门,避免果冻效应
2. 激光雷达:三维空间的「尺子」
激光雷达提供精确的3D点云数据。它能直接告诉你前方障碍物的距离、形状、速度。说白了,摄像头是「看」,激光雷达是「量」。
选型时,我建议关注这几个指标:
- 线数:64线起步,128线更好。线数越多,点云越密,小物体检测越准
- 探测距离:≥200米(10%反射率),高速场景必备
- 视场角:水平360°,垂直30°以上
- 点频:≥100万点/秒,保证帧率
我曾经踩过一个坑:选了一款号称200米探测距离的激光雷达,结果在雨天实测,有效距离直接缩水到80米。所以,标称参数一定要打折扣,尤其是恶劣天气下。
3. 毫米波雷达:全天候的「守护者」
毫米波雷达不怕雨雪雾,这是它最大的优势。它主要用来做中远距离的目标检测和跟踪,尤其是高速场景下的前车碰撞预警。
选型要点:
- 工作频率:77GHz是主流,比24GHz精度更高
- 探测距离:长距≥200米,中距100米,短距30米
- 角度分辨率:≤3°,否则容易把相邻车道目标混在一起
- 多目标跟踪能力:至少同时跟踪64个目标
你想想看,如果毫米波雷达的角度分辨率不够,高速上旁边车道有辆车,它可能误报成自车道的前车,那ACC(自适应巡航)就会突然刹车,多危险。
4. IMU:运动状态的「感知器」
IMU提供加速度和角速度,用于推算车辆的位姿。它不依赖外部信号,所以是定位系统的最后一道防线。GNSS信号丢失时,全靠IMU撑着。
选型时,我建议关注:
- 陀螺仪零偏稳定性:≤1°/h,越高越好
- 加速度计零偏稳定性:≤0.1mg
- 输出频率:≥100Hz,高频才能捕捉快速运动
- 量程:陀螺仪≥300°/s,加速度计≥4g
二、采集触发策略:让数据「对齐」
传感器选好了,怎么让它们协同工作?这就涉及到触发策略。说白了,就是决定「什么时候采集数据」以及「以什么频率采集」。
常见的触发方式有两种:
- 时间触发:固定时间间隔采集,比如每50ms采集一帧。优点是简单,缺点是可能错过关键事件。
- 事件触发:当检测到特定事件时触发采集,比如急刹车、变道、行人横穿。优点是数据更有价值,缺点是可能漏掉一些「看似正常但实际异常」的场景。
我个人习惯,采用混合触发策略:
- 基础采集:时间触发,10Hz(每100ms一帧),保证数据连续性
- 增强采集:事件触发,当车辆加速度>0.5g、转向角速度>30°/s、或目标检测置信度低于阈值时,临时提升到30Hz
这样做的好处是,既保证了常规数据的覆盖,又能在关键场景下获得更密集的数据。我在项目中遇到过,只用时间触发,结果一次紧急避让的完整过程只采集到2帧,根本没法用来训练模型。后来改成混合触发,同样的场景能采集到6-8帧,效果天差地别。
三、数据同步机制:时间戳是「命根子」
不同传感器的数据,必须精确同步。否则,摄像头看到的是1秒前的画面,激光雷达看到的是当前的点云,融合出来的结果就是「驴唇不对马嘴」。
同步的核心是时间戳对齐。我建议采用以下方案:
- 硬件同步:所有传感器通过PTP(精确时间协议)或GPS PPS信号同步到同一个时钟源。精度可达微秒级。
- 软件同步:在数据采集软件中,为每一帧数据打上硬件时间戳。然后通过插值或最近邻匹配,将不同传感器的数据对齐到同一个时间点。
举个例子:
# 伪代码:时间戳对齐
camera_frame = get_camera_frame(timestamp=1234567890.123)
lidar_frame = get_lidar_frame(timestamp=1234567890.125)
# 找到时间戳最接近的激光雷达帧
aligned_lidar = find_nearest(lidar_frames, camera_frame.timestamp)
# 输出对齐后的数据对
output(camera_frame, aligned_lidar)
四、存储格式:Rosbag、PCD、JSON
数据采集完了,怎么存?格式选不对,后面处理起来会非常痛苦。
| 格式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Rosbag | 原始数据存储、回放 | 支持多传感器数据混合存储,时间戳完整,可回放 | 文件体积大,不便于直接分析 |
| PCD | 点云数据存储 | 格式标准,支持多种点云属性,可压缩 | 只存点云,不存其他传感器数据 |
| JSON | 标注数据、元数据 | 可读性好,易于解析,跨平台 | 不适合存储大量二进制数据 |
我的建议是:
- 原始数据:用Rosbag存储,保留完整的时间戳和传感器信息。方便后续回放和调试。
- 点云数据:从Rosbag中提取后,转存为PCD格式。便于点云处理算法直接读取。
- 标注数据:用JSON格式存储。比如目标框的坐标、类别、时间戳等。方便人工检查和修改。
我曾经见过一个团队,把所有数据都存成JSON,结果一个Rosbag文件拆成了上千个JSON文件,处理起来慢得要命。后来我帮他们改成Rosbag+PCD+JSON的混合方案,效率提升了不止一个量级。
五、知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个「数据采集系统设计」的检查清单。
这张图从左到右,展示了数据采集的完整流程。每个环节都环环相扣,缺一不可。你设计系统时,可以对照这张图,看看哪个环节还有遗漏。
总结一下:数据采集系统设计,核心就是「选对传感器、定好触发策略、做好同步、选对存储格式」。这四个环节,任何一个出问题,都会影响后续的数据闭环效率。我建议你从一个小规模的采集系统开始,先跑通流程,再逐步优化。