数据采集技术:传感器数据采集与日志数据库采集

大家好,我是老张。今天咱们聊聊数据采集这块硬骨头。

做数据回放和场景复现,第一步就是要把数据搞到手。你想想看,没有原始数据,后面的一切都是空中楼阁。我个人习惯把数据采集分成三大类:传感器数据、日志数据、数据库数据。今天咱们一个一个说透。

一、传感器数据采集

传感器数据,说白了就是车上的眼睛和耳朵。摄像头、激光雷达、毫米波雷达,这三样东西是自动驾驶的标配。我在项目中遇到过不少坑,今天一并分享给你们。

1. 摄像头数据采集

摄像头采集,核心就两个字:帧率。嗯,这里要注意,不是帧率越高越好。我见过有人用120fps的相机,结果存储跟不上,丢帧严重。

我个人建议:

  • 城市道路场景:30fps 足够
  • 高速场景:建议 60fps
  • 特殊场景(如泊车):可以降到 15-20fps

还有一个容易被忽略的点——时间戳。我曾经因为时间戳没对齐,回放时画面和点云差了半秒,排查了整整两天。所以,采集时一定要用硬件同步信号。

重要提醒:摄像头采集时,务必记录曝光时间、增益、白平衡参数。这些参数在回放时会影响图像质量。

2. 激光雷达数据采集

激光雷达的数据量很大。一个64线雷达,每秒能产生上百万个点。怎么存?怎么传?这是个大问题。

我常用的方案:

  1. 使用 UDP 组播接收点云数据
  2. 按帧打包,每帧包含时间戳和点云数据
  3. 写入二进制文件,不要用文本格式

为什么用二进制?你想想看,一个点云文件动辄几十MB,用文本存的话,体积能翻3-5倍。我在项目里吃过这个亏,后来全改成二进制了。

// 点云数据帧结构示例
struct LidarFrame {
    uint64_t timestamp;    // 微秒级时间戳
    uint32_t point_count;  // 点数
    float points[];        // x, y, z, intensity 依次排列
};

小技巧:激光雷达采集时,建议同时记录电机转速和角度偏移。这些参数在回放时可以用来校正点云畸变。

3. 毫米波雷达数据采集

毫米波雷达的数据量小,但信息密度高。它输出的目标列表,每个目标包含距离、速度、角度、RCS等信息。

采集时要注意:

  • 目标ID的连续性——有些雷达会随机分配ID,回放时对不上
  • 目标置信度——低置信度的目标建议过滤掉
  • 多普勒速度的符号——正负代表靠近还是远离

我曾经遇到过一个情况:某款雷达在隧道里会输出大量虚警,回放时把整个场景都搞乱了。后来加了置信度阈值,问题才解决。

二、日志数据采集

日志数据,说白了就是系统运行时的“黑匣子”。它记录了每个模块的输入输出、状态变化、异常信息。

我建议日志采集遵循三个原则:

  1. 结构化——用 JSON 或 Protobuf 格式,不要用纯文本
  2. 分级——DEBUG、INFO、WARN、ERROR 四级,方便回放时过滤
  3. 带时间戳——精确到毫秒,最好用系统单调时钟

避坑指南:我曾经在项目里用系统时间作为日志时间戳,结果回放时发现时间倒流了——因为系统时间被NTP同步了。后来改用单调时钟,再也没出过问题。

日志采集的格式,我推荐这样:

{
  "timestamp": 1234567890123,
  "level": "INFO",
  "module": "perception",
  "event": "object_detected",
  "data": {
    "object_id": 42,
    "type": "car",
    "distance": 15.3
  }
}

嗯,这里要注意,日志不要打太多。我见过有人每秒打几千条日志,结果磁盘IO成了瓶颈,系统性能直接崩了。建议控制日志频率,关键事件才打。

三、数据库数据采集

数据库数据采集,常见于后处理场景。比如从MySQL、PostgreSQL、MongoDB里拉取历史数据,用于回放分析。

我个人习惯用以下几种方式:

数据库类型 采集方式 适用场景
MySQL JDBC/ODBC 批量查询 结构化数据,如车辆状态
MongoDB 游标遍历 + 分页 非结构化数据,如传感器日志
InfluxDB 时间范围查询 时序数据,如车速、加速度

采集时要注意数据量。我曾经从MySQL里拉取一周的数据,结果一次性查询把数据库搞挂了。后来改成按小时分批拉取,每次限制1000条,问题解决。

小技巧:数据库采集时,建议加上时间索引。这样查询效率能提升10倍以上。另外,采集完成后记得关闭连接,避免连接泄漏。

知识体系总览

下面这张图,是我梳理的数据采集技术知识体系。你可以看到,三大类数据采集各有侧重,但核心都是时间同步和数据完整性。

数据采集技术知识体系 传感器数据采集 日志数据采集 数据库数据采集 摄像头 · 激光雷达 · 毫米波雷达 帧率控制 · 时间同步 · 二进制存储 结构化 · 分级 · 带时间戳 JSON/Protobuf · 频率控制 MySQL · MongoDB · InfluxDB 批量查询 · 游标遍历 · 时间索引 核心要素:时间同步 + 数据完整性 三大数据采集技术,最终都服务于同一个目标: 让回放的数据与真实场景完全一致

这张图把今天讲的内容串起来了。传感器数据是原始输入,日志数据是过程记录,数据库数据是历史沉淀。三者缺一不可。

好了,今天的数据采集技术就聊到这里。记住一句话:数据采集的质量,决定了回放效果的上限。别在第一步就偷懒,后面有你哭的时候。

可可精品资料库