当前位置: 首页 > news >正文

DTOF(direct Time-of-Flight,直接飞行时间)

一、基本概念

1.1 定义

        dToF,即直接飞行时间direct Time-of-Flight),是一种通过测量光脉冲发射出去并反射回来的时间差来直接计算距离的技术。

        TOF应用场景非常多,电子消费品领域有人脸识别,照相机辅助对焦,临近传感器,体感互动,手势识别,AR等,扫地机器人避障,无人机避障,3D场景扫描等等;工业和安防领域可以用于自动机器人,人数统计,智能停车场,智能交通,智能仓储,提及测量等;智能驾驶领域的激光雷达LIDAR也属于TOF的范畴。

1.1.1 TOF简介

        TOF,即飞行时间(Time-of-Flight),是一种通过计算光在介质中传播一定距离所需时间来测量距离的方法。主要应用于光学TOF场景,其原理相对直接。如图所示,一个光源发射一束光,并记录发射时间。这束光反射在目标上并被接收器捕获,记录接收时间。这两个时间点之间的差异,记为t,可计算出距离d=光速c * t /2。

1.1.2 TOF系统架构

为了实现上述的距离测量,一个典型的TOF系统由以下几部分组成:

  • 发射端(Tx):包括激光光源(主要是VCSEL)、激光驱动电路ASIC,以及用于光束控制的光学组件(如准直镜头或衍射光学元件)和滤光片。

  • 接收端(Rx):包括接收端的镜头和滤光片;根据不同的TOF系统可能是CIS、SPAD或SiPM等传感器;以及用于处理接收器芯片大量数据的图像信号处理器(ISP)。

  • 电源管理:需要稳定的电流控制VCSEL、高电压供给SPAD等,因此需要强大的电源管理。

  • 软件层:包括固件、SDK、操作系统和应用层。

        尽管TOF的原理看似简单——发射光脉冲并检测其返回以计算距离——其复杂性在于区分返回的光和环境光。这一挑战通过发射足够亮的光以实现高信噪比,并选择适当的波长以最小化环境光干扰来解决。另一种方法涉及对发射的光进行编码,使其在返回时可以识别,类似于手电筒的SOS信号。

        Leica和PMD出品的TOF参考设计“Holkin”,大小类似于一个手机照相机镜头模组,可以看到发射端的类似矩形的孔和接收端的镜头;发射端是采用了VCSEL+diffuser的形式,接收端是一颗镜头。

1.1.3 波长选择

      TOF系统常见的分类方式是从获取距离的具体方法进行分类,主要分成dTOF(直接TOF)和|iTOF(非直接TOF)。这两种方法在硬件和算法上有很大区别。

        虽然TOF的原理听上去很简单,发出一个光脉冲,然后检测什么时候返回了一个光脉冲,通过计算这个中间经过的时间,就可以知道距离。但是传感器本身是一直在进行接收能量的,如何知道传感器在某个时间点t接收到的光就是发出去的光呢

  1. 发射足够亮的光(相对于噪声)以达到足够的信噪比,传感器接收到高于环境光的能量就可以知道这是发射出去的光。如果是电子消费品,用于生活环境中,自然环境光强范围十分大,波长范围也很广,同时一个电子消费品很难发射非常强的光强,一方面要考虑激光安全,要根据IEC60825的要求限制激光的能量,另一方面也要考虑耗电的问题。所以选择合适的波长发射光十分重要。
  2. 找一个应用场景中不存在的波长或者能量最低的波长,这样就可以在这个波长发射相对弱一些的光脉冲,然后传感器前面放置窄带滤波片,这样,传感器只能收到这个波长的光。
  3. 对发射的光进行编码,让其有可以识别的特征,比如发射光亮暗亮暗亮暗,接收端接收到这个形式的光的时候,就知道这是发射出去的光了,这就像黑夜中的SOS手电筒闪烁。

        太阳光的光谱如下图所示,黄色为大气层上方的太阳光谱,红色为经过大气吸收后的太阳光谱,在近红外区,可以看到有氧气和水蒸气的吸收峰(在某些特定波长下,水蒸气能够强烈吸收太阳辐射。这种吸收作用减少了到达地面的太阳辐射量,因此环境光强会变小)。这些吸收峰的波长位置理论上都可以作为TOF系统应用的波长。大部分TOF应用都会选择850nm和940nm

1)这两个波长的发光源器件可以使用VCSEL实现,再长的波长可能需要EEL实现;

2)接收端传感器对850nm是最敏感的,可以提供最佳的信噪比,940nm的感光度会比850nm低,如果波长更长,传感器的制造更难,电子消费品中很少选择。

3)人眼对近红外(NIR)波长范围的光不敏感,但人眼可以感知850 nm的光,看不到940 nm的光

4)虽然可见光谱区域中的太阳光最强,但NIR区域中的能量仍然很大。阳光(更一般地说是环境光)会增加景深噪声,缩短ToF摄像头的有效距离。幸运的是,由于大气吸收,阳光辐照度在920 nm至960 nm区域中急剧下降,与850 nm区域相比要小一半以上。在室外应用中,工作在940 nm的ToF系统可以更好地抑制环境光,实现更好的景深测量性能。

1.1.4 dTOF和iTOF

         直接TOF直接测量光子的飞行时间。其关键组件,单光子雪崩二极管(SPAD),灵敏度足以检测单个光子。简单来说该种传感器具有探测单个光子的灵敏度,只要有一个光子击中SPAD,SPAD就会最终输出一个脉冲。SPAD输出这个脉冲后,可以很快复位,准备接收下一个光子。

        可是即使在850nm和940nm,环境光也是存在的,这意味,只要SPAD开始计数,就可能不停的有光子会撞击SPAD并令其激活并输出脉冲,那如何分辨接收到的光子是发射端发出,被目标物反射回来的这个光子呢。首先要使用合适的窄带滤波+衰减,让大部分场景的环境光不能透过滤光片,以降低噪声,但是在850nm的衰减滤波是固定的,不可能满足在所有光照场景下,刚刚好环境光强度不会激发SPAD,然后发射光能量刚好有光子进入;而且依赖于滤光片和衰减,测量误差可能非常大。

        dTOF使用的方法叫时间相关单光子计数法(TCSPC,Time correlated single photon counting),名字听起来很复杂,实际上就是“数光子出现的时间”。具体见下图,假设我们使用发射端VCSEL快速发射100个激光脉冲,记录SPAD每次收到脉冲的时间Δt,我们就有了100个Δt,见左图;把这些不同Δt出现的次数画成直方图,其中某个时间段的Δt出现频率最高,就是最可能的物体位置造成的Δt,而其他的Δt出现的地方可能是SPAD自己的噪声,环境光噪声,光线多径反射后返回传感器的噪声等。在实际应用中,VCSEL可以达到非常高的调制脉冲速度,VCSEL的每个脉冲宽度可以在ps到ns级别;SPAD也可以实现非常快的相应速度。举一个例子,实际模组中,可以实现用200ns发射100个1ns的脉冲,占空比50%;每1ms进行一次这样的发射,得到一个距离结果;每10ms求10次结果的平均反馈给操作系统使用;如此该TOF可以实现100次每秒的测距。                

        间接TOF根据发射和接收波形之间的相位差来计算飞行时间,通常使用连续波或脉冲调制信号。因为是测量光强,所以iTOF的硬件可以使用普通的图像传感器架构,传感器输出的是接收到的光强和时间的函数,通过对比该函数和发射端的信号的函数,可以计算出飞行时间。需要注意的是,普通图像传感器的特点就是在一个固定时间收集光子,然后转化成电信号输出。

二、DTOF基本原理和核心组件

2.1 核心组件

激光驱动器

Laser Driver是发射端电路的主要部分,负责驱动Laser,控制电路发出数字脉冲信号,一般使用该信号控制MOSFET进行开关,控制激光发射。

激光器VCSEL 

VCSEL 垂直腔面发射激光器_vcsel芯片的上升下降沿-CSDN博客

在dTOF中,激光器负责发射激光。采用激光的主要原因是激光光谱窄,能量强度高,调制速度快,而且易于集成。电子消费品的dTOF应用中,主要使用的是VCSEL。

数字电路产生的脉冲方波输入给激光驱动,变成实际的光脉冲后,在时域上可以看到由完美方波,变成了不那么完美的方波(图示里是画的比较夸张,实际上,VCSEL的脉冲调制性能已经非常好了)。由于激光驱动的响应速度,这里在时域上产生了一个不确定性的参数,即为δ-laser(图中的δ-t)

发射端光学 

发射端一般为一个简单的光学镜头,把激光能量发射到需要的视场角内,有一些应用也会使用准直镜+DOE等元器件,把VCSEL发出的光线先准直,然后分成很多束光线指向不同的视场角方向。

接收端光学 

接收端光学零部件需要的主要是收集期望测量的视场角内的光线,这种镜头F数越小越好,相对照度越高越好,同时镜片上可以进行一定的镀膜增强透光性,同时接收端会使用尽量窄带的滤光片,去滤除其他波长的杂光干扰。

接收传感器SPAD 

dTOF应用中主要使用的接收传感器为single-photon avalanche diode (SPAD)单光子雪崩二极管或Silicon photomultipliers(SiPM)硅光子光电倍增管,他们的主要区别是每一个SiPM像素里包含多个SPAD像素。不同于传统CMOS传感器,对于光的接收时积分形式的,既接收某一时间段内的光强,转换为电流;SPAD如其名字所描述的,可以对单一光子进行相应,只需要一个光子就能触发一次强的雪崩,产生电流信号。可以说,SPAD输出的就是有光1和没光0两种状态(见下图)。SPAD传感器芯片每次被光子激活后,电子淬灭电路降低二极管中的电压使其在短时间内低于阈值电压,因此雪崩停止,经过一段恢复时间,探测器可以探测其它的光子,这个恢复时间决定了传感器的识别速度。

SPAD的像素相对于传统CMOS图像传感器来说还无法做的很小,比如一款传统图像传感器,三星的GN1,50MP,1/1.31"大小,像素大小1.2um。而SPAD的像素大小很大,这是由于其需要各种电路对SPAD进行复位造成的。比如根据机构的分析,iPhone中使用的Lidar是Sony的SPAD传感器,只有30K的像素数,每个像素10um大小。所以SPAD的传感器限制了dTOF的空间分辨率。

信号被SPAD接收后,会再产生一个一个时间不确定性因素δ-tSPAD,这个是SPAD的响应速度决定的。

TDC电路 

Time-to-digital converter(TDC),时间数字转换器,是将模拟信号转换成以时间表示的数字信号的电路,TDC输出了每一个脉冲与所设起始点相比被记录下来的时间。这些脉冲被记录下来后,转换成直方图,然后通过比较哪个时间的直方数量最大,确认目标物的位置。TDC电路的精度也会对时域信号产生影响,引入了一个不确定性δ-tTDC。通过TDC电路后的电路,都是数字电路。

2.2 系统参数

探测距离

精度

        假设一个脉冲的宽度为Δt,一个激光器把它发射出去后,接收端收到了反射回来的光子,但是接收端无法知道这个光子是来自于脉冲刚刚开始的第一个光子,还是脉冲结束时的最后一个光子,所以即使没有任何噪声或者不确定性的情况下,dTOF的距离探测精度,本质上是受限于脉冲宽度的,距离探测精度ΔR = c*Δt/2。假设每个脉冲宽度为1ns,那么ΔR = 0.15m。VCSEL作为一种半导体激光器,响应速度很快,可以达到ps级,假设脉冲宽度达到0.1ns,那么,ΔR 就可以达到0.015m,既15mm的探测距离精度。通过这个公式,我们可以看到,dTOF的探测距离精度,并不随距离的增加有所下降,这是dTOF一个很大的优势,也是dTOF类型的系统会使用在长距离场景探测的主要原因(车用激光雷达)。

误差

        探测距离d = cΔT/2,根据前面一部分的分析我们看到,在发射端到接收端的各种零部件上,在脉冲的时域上产生了很多的不确定参数,其中由数字电路产生的ΔT,经过激光驱动产生的激光脉冲产生了时间不确定参数 δlaser;被SPAD探测到后,SPAD的响应产生了 δSPAD;TDC电路的响应,产生了 δTDC。由此,总计的探测时间不确定RMS如下公式所示,其中δother是系统中的其他统计上独立的不确定参数,可能包括其他电路部分的响应,pixel之间互相的影响等,但是整体上这部分是相对比较小的。那么,测量误差为c*δtotal

最大无歧义探测距离

        假设我们发射了两个脉冲,第一个脉冲发射的早,但是飞行的远,第二个脉冲发射的晚,但是飞行的近,这样,第二个脉冲回来的早,第一个脉冲回来的晚,识别的时候,我们就会弄混两个脉冲。那如何能尽量分辨两个脉冲呢?最简单的方法就是把两个脉冲的发射间距拉长。其中,不造成混叠的最大无歧义探测距离为c*脉冲间隔/2,也等于c/2f,f为激光的调制频率。假设我们的激光调制在1Mhz,那么最大无歧义探测距离就是150m。所以,探测5m范围的dTOF可以使用更高的调制频率,就是因为探测距离足够小,并不会有脉冲间隔产生的距离歧义问题。

功耗 

        由于dTOF发射的是脉冲,所以功耗上,相对iTOF需要发射连续波以及持续接收,功耗较低。

抗干扰能力

        dTOF抗多路径干扰的能力很强,通过统计直方图和合适的算法,很容易分辨哪些光子是多路反射回来的,哪些是目标物反射回来的。这是dTOF对比iTOF的一大优势

视场角

        点云覆盖区域相对坐标原点的最大张角,分为水平方向和垂直方向;

        取决于光学系统和扫描方式的设计,视场角越大,能够测量的场景范围越广

帧率

         对同一个目标点探测的频率。     

        dToF可以在单帧测量时间内发射和接收多次光信号,帧率越高,深度测量的速度越快

空间图像分辨率

        受限于SPAD传感器的像素大小,dToF的空间分辨率可能不如传统的CMOS图像传感器

环境光适应性

分区模式

        将视场(Field of View, FoV)划分为多个区域,并在这些区域内独立地控制激光的发射和接收,从而实现更高的帧率和数据输出。

三、电路

VCSEL Driver 

        VCSEL Driver用于驱动VCSEL工作,最简单的一种架构如下图所示,由于系统的控制部分是数字信号,VCSEL本身是模拟元器件,而且需要一个高电流,系统需要做的是快速的控制VCSEL的开关以发出高频脉冲光波。其中VCSEL的正极连接高电压,用于VCSEL本身的供电,该电压有时可以和数字电路部分的控制电压分离开来。VCSEL的负极端连接一个MOSFET(金属氧化物半导体场效应管),起到一个开关的作用。VCSEL本身可以被大致描述为一个有着特定大小电阻电容和电感的理想二极管。MOSFET的gate侧可以接收脉冲信号,来对MOSFET进行开关。对于高速应用,gate侧使用一个Gate Driver来提升信号速度,比如使用一对儿MOSFET来对VCSEL的MOSFET进行快速的充放电保证其开关高速性能。

C6-4.png

SPAD Detection Array 

        SPAD detection array执行的是检测任务,主要由SPAD像素点,淬灭和重置电路和读出电路组成。下图展示了一个8x8的SPAD阵列的单像素结构,其中SPAD像素点用于感收到光子时发生雪崩效应产生电信号;淬灭和充值电路进行电压控制,已完成先停止SPAD像素点的雪崩过程,再让其回到工作状态;而读出电路用于识别SPAD读出的信号,并最终输出时间差信号。

        一种是读出电路整体在SPAD像素阵列边上(左图),一种是Sony的3D堆叠技术,整体读出电路在SPAD像素阵列下方(右图)。

C6-7.png

Micro Controller 

        Micro controller用于控制片上各子系统

NVM,ROM,RAM 

        NVM用于来储存firmware,序列号,系统的校准信息等需要一直保存的信息,ROM用于储存系统初始化信息等,RAM用于系统运行的计算存储。

外围电路和端口 

        ST的文档中展示了配合该模组的外围电路,模组通过I2C端口(SCL,SDA,INT)和Host MCU进行通信进行输入控制信号和输出信号的传输。

参考资料

了解TOF传感器概念:TOF、iTOF 和 dTOF是什么? (lumimetric.com)

dTOF基本原理和核心组件 (lumimetric.com)

03.00 TOF 系统 目录 - 超光 Faster than light (faster-than-light.net)

ToF系统设计—第2部分:飞行时间景深测量摄像头的光学设计 | Analog Devices

相关文章:

  • 【C++】继承,菱形继承,虚拟继承,组合详解
  • WebAssembly与WebGPU:游戏开发的新时代
  • 代码随想录训练营第45天|编辑距离
  • 如何构建鲁棒高性能 Prompt 的方法?
  • IIS HTTPS 网页可能暂时无法连接,或者它已永久性地移动到了新网址 ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY
  • docker简单熟悉
  • 技术分享|一文读懂三维建模技术
  • 18年408数据结构
  • Python Web架构:微服务与服务网格的实践
  • Subdominator:一款针对漏洞奖励计划的子域名安全枚举工具
  • SD2.0 Specification之功能切换
  • 【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络
  • 群晖套娃:群晖+飞牛fnOS二合一,群晖nas安装飞牛fnOS系统实录(飞牛fnOS初体验,如何挂载网盘视频,轻松实现影视刮削)
  • gtk4学习
  • SPI驱动学习七(SPI_Slave_Mode驱动程序框架)
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《剑指offer》分解让复杂问题更简单
  • Angular 响应式表单之下拉框
  • gops —— Go 程序诊断分析工具
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript函数式编程(一)
  • javascript面向对象之创建对象
  • Python爬虫--- 1.3 BS4库的解析器
  • Swift 中的尾递归和蹦床
  • Unix命令
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试总结(at, md)
  • 深度学习在携程攻略社区的应用
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 无服务器化是企业 IT 架构的未来吗?
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • zabbix3.2监控linux磁盘IO
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • (23)Linux的软硬连接
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (独孤九剑)--文件系统
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二十四)Flask之flask-session组件
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (转)memcache、redis缓存
  • ****三次握手和四次挥手
  • .java 9 找不到符号_java找不到符号
  • .NET C# 使用 iText 生成PDF
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • 。Net下Windows服务程序开发疑惑
  • ??javascript里的变量问题
  • @AliasFor 使用
  • @JsonFormat与@DateTimeFormat注解的使用
  • @media screen 针对不同移动设备
  • @Valid和@NotNull字段校验使用
  • [ NOI 2001 ] 食物链
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择