第1章:车载传感器概述
各位同学,咱们今天聊聊车载传感器。说实话,这是整个课程的基石。你想想看,一辆智能汽车要感知周围环境,靠什么?就是靠这些传感器。我在BSP开发这行摸爬滚打十几年,经手过的车载项目少说也有七八个,每次遇到新人,我第一件事就是让他们先把传感器搞明白。
1.1 传感器分类
车载传感器种类很多,但主流的就是这五类:摄像头、雷达、激光雷达、IMU和GPS。咱们一个一个说。
摄像头
摄像头是视觉感知的核心。它就像车的眼睛。我习惯把摄像头分成三类:
- 单目摄像头:成本低,但测距需要算法推算
- 双目摄像头:能直接测距,但标定麻烦
- 环视摄像头:一般4-6个,做360°全景
我在项目中遇到过一个问题:某款车的环视摄像头在雨天经常失效。后来发现是镜头涂层没做疏水处理。嗯,这种坑踩过一次就记住了。
雷达
雷达分毫米波雷达和超声波雷达。毫米波雷达穿透性强,不受天气影响。超声波雷达嘛,就是倒车雷达那种,探测距离短但精度还行。
说白了,雷达就是靠发射电磁波或声波,然后等回波。时间差就是距离。这个原理简单,但实际驱动开发时,干扰处理是个大麻烦。
激光雷达
激光雷达(LiDAR)这几年特别火。它用激光束扫描,生成点云数据。精度高,但贵。我记得2018年做的一个项目,一颗64线激光雷达就要十几万,现在便宜多了。
激光雷达的数据量很大,一秒钟能产生上百万个点。这对BSP的驱动和传输带宽都是考验。我建议你在做驱动设计时,一定要考虑DMA和内存管理。
IMU
IMU是惯性测量单元,包含加速度计和陀螺仪。它不依赖外部信号,完全靠自己推算位置和姿态。但有个问题——误差会累积。这就是为什么IMU需要和其他传感器做融合。
为什么会这样?因为加速度计有零偏,陀螺仪有漂移。时间一长,积分出来的位置就偏到姥姥家了。
GPS
GPS提供绝对位置信息。精度一般在米级,RTK差分GPS能做到厘米级。但GPS有个致命弱点:信号遮挡。隧道、地下车库、高楼林立的街道,GPS基本废了。
核心要点:没有一种传感器是完美的。摄像头怕光线差,雷达分辨率低,激光雷达怕雨雪,IMU会漂移,GPS会丢星。所以,必须做传感器融合。
1.2 传感器数据流
数据流这块,我画个简单的图给你看:
传感器硬件 → 驱动层 → 数据预处理 → 融合算法 → 决策输出
在Android BSP层面,我们主要关注前两步。传感器驱动负责把原始数据从硬件读出来,然后通过HAL层上报给上层。
每种传感器的数据格式都不一样:
| 传感器类型 | 数据格式 | 典型频率 |
|---|---|---|
| 摄像头 | YUV/RGB图像帧 | 30-60 fps |
| 毫米波雷达 | 目标列表(距离、速度、角度) | 10-50 Hz |
| 激光雷达 | 点云数据(x,y,z,intensity) | 10-20 Hz |
| IMU | 加速度+角速度(6轴) | 100-1000 Hz |
| GPS | NMEA 0183协议 | 1-10 Hz |
注意看,IMU的频率最高,GPS最低。这就是为什么做融合时,常用IMU做高频插值,GPS做低频修正。
经验之谈:在驱动开发时,一定要给每个传感器打上时间戳。而且时间戳要用同一个时钟源。我曾经在一个项目里,摄像头和雷达的时间戳差了50ms,结果融合出来的目标位置全是错的。查了两天才找到原因。
1.3 传感器融合基础概念
传感器融合,说白了就是把多个传感器的数据整合起来,得到比单个传感器更准确、更可靠的结果。
融合的层次一般分三种:
- 数据级融合:直接在原始数据层面做融合。比如把激光雷达的点云和摄像头的图像做像素级对齐。计算量大,但精度高。
- 特征级融合:先提取特征,再融合。比如从图像里提取车道线,从雷达里提取障碍物,然后判断它们是不是同一个物体。
- 决策级融合:每个传感器独立做决策,最后投票。比如摄像头说前面有车,雷达也说有车,那就信了。
我个人习惯用特征级融合。为什么?因为数据级太吃算力,决策级又太粗糙。特征级是个折中方案,在车载嵌入式平台上跑得动。
融合的核心算法主要有两种:
- 卡尔曼滤波:线性系统下的最优估计。适合IMU+GPS融合。
- 粒子滤波:非线性、非高斯场景。适合激光雷达+地图匹配。
注意:卡尔曼滤波假设噪声是高斯分布。如果你的传感器噪声不是高斯分布,比如雷达的杂波干扰,那卡尔曼滤波的效果会大打折扣。我曾经在高速场景下吃过这个亏,后来改用扩展卡尔曼滤波(EKF)才解决问题。
嗯,传感器融合这块内容很深,咱们后面会有专门章节讲。今天先把概念理清楚。
最后说一句:做车载传感器驱动,不要只盯着代码。你得理解传感器的物理特性、数据特性、以及它们之间的互补关系。只有这样,你写出来的驱动才是真正能用的驱动。
好,今天就到这儿。下一章咱们聊聊摄像头驱动的具体实现。