ToF原理记录

2024-06-13 14:20
文章标签 记录 原理 tof

本文主要是介绍ToF原理记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1. ToF是什么?
    • 2. ToF深度测量原理
      • 2.1 脉冲调制法
      • 2.2 连续波调制法

1. ToF是什么?

飞行时间(Time-of-Flight,ToF)基本原理是通过连续发射光脉冲(一般为不可见光)到目标物体上,然后接收从物体反射回来的光脉冲,通过探测光脉冲往返的飞行时间来计算被测物体的距离。其根据调制方法的不同,一般可分为两种:脉冲调制(Pulsed Modulation)和连续波调制(Continuous Wave Modulation)。

2. ToF深度测量原理

2.1 脉冲调制法

在这里插入图片描述

图1.脉冲调制法测距原理图

脉冲调制法一般采用方波脉冲,是通过计时器直接计算脉冲发射和接收的时间差,进而求得距离。这种测量方法简单,响应较快,但是对物理器件性能要求很高,对时间测量精度要求也较高。

在这里插入图片描述

在脉冲调制方案中,一般采用方波调制的照射光源,在数字电路中较容易实现。光探测器的每一个像素都是由一个将入射光转换为电流感光单元组成,连接2个由调解模块控制的开关(图3中的G0和G1)可以把电流导入不同的可以储存电荷的电容(图3中的C1和C2)里根据图2和图3可知,在测距过程中,当激光器发射光脉冲的同时,高频开关调到G1、光敏元件连接C1电容、产生相位A的脉冲窗口,C1电容开始接收电荷,一个光脉冲发射完毕,开关调到G0、光敏元件连接C2电容、产生另一个延迟相位B的脉冲窗口,C2电容开始接收电荷。根据电容C1和C2中各自存储的电荷量就可计算得到目标物体和ToF的距离。记光的速度为 c c c t p t_p tp为光脉冲的持续时间, Q 1 Q_1 Q1表示C1电容收集的电荷量, Q 2 Q_2 Q2表示C2电容收集的电荷量, t d t_d td表示光脉冲从发射、反射到被接收的飞行时间,则距离 d d d的计算如下:
t d = t p × Q 2 Q 1 + Q 2 t_d = t_p\times\frac{Q_2}{Q_1+Q_2} td=tp×Q1+Q2Q2

d = c × t d 2 d = \frac{c\times{t_d}}{2} d=2c×td

在实际场景中由于单个光脉冲的持续时间非常短,所以单帧测量时间内上面所述的发射、接收过程会重复几千次,直到达到曝光时间,将不同电容接收的电荷量进行积分,然后用上面公式的方法计算出脉冲飞行时间,从而得到目标距离

  • 最小可测量距离 d m i n d_{min} dmin:物体距离很近,光脉冲从发射到被反射接收的过程很快,在较早的采样周期内电容C1就收集了所有的电荷,而在延迟的采样周期内电容C2没有收集电荷,即 E 2 = 0 E_2=0 E2=0,代入公式会得到 d m i n = 0 d_{min}=0 dmin=0
  • 最大可测量距离 d m a x d_{max} dmax:物体距离远,较早的采样周期内光脉冲还没发射到接收器处,即电容C2收集了所有电荷,电容C1中根本没有收集到电荷。然后根据公式可得 d m a x = 0.5 × c × t p d_{max}=0.5\times{c}\times{t_p} dmax=0.5×c×tp,因此最大可测量距离是由光脉冲宽度决定的。例如, t p = 50 n s t_p=50ns tp=50ns,代入上式可得到 d m a x = 0.5 × ( 3 × 1 0 8 m / s ) × ( 5 × 1 0 − 8 s ) = 7.5 m d_{max}=0.5\times(3\times10^8m/s)\times(5\times10^{-8}s)=7.5m dmax=0.5×(3×108m/s)×(5×108s)=7.5m

🔔 相位模糊现象

下图中Case 1为正常情况下的脉冲ToF测距场景,但当测量距离较远,光脉冲飞行一个来回的时间超过了两次连续发射脉冲的间隔,传感器在发射第二个光脉冲后才接收到第一个光脉冲的反射波,就会把该反射波错认为是第二个光脉冲的近距离反射波,这时就会出现相位模糊现象,如Case 2。相位模糊现象会限制ToF的有效探测距离。在测量远距离物体时,可以适当降低测量频率、增加两次测量之间的距离、减少测量次数。但是,减少测量次数会同时降低测量精度,相当于是用精度换取有效探测距离。

在这里插入图片描述

这种方法对物理器件性能要求很高,控制开关的时钟精度要求非常高,要产生高精度、高重复性的高频脉冲,照射单元和ToF传感器均需要高速信号的控制,才能实现高精度的深度测量。

2.2 连续波调制法

在连续波调制法中,一般采用连续正弦波调制,通过光源不断发射调制过的红外激光,光束经被测物体表面反射后,有一部分光线按原路径返回并被探测器接收,由于发射、接收信号之间存在相位差,因此可以通过相位差检测技术间接地计算光的飞行时间差。

在这里插入图片描述

图4.连续波调制法测距原理图

与脉冲波调制不同的是,连续波调制法每次测量获取多个样本,每个样本之间相位差为90°,共采4个样本,分别是C1-C4,大部分的ToF都是使用这种方法,即4相法,这样在数字运算中比较容易实现。

在这里插入图片描述

假设发射的信号 s ( t ) s(t) s(t)的振幅是 A e A_e Ae,正弦波调制的频率是 f f f,经过 Δ t \Delta{t} Δt时间延迟之后收到的正弦信号为 r ( t ) r(t) r(t),光信号能量衰减后的振幅为 A r A_r Ar,由环境光、系统内部偏移引起的偏移为 B r B_r Br。连续波深度传感器发送的正弦波信号可以表示为:
s ( t ) = A e ( 1 + s i n ( 2 π f t ) ) s(t)=A_e(1+sin(2\pi{ft})) s(t)=Ae(1+sin(2πft))
信号 s ( t ) s(t) s(t)遇到目标物体会发生反射,有一部分光线沿原路径返回并被传感器所接收,会有一个相位延迟 Δ φ \Delta{\varphi} Δφ,因此反射后的信号可表示为:
r ( t ) = A r ( 1 + s i n ( 2 π f t − Δ φ ) ) + B r r(t)=A_r(1+sin(2\pi{ft}-\Delta{\varphi}))+B_r r(t)=Ar(1+sin(2πftΔφ))+Br
4次采样(C1-C4)时间间隔T/4,即采样时间分别为0,1/4T,1/2T,3/4T。所以4次采样所接收的信号可以表示为:
r i = r ( t ) = A r s i n ( 2 π f t − Δ φ ⏟ i π 2 − Δ φ ) + ( A r + B r ) , i = 0 , 1 , 2 , 3 r_i=r(t)=A_rsin(\underbrace{2\pi{ft}-\Delta{\varphi}}_{\frac{i\pi}{2}-\Delta{\varphi}})+(A_r+B_r),i=0,1,2,3 ri=r(t)=Arsin(2Δφ 2πftΔφ)+(Ar+Br),i=0,1,2,3
从而可以得到下列方程式:
{ r 2 − r 0 = A r s i n ( π − Δ φ ) − A r s i n ( − Δ φ ) = 2 A r s i n Δ φ r 1 − r 3 = A r s i n ( π 2 − Δ φ ) − A r s i n ( 3 π 2 − Δ φ ) = 2 A r c o s Δ φ \begin{cases} r_2-r_0=A_rsin(\pi-\Delta{\varphi})-A_rsin(-\Delta{\varphi})=2A_rsin\Delta{\varphi} \\ r_1-r_3=A_rsin(\frac{\pi}{2}-\Delta{\varphi})-A_rsin(\frac{3\pi}{2}-\Delta{\varphi})=2A_rcos\Delta{\varphi} \end{cases} {r2r0=Arsin(πΔφ)Arsin(Δφ)=2ArsinΔφr1r3=Arsin(2πΔφ)Arsin(23πΔφ)=2ArcosΔφ
从而计算出 Δ φ \Delta{\varphi} Δφ的值:
Δ φ = a r c t a n ( r 2 − r 0 r 1 − r 3 ) = a r c t a n ( Q 2 − Q 1 Q 3 − Q 4 ) \Delta{\varphi}=arctan\left(\frac{r_2-r_0}{r_1-r_3}\right)=arctan\left(\frac{Q_2-Q_1}{Q_3-Q_4}\right) Δφ=arctan(r1r3r2r0)=arctan(Q3Q4Q2Q1)
可以看出,电荷量 Q 3 − Q 4 Q_3-Q_4 Q3Q4 Q 2 − Q 1 Q_2-Q_1 Q2Q1可以抵消由测量器件或者环境光而引起的固定偏差,这二者的比值则可以消除距离测量中增益常量的影响,比如系统中的放大或衰减、或者反射的强度。由此也能计算得到测量距离:
d = c × Δ t 2 = c × Δ φ 4 π f d=\frac{c\times\Delta{t}}{2}=\frac{c\times{\Delta{\varphi}}}{4\pi{f}} d=2c×Δt=4πfc×Δφ
信号衰减后的振幅 A r A_r Ar和信号强度偏移 B r B_r Br可得:
{ A r = ( Q 3 − Q 4 ) 2 + ( Q 2 − Q 1 ) 2 2 B r = Q 1 + Q 2 + Q 3 + Q 4 4 − A r \begin{cases} A_r=\frac{\sqrt{(Q_3-Q_4)^2+(Q_2-Q_1)^2}}{2} \\ B_r=\frac{Q_1+Q_2+Q_3+Q_4}{4}-A_r \end{cases} {Ar=2(Q3Q4)2+(Q2Q1)2 Br=4Q1+Q2+Q3+Q4Ar

反射波振幅 A r A_r Ar与偏移 B r B_r Br会影响到深度测量精度,深度值方差可由下式进行估计:
σ = c 4 2 π f × A r + B r c d × A r \sigma=\frac{c}{4\sqrt{2}\pi{f}}\times{\frac{\sqrt{A_r+B_r}}{c_d\times{A_r}}} σ=42 πfc×cd×ArAr+Br
调制常量为 c d c_d cd,其表示ToF传感器分离和收集光电信号的好坏程度。由该方差公式可知,大幅度 A r A_r Ar、高调制频率 f f f和高的调制对比度(即低的 B r B_r Br,调制对比度指调制信号的最大振幅和最小振幅之间的比率, B r B_r Br可以影响调制对比度,环境光会增加背景噪声,从而降低调制对比度;系统内部偏移也会导致信号的失真,降低调制对比度,因此ToF系统需要适当的信号处理和校准来抵消这些影响)可以增加测量精度。此外,在高频的情况下,由于芯片硅半导体的特性,会导致调制对比度衰减。连续波调制的测量是基于相位的,每 2 π 2\pi 2π重复一次,距离会产生锯齿(相位模糊现象),而产生锯齿的距离被称为模糊距离,可用下面公式表示:
d a m b = c 2 f d_{amb}=\frac{c}{2f} damb=2fc
所以最大的有效观测距离就是 d a m b d_{amb} damb,若需要增加有效观测距离,和脉冲调制法一样的,需要减小调制的频率,同样这样会导致测量精度下降。但是,连续波ToF可以利用双频解决相位模糊现象,利用两个不同频率的测量数据去求解相位模糊度,从而恢复正确深度值。借助双频测量可以同时实现高精度测量和高有效探测距离

相对于脉冲波调制方案,连续波调制法要求更低而测量精度更高,因而大多数采用连续波调制法。


以上资料来自ToF与立体视觉技术相结合的三维重建方法研究_知网

这篇关于ToF原理记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1057551

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操