你拿起一个固态激光雷达模块,插上电,数据流里三维点云瞬间涌出来,第一反应通常是:这玩意儿没有旋转电机,没有振镜摆动,凭什么能“看”到整个视野?我当年在实验室里第一次跑通Flash LiDAR的点云输出时,就是这个感受。后来把发射端和接收端的时序关系理清楚,才意识到它和传统机械式激光雷达在思路上完全是两个物种——它不是靠“扫”出来的一帧画面,而是靠“一束光照亮全场、全场同时测距”的Flash快照式方案。
这篇文章会把固态激光雷达Flash测距和测绘的原理从头到尾拆一遍,包括光子飞行时间怎么算成距离、SPAD阵列为什么非要单光子探测器、一张深度图怎么变成三维点云,以及我在实测里遇到的多径干扰、阳光噪声、反射率掉链子这些问题。适合做机器人感知、自动驾驶传感器选型、激光雷达算法或硬件开发的朋友,当作一篇把原理和工程黏在一起的参考。
1. 先从“为什么是Flash”说起:扫描与闪光的路线之争
1.1 机械旋转、半固态MEMS与Flash的本质差异
激光雷达刚走向民用市场那几年,大家脑子里默认的形态就是机械旋转雷达:一组激光收发模组放在转台上,电机带着它哗哗转,每转一圈,激光束扫过水平方向一圈,配合垂直方向的摆镜或者多线排列,形成一帧点云。Velodyne那类产品就是这么干的,效果直白,点云漂亮,但缺点也写在脸上:有电机、有轴承、有旋转滑动接触,体积大、成本高、可靠性差,过不了车规的寿命和振动测试。
后来出现了半固态方案,典型代表是MEMS微振镜激光雷达。它保留了激光束的扫描动作,但把机械结构微缩到一片可以高频摆动的硅微镜上。一束光打在镜面上,镜面快速摆动,反射光扫过前方视场,再用一个较小的探测器接收。它的优点是线数可以做得高、视场角灵活,缺点是振镜本身还是运动部件,虽然是MEMS级别,但依然存在疲劳和温度漂移,而且扫描需要时间,运动目标在扫描帧内会产生形变。
Flash激光雷达的思路则是彻底不扫描。它的发射端是一个面阵光源,通常是VCSEL激光器阵列,加上扩散光学元件,把激光脉冲一次性照亮整个视场,就好比按下相机的闪光灯。接收端是一个高密度的单光子探测器阵列,每个像素独立接收对应方向上的回波光子,整片阵列一帧曝光,同时测出所有方向的距离。区别用一句话概括:前两者是“用一支笔把纸一格一格涂满”,Flash是“用一枚印章直接按下去,整张纸一次印完”。
1.2 Flash近程补盲与远程前向的两种玩法
正因为Flash不做扫描,它的帧率天然可以做得很高,一帧就是一整个视场,不存在扫描线之间的时间错位。这在近程感知场景里是巨大优势。很多量产车上用的补盲激光雷达、侧向激光雷达就是Flash方案,它们只需要看十几米到几十米的近场环境,视场角做得很大,一个模块贴上去就能覆盖一侧的盲区。
但Flash也有一个绕不开的物理约束:光源能量要按照整个视场面积摊开。同样一束激光,扫描方案集中在一个点上,Flash方案却要摊到几十度乘几十度的面积上,单位面积上的光强密度大幅下降,远处目标的回波自然就弱。所以Flash做远程前向雷达比较吃力,过去一直被认为是“只能在近处干活的辅助角色”。不过这几年工艺进步很快,VCSEL功率密度上来了,SPAD灵敏度也在提升,远程Flash慢慢也能做到百米级探测,有些厂商甚至把远程Flash当作前向主雷达在推。总的来看,Flash的应用场景已经从中低端近程补盲,逐步向主雷达渗透。
2. 测距:“光子飞了多久”这句话背后,藏着一整套时间测量体系
2.1 所有TOF测距公式的核心,只是t/2这个因子
Flash LiDAR对距离的测量方式,基本都跳不出飞行时间法,也就是TOF。原理一句话就能讲完:激光器发出一个光脉冲,光打在目标上反射回来,被探测器收到,记下从发射到接收的时间差 t,距离 d 就是:
d = (c × t) / 2
除以2是因为光走了一个来回,单程距离才是我们想要的。c是光速,约等于3×10^8 米/秒。这个公式看起来简单到不值一提,但工程难点全在 t 的测量上。
算一笔账就很直观。要测一个100米外的目标,光往返的时间大约是666.7纳秒。要测一个0.1米的近距离目标,往返时间只有0.67纳秒。也就是说,Flash激光雷达要在纳秒甚至亚纳秒尺度上精确分辨时间,才能把距离测准。时间测量误差1纳秒,距离误差就是15厘米;误差100皮秒,距离误差1.5厘米。测距精度的本质,就是时间间隔测量电路的精度。
2.2 从单脉冲到多脉冲积累:SPAD的盖革模式与死时间
接收端用的探测器,在Flash方案里几乎清一色是SPAD,也就是单光子雪崩二极管。为什么必须用到单光子级别的灵敏度?因为当激光脉冲摊开照亮整个视场后,回到单个像素上的光子数量可能极少,尤其是远距离、低反射率目标,一个脉冲周期内可能只有一两个光子甚至没有光子落进这个像素。普通的光电二极管和APD根本捕捉不到这么弱的信号。
SPAD工作的核心是盖革模式:给PN结加上超过雪崩击穿电压的反向偏压,一个光子触发载流子碰撞电离,形成雪崩,产生一个可被CMOS电路直接读取的数字化脉冲。灵敏度高到可以数单个光子,这就是SPAD最大的价值。
但它也有一个很麻烦的脾气:一旦被光子触发,雪崩电流会一直维持,必须先把电压降到击穿电压以下,把雪崩淬灭,再重新升压到工作状态,才能探测下一个光子。这段“休息”时间叫作死区时间,典型值在几十到上百纳秒。死区时间内能不能再来光子,一概不管。这就导致SPAD无法像线性探测器那样记录一个脉冲内的光强,它只能记录“有没有光子”以及“光子到来的时间”。
为了对抗单脉冲下信号弱、噪声大的问题,Flash LiDAR基本都采用多脉冲积累的方式:一个测量周期内连续发射几万个到几十万个激光脉冲,SPAD每次记录一个光子到达的时间,统计成一个时间直方图。远处目标回波光子集中在特定时间桶里,会在直方图里形成一个峰;噪声光子则在各时间桶均匀分布。做完积累后,算法寻找直方图的峰值,那个峰值对应的时刻就是回波到达时间,再通过发射时刻与到达时刻的差值算出距离。
这里面的关键是,直方图积累不是简单把计数相加,它是在跟信噪比搏斗。脉冲数量N积累后,信号峰值幅度按N增长,而随机噪声按√N增长,信噪比提升约√N倍。所以发射频率越高、积分时间越长,探测距离越远,但也意味着帧率下降、功耗升高,这是一组需要现场权衡的指标。
2.3 距离分辨率从哪来:TDC时间戳计数与直方图峰搜索
SPAD给出的只是“某个时刻发生雪崩”的电平跳变,真正要把时刻精确量出来,需要TDC,时间数字转换器。TDC的任务简单说就是给光子到达事件盖一个高精度时间戳,比如把100皮秒分成一个桶,记录光子落在第几个桶里。
时间戳之后,一帧数据在软件或者硬件里被整理成直方图。假设发射脉冲的时刻是t0,探测器记录到回波光子的时刻除以TDC的最小分辨时间,得到一个桶序号。把所有脉冲周期的桶序号累加起来,最终形成一条“回波次数 vs 时间”的直方图曲线。峰值搜索算法再把这个曲线里的主峰挑出来,主峰对应的时间再换算成距离。
需要特别注意的是,直方图峰搜索不等于简单地找最大值。真实场景里会有多个反射面,比如玻璃表面先产生一个弱反射峰,后面的实物再产生一个强反射峰;还有一种情况是目标边缘周围有前后两个物体,各自形成峰。Flash雷达算法里通常要配置“首个峰”“最强峰”“末峰”三种提取策略。探测“首个峰”适合防碰撞需求,要保证车或机器人宁可把更近的干扰物当障碍,也不能漏检;探测“最强峰”适合测绘类场景,因为强度最高的回波一般对应反射率最高、置信度最高的表面。这层逻辑必须在系统设计时先想明白,否则后面写点云处理会非常被动。
3. 测绘:一束光一照,深度图怎么变成三维点云
3.1 像素不是图像像素,是“方向感知单元”
Flash LiDAR的接收端是一块SPAD像素阵列,比如几十×几十到几百×几百的分辨率。每个像素都会输出一个距离值,整块阵列输出后其实就是一张距离图。但这里必须强调:Flash阵列里的“像素”和普通相机的像素不是一个概念。普通相机的像素只记录光强度,Flash LiDAR的像素记录的是它对应视线方向上的回波时间,因此每个像素本身就隐含了一个空间方向信息。
把一个SPAD像素和发射端的光路对应起来:镜头将视场内的反射光成像到SPAD阵列上,落在不同像素的光子来自视场中的不同方向。像素坐标(u, v)决定了这个像素“看”的方向,距离值决定了目标在这个方向上的远近。这两部分信息合起来,才是完整的三维空间坐标。
这里的工程细节在于像素与方向的对应关系不是简单线性的,尤其在广角镜头下,畸变不可忽略。整个映射关系要靠标定得到,最常见的做法是拿一个已知几何尺寸的标定板或者标准球体,放在不同距离、不同角度下采集距离图,然后用镜头畸变模型去拟合每个像素对应的入射角。出厂的Flash LiDAR如果换了镜头、动了光学结构,这部分标定参数必须重新生成,否则点云会出现系统性的边缘翘曲。
3.2 从深度图到XYZ点云:极坐标转换与内参标定
拿到每个像素的距离值和对应的方向角之后,剩下的就是坐标变换。假设像素对应的水平方位角是 α、垂直俯仰角是 β、距离是 R,那么目标在激光雷达坐标系中的三维坐标可以写成:
X = R × cos(β) × sin(α) Y = R × sin(β) Z = R × cos(β) × cos(α)
这里的 α 和 β 不直接等于像素坐标,而是需要通过标定的内参矩阵转换得到。实际工程里,很多厂商会直接给一套“查找表”:每个像素对应一组方向余弦,把距离值乘上去就得到该像素方向的XYZ分量,省去在线做三角函数运算的算力开销。对嵌入式平台来说,这种查表方式非常实用,一次标定后把方向表烧进ROM,每次点云解算只是做整数乘法和定点加法,实时性压力小很多。
坐标变换还有一个隐藏问题要注意:参考坐标系的原点到底在哪儿。有的模块把坐标原点定义在接收镜头的光心,有的定义在发射透镜的中心,还有的定义在外壳机械底面中心上。这个看似不起眼的差异,在多传感器融合标定时会直接影响外参初值,处理不好会导致激光雷达点云和相机图像的对齐一直有固定偏差。拿到一个Flash LiDAR,第一步永远是查清楚它的坐标原点定义。
3.3 多回波与强度图:一次曝光里的“叠加”和“附属品”
Flash一帧里面,单个SPAD像素可能在同一帧内检测到多个回波吗?严格说,SPAD在死区时间内会漏掉部分光子,所以同一个像素同一帧内通常只能有效记录一个回波,但通过多脉冲积累和多阈值设置,系统可以在一次多脉冲扫描里分离出同一方向上的多个反射峰,这就是多回波能力。多回波在隔窗测物、栅栏后面的目标探测、树枝遮挡环境下非常有用:首个峰是车窗/栅栏,第二个峰是后面的人或车,测绘算法可以根据峰的距离差判断哪些是遮挡物、哪些是真实表面。
除了距离,Flash LiDAR还能顺带输出强度值。虽然SPAD本身不输出线性光强,但回波光子的统计学计数率可以反映出目标反射率的相对高低。把回波峰的计数幅值归一化,就能得到一张类似强度图的附属输出,这对测绘来说特别有价值:沥青路面、白色标线、植被、金属护栏在强度值上有明显差异,点云配准和地物分类可以直接吃这个特征。
需要提醒的是,Flash的强度值并不绝对,它受目标距离、入射角、反射率以及环境光影响都很大,不能直接当反射率研究使用,只适合作为相对特征参与分类。如果要做定量光谱分析,还得靠多波长激光或者单独的反射率标定流程。
4. 关键器件:VCSEL发射与SPAD接收,一收一放里的工程博弈
4.1 VCSEL阵列为什么是Flash天然的发光源
发射端的核心器件,Flash LiDAR几乎都选VCSEL,也就是垂直腔面发射激光器。和传统激光雷达常用的EEL(边发射激光器)相比,VCSEL最大的优势在于结构天然适合二维阵列化。EEL是沿着芯片表面发光的,要在同一块芯片上集成数十上百个独立发光孔很难;VCSEL是从芯片表面垂直发光的,芯片制造工艺本来就擅长做二维阵列,所以VCSEL可以做出密集的面阵光源,每一个发光孔独立可控,合在一起就能覆盖一个宽大的发光面。
另一个关键优势是VCSEL的温漂特性。传统EEL激光器随着温度升高,发射波长会明显漂移,导致和接收端窄带滤光片的匹配度下降。VCSEL因为谐振腔结构更稳定,波长漂移相对小,这对工程上很有吸引力——接收端通常配的是带宽很窄的光学滤光片,如果发射波长漂出去,回波信号会被滤光片衰减,量程和信噪比都会变差。
VCSEL阵列的挑战在于功率密度和散热。Flash光源要把能量摊在整个视场上,单个脉冲的峰值功率需要做得很高,而VCSEL又容易受热影响,功率高了结温上升,转换效率下降。工程上通常是拉长脉冲宽度、提高重复频率来补能量,但这又会牵扯到移动目标的运动模糊和光电探测的动态范围问题。所以VCSEL阵列的设计不是单纯选大功率器件,而是要跟驱动电路、散热结构、光学扩散方案一起做系统级匹配。
4.2 SPAD像素阵列:高灵敏度背后的PDE、DCR和填充因子
SPAD阵列的参数,最核心的几个是PDE(光子探测效率)、DCR(暗计数率)和填充因子。PDE决定了入射到像素上的光子有百分之多少能被探测到,直接关系到探测距离和所需的最小回波光子数。DCR是没有任何光照时像素自发雪崩的速率,DCR太高的话,直方图里的噪声底就被抬高,弱信号峰会淹没在暗计数噪声里。填充因子则是SPAD感光面积占像素总面积的比例,CMOS工艺里SPAD周围要放TDC、控制逻辑、淬灭电路,这些电路占掉原本属于感光区域的面积,填充因子低了,有效感光面积就小,灵敏度跟着下降。
SPAD像素阵列的另一个取舍是像素尺寸和空间分辨率的矛盾。想要更高角分辨率,就需要把像素做得更小、数量更多,但小像素意味着感光面积更小、TDC电路更难塞进去,最终导致PDE和填充因子下降。行业里为了弥补这个问题,已经出现了用微透镜阵列把入射光汇聚到每个SPAD有效感光区的做法,相当于给每个像素戴一顶“小聚光帽”,填充因子可以被虚拟放大到接近100%。换句话说,整条链路里没有一个参数是可以单点优化的,全部是笼统的“鱼和熊掌”问题。
4.3 光学设计与时间同步:带通滤镜、扩散片、全局触发
Flash LiDAR的光学系统,在发射端和接收端各有一个核心部件。发射端通常有扩散片或者DOE,作用是把VCSEL阵列发出的光束均匀地铺满目标视场。扩散片的光学设计直接影响视场角、能量分布均匀性以及是否存在“热点”。如果扩散不均匀,视场中心亮、边缘暗,距离远的目标在边缘区域根本测不到,点云会出现明显的四角缺损。
接收端镜头前面一定要配窄带滤光片,中心波长对准激光器发射波长,带宽一般控制在10到30纳米左右。窄带滤光片的作用是大幅压制太阳光和室内灯光的背景噪声。太阳光在近红外波段的光谱密度很高,如果不用滤光片,SPAD很容易被背景光子淹没,直方图噪声底高到没法看。顺便提一句,市场上很多Flash LiDAR在强阳光下性能明显下降,背后往往就是滤光片带宽太宽或带外抑制不够。
时间同步的单位是皮秒到纳秒级别。每个测距周期,主控发出同步触发信号,VCSEL驱动电路收到触发后立刻发光,SPAD阵列的TDC同时从零开始计数,两边共享同一条时钟树。如果发射触发和TDC启动之间存在固定的偏斜,可以直接在标定阶段补偿;如果存在随温度和电压漂移的抖动,那就必须靠锁相环和延迟锁定环这一类电路把时钟做稳。很多刚上手做Flash LiDAR的团队会忽略这个细节,结果出来的点云在开机的几分钟内是准的,热机之后距离系统性偏移,查来查去最后发现是发射和接收时序偏了。
5. 精度、量程与坑:实测中跑不掉的多径、噪声和反射率问题
5.1 测距精度的每一项误差来源,都能从时间域找到根
Flash LiDAR的测距误差,从时间域看无非来自几个方面:
- 系统固定偏置:比如TDC启动时刻和激光发射时刻之间的固定延迟,通常可以通过内参标定扣除,剩下的残余是温度漂移。
- 随机抖动:TDC自身的量化噪声、SPAD的触发抖动、激光脉冲宽度的不确定性,这些服从高斯分布,最终表现为点云的随机噪声。
- 目标倾斜效应:光线斜打到平面目标上时,激光脉冲在目标表面产生的时间展宽会变大,距离测量值会不稳定。入射角越大,这个现象越明显,所以墙面边缘的点云噪声通常比正视墙面时高得多。
- 多目标混叠:同一像素方向上有前后两个目标时,直方图峰形不对称,峰值搜索的位置可能偏向中间灰度区域,导致测量值落在两个目标之间,产生“虚假表面”。
实测中定位误差来源的一个有效方法,是在固定距离上放一面漫反射白板,改变环境温度,连续记录测距值。如果距离读数随温度呈线性漂移,那大概率是时钟链路的温度漂移;如果读数随机跳变范围大,那就要怀疑是回波幅度太低,SPAD触发抖动占比过大。把这两个问题分开去查,会少走很多弯路。
5.2 多径、太阳光与“鬼影点”:真实环境中最大的三个敌人
多径效应是所有TOF雷达的心病,Flash LiDAR也不例外。想象一个场景:激光照射到墙角,一部分回波直接回到探测器,另一部分先打到墙面再反射到墙角,最后再回到探测器。后者走过的路径明显更长,会在直方图出现的时间更晚的位置形成一个额外的峰。当这种二次反射光强足够大时,主峰后面会出现一个“幽灵峰”,点云里表现为墙角后方凭空多出一片虚假点。
阳光干扰则是另一个典型问题。虽然窄带滤光片能挡住大部分背景光,但在中午的强阳光下,背景光子计数率依然可能比回波光子高一个量级。很多Flash LiDAR会在算法里做背景估计:在激光不发射的时间窗口内统计背景计数率,再从正式测距窗口的总计数中减去背景计数,相当于做差分探测。如果发现点云在强阳光下出现“雾化”现象,也就是距离值随机四散分布,大概率是背景抑制没调好。
鬼影点是多径、镜面反射和旁瓣光共同作用的产物。有一回我在钢化玻璃门旁边测一个移动机器人,玻璃门的镜面反射在点云里形成了一整片悬浮的点,离真实墙面距离差了足足一米。后来把回波提取策略从“最强峰”改成“首峰”,又对相邻像素做时空一致性滤波,才把这批鬼影压下去。如果你做的是安全相关应用,这些鬼影点必须要处理,否则移动机器人可能看到一片并不存在的“空中障碍物”,触发急停。
5.3 反射率带来的量程波动:不是一样远的物体都能测到
测距系统的最大量程从来不是一个固定数字,它和目标的反射率强相关。同一款Flash LiDAR,对白墙可能能测到80米,对深色车辆可能只到30米,对黑色橡胶轮胎可能不到20米。原因是回波光子数和目标反射率成正比,反射率低的表面返回的光子太少,直方图峰会被噪声淹没。这一点在测绘应用中容易被忽略,很多项目只按标称量程做规划,结果在暗色物体密集的工业现场,点云的有效探测距离缩水严重。
应对反射率问题,实践中常用的办法有三层:
- 第一层,系统层面提高单脉冲能量和脉冲积累次数,用能量换回波光子数。
- 第二层,算法层面做自适应增益,根据上一帧的计数率动态调整阈值,防止远距离低反射目标漏检。
- 第三层,部署层面给LiDAR留出冗余量,标称200米的设备只规划150米以内的工作范围,拿20%到30%的余量去吸收反射率波动。
深色物体还有一个附加问题:SPAD死区时间导致它在强回波后一段时间内无法响应,如果前方近处有个高反射率标识牌,它后面的暗色物体大概率测不到。这在布设安装位置时要特别注意,尽量让传感器前方不要出现反光很强的物体。
6. 从补盲雷达到机器视觉:Flash的落地场景与未来走向
6.1 车载补盲与近距离防碰撞:最成熟的商业落地窗口
Flash LiDAR在车载应用里最成熟的角色至今仍是补盲和近程感知。车辆侧后方、前保险杠下方这些区域,对点云精度要求不算特别高,但对设备体积、成本、可靠性和帧率要求极高。Flash的固态结构天然适合安装在车门、翼子板、保险杠内等空间有限的位置,并且能做到几十赫兹的高帧率,让盲区监测系统及时捕捉快速切入的电动车或行人。
在封闭园区低速无人车、港口AGV、矿山机械上,Flash LiDAR也经常被选为避障主传感器。这些场景速度低、环境相对可控,Flash的近距离高密度点云优势能发挥得淋漓尽致。我之前在自动叉车项目上用过一款Flash补盲雷达,装在前叉两侧后,货架立柱和托盘孔的识别稳定性比单线激光雷达好了太多,原因就是Flash能在一个截面上直接给出目标的三维轮廓,而不是只给一条线的高度剖面。
6.2 机器人、无人机与工业测量中的Flash测绘
消费级和商用级移动机器人是Flash LiDAR的第二大主战场。机器人需要在室内环境里实时构建地图、定位和避障,对点云的需求是“附近高密度、低延迟”。Flash LiDAR因为单帧曝光、无扫描延迟,在机器人快速旋转时不会出现扫描式雷达那种点云拖尾和畸变,SLAM效果明显更稳。
无人机测绘和一些工业测量场景也在用Flash方案。近地面大范围扫描时,Flash一次曝光可以直接覆盖地面一片区域,配合惯导系统,效率比单线扫描式LiDAR高得多。尤其是在树木茂密的区域,Flash的多回波能力可以把树冠上的叶片回波和地面回波分离,帮助生成更干净的裸地表高程模型。需要注意的是,无人机的重量和载重限制对Flash模块的功耗和质量提出了更高要求,选型时一定要把散热和振动试验做足。
6.3 下一代:单芯片SPAD阵列、1550nm与融合感知
Flash LiDAR的演进方向,目前能看到的清晰主线是芯片化。过去SPAD阵列、TDC电路、直方图处理、接口驱动是分立器件或者多芯片拼装,现在越来越多厂商把SPAD像素阵列和信号处理电路做进同一颗CMOS芯片里,走的是“单芯片激光雷达”的路线。单芯片化之后,成本和体积大幅下降,分辨率有望从目前的百级像素提升到千级像素甚至更高。
波长方面,1550纳米全固态方案也是一个热点。1550纳米激光对人眼安全性更好,可以打到更高功率而不伤害人眼,意味着更远的探测距离和更强的穿透能力。但1550纳米的SPAD技术还不像905纳米那么成熟,硅材料在这个波段几乎不吸收光子,需要用到铟镓砷等III-V族材料,成本和工艺难度都高出一截。短期来看,905纳米Flash依然会是市场主流,1550纳米则是远程高性能方向的技术储备。
往回看,我自己的体会是:Flash LiDAR最迷人的地方不在于单点参数的比拼,而在于“全局同时测量”带来的系统级优势——它天然适合和相机做像素级融合,深度图直接对齐RGB图,省去很多外参标定的麻烦。前几年大家觉得Flash只能做近距离补盲,这两年随着VCSEL和SPAD工艺的快速迭代,这种判断已经站不住了。如果你正好要在近程感知或室内测绘上选型,不妨把Flash方案当成一个正经候选,别被“固态=低性能”的旧印象带跑了。