飞行时间技术TOF

一. 光速的测定

TOF技术是将时间维度的信息转换为空间维度信息的方法,其本质原理是我们在小学时就学过这样的公式: 距离 = 速度 * 时间

所以只要测定出光的运动时间,就能测出其飞行距离。

自然界有很多动物天生就具备类似的能力,最典型的就是我们熟知的蝙蝠和海豚。它们都能够通过发出特定频率的声波并捕捉回声,进而判断前方物体的距离。

这些动物利用的是声速,就不得不提到人类测定光速的历史。


伽利略是17世纪初第一个尝试测量光速的人。1638年,伽利略和一名助手各自站在不同的山顶上,他们之间的距离是已知的,计划是让伽利略打开一盏灯的快门,然后让他的助手一看到伽利略的光就打开灯的快门。

伽利略计划用山顶和他的脉搏之间的距离作为计时器来测量光速。他和他的助手用不同的距离尝试了这一方法,但无论他们相距多远,他都无法测量出光行驶的时间长短。很显然,他的实验失败了,正如伽利略得出的结论所说,光速实在是太快了:

I have not been able to ascertain with certainty whether the appearance of the opposite light was instantaneous or not; but if not instantaneous it is extraordinarily rapid – I should call it momentary
真正成果的测定光速的实验是1849年由法国物理学家Hippolyte Fizeau完成的,他的实验很精巧:系统由脉冲光源和8.63公里外的反射镜,以及光源前的可调速齿轮组成。Fizeau仔细调整齿轮的转速,直到穿过齿轮的光被反射镜反射回来的光刚好被下一个齿片所挡住。根据齿轮的转速,以及光源/观察者和反射镜之间的已知距离,就可以求得光速,见下面图片的示意。虽然这个结果还不是很准确,但却是人类测定光速的一大步。

二. 各种TOF技术

直接脉冲TOF

我们现在已经知道了,光在真空中的速度是299792458米/秒。利用这个信息,以及光飞行的时间,就可以求出光源和目标之间的距离。1968年,Walter Koechner展示了如何利用大功率注入激光二极管来进行距离探测。

他的系统直接利用发射光脉冲和接收到的光脉冲之间的时延来计算距离


基于这种原理的TOF成像设备在很多地方得到了应用,比较出名的就是Google的自动驾驶汽车项目上的车载激光雷达。

然而,由于需要精确的测量飞行时间,发射脉冲必须在非常短的时间(皮秒级),因此激光脉冲光源必须具有很高的功率(百万焦耳级)。而相应的,传感器也必须具有超高的时间分辨率(皮秒级)和很高的动态范围。这显然使得Koechner的系统非常昂贵。 看他的简历,1965年,他加入新泽西州蒙茅斯堡的美国陆军电子司令部,担任研究物理学家。我想正是如此他才拥有很多资源去研究如此昂贵的系统吧。

在直接脉冲TOF这条道路上,技术也是在不断的发展的,比如苹果在最新的iPad Pro上所加载的dTOF系统,就利用了单光子雪崩二极管的特性,使得用非常低的功耗就可以实现对距离的精确测定。

脉冲间接TOF

在wikipedia上你可以查到另外一种间接利用脉冲光源的方法

如上图所示,光源发出固定频率的脉冲,传感器步骤到目标反射回来的光。与此同时控制传感器开始曝光。由于传输的时延,会导致传感器中真正接收到的光子量只有q1这一部分,q2这一部分由于关闭曝光没有接收到。如果有方法能够接收到q2这一部分的光子量,那么就可以计算出返回的脉冲相对于发射的脉冲的时延,进而知道光运动的距离。

如果已知脉冲的发射时间是t,那么可以用 t * (q2/q1+q2)得到这个延时,那么距离d就好求了:

d = c * t * q2 / 2(q1+q2)

那么获得 [公式] 和 [公式] 呢?下面是一个示意图。你可以看到,一个像素使用两个开关(G1和G2)和两个存储元件(S1和S2)。开关由与光脉冲具有相同时长的脉冲控制,其中开关G2的控制信号被精确控制,使得刚好延迟了1个脉冲宽度。这样在S1中仅通过G1对光电信号的一部分进行采样,而将另一部分存储在S2中。根据距离的不同,S1和S2之间的比率会发生变化,如图所示。单个光脉冲导致的S1和S2的差异很微弱,但当多个发射-接收的信号积累起来后,就可以得到显著的结果。这也就对应了上面公式中的 q1和 q2。

下图是距离和信号S1、S2的关系:

连续波调制TOF(Continous Wave TOF)

上面的利用脉冲光的方法原理相对简单,但由于每个脉冲的进光量很少,需要积分很多周期才能得到较好的信噪比。所以时间分辨率较低,总体精度也较低。

另外一种间接TOF的方法则是采用了连续的正弦或余弦波对信号进行调制,利用发射光和接受光之间的相位差来计算出光的飞行时间,从而得到光源和目标之间的距离。



这里面有三个未知数,你可能觉得最直接的方法是在接收端进行三次采样来求解:

这又会遇到信噪比很低的问题,而且对传感器的采样速度要求很高,所以实际上非常难以实现。

更好的方式是计算接收光L和传感器曝光函数E之间的互相关值I,从中计算出我们需要的值,这里要注意的是在曝光函数的作用下,这个互相关值恰好是传感器的实际信号强度。


经过3次不同时间的曝光,得到三个互相关值,从而可以求解从我们所需的三个值,尤其是相位差,它恰好对应着最终需要的深度值。

除了这种计算方法,也可以采用发射信号与接收信号之间的互相关信号来完成相位差的计算,比如定义:

三. TOF技术的应用

TOF技术自出现以来就被应用到许许多多领域,限于篇幅,这里只举几个。
我们最熟知的,应该就是深度感知了。在自动驾驶领域,它被用在车载激光雷达上

在消费娱乐领域,则有经典的微软Kinect:

在计算摄影的一个领域非视线成像(Non-line of sight imaging),TOF也有广泛的应用:
对遮挡住的隐藏物体成像:

飞行时间技术TOF的更多相关文章

  1. 【计算机视觉】深度相机(一)--TOF总结

    http://www.voidcn.com/blog/lg1259156776/article/p-6302915.html 1.1 TOF初探 TOF是Time of flight的简写,直译为飞行 ...

  2. TOF 初探

    TOF 简介 TOF是Time of flight的简写,直译为飞行时间的意思.所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得 ...

  3. TOF相机基本知识

    TOF是Time of flight的简写,直译为飞行时间的意思.所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后利用传感器接收从物体返回的光,通过探测光脉冲的飞行时间来得到目标物的距离.TO ...

  4. 【计算机视觉】time of flight (TOF)

    目录(?)[-] 11 TOF初探 12 TOF研究机构 13 TOF之应用领域 14 TOF相机特点 2 深度相机比较 1 MESA系列介绍 2 PMD Tec系列 3 NATAL 4 primeS ...

  5. 4D雷达成像技术

    4D雷达成像技术 当我们谈及3D捕捉时,总是先想到光学传感器.当我们讨论在第四维度(时间)讨论视觉数据时,倾向于考虑场景数据调度.这些是我们多年来关注激光雷达(LiDAR)和摄影测量,以及用户针对缓慢 ...

  6. ST为飞行时间传感器增加了多目标测距

    ST为飞行时间传感器增加了多目标测距 ST adds multi-object ranging to time-of-flight sensors STMicroelectronics已经扩展了其Fl ...

  7. SLAM+语音机器人DIY系列:(三)感知与大脑——1.ydlidar-x4激光雷达

    摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...

  8. 自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR)

    自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR) 据麦姆斯咨询报道,2032年全球范围内自动驾驶汽车的产量将高达2310万辆,未来该市场的复合年增长率(CAGR)高达58%.届时 ...

  9. CEVA引入新的可配置传感器集线器DSP架构

    CEVA引入新的可配置传感器集线器DSP架构 CEVA introduces new configurable sensor hub DSP architecture 在一个将多个传感器设计成几乎所有 ...

  10. 2020厦门大学综述翻译:3D点云深度学习(Remote Sensiong期刊)

    目录 摘要 1.引言: 2.点云深度学习的挑战 3.基于结构化网格的学习 3.1 基于体素 3.2 基于多视图 3.3 高维晶格 4.直接在点云上进行的深度学习 4.1 PointNet 4.2 局部 ...

随机推荐

  1. 磊磊零基础打卡算法:day16 c++ Trie树

    5.19 Trie树: 用处:快速的查找和高效存储字符串集合的数据结构. 类似如此的查找,存储 其简单的两个操作:插入和删除 插入: void insert(char str[]) { int p; ...

  2. 深入理解css 笔记(完)

    一个网站,从看起来还可以,到看起来非常棒,差别在于细节.在实现了页面里 某个组件的布局并写完样式之后,不要急着继续,有意识地训练自己,以挑剔的眼光审视刚刚完成的代码.如果增加或者减少一点内边距是不是看 ...

  3. Undelivered Mail Returned to Sender

    电子邮件是使用电子邮件地址application@sample.com从Application发送的. 出于业务原因我们无法在此应用程序中更新/删除无效的外部电子邮件地址,因此响应出站电子邮件会生成许 ...

  4. 如何加密一个sheel脚本!

    脚本写完后,如果要发布给其它人使用的话,可能会因安全原因而受阻,特别是脚本中包含密码等原因,而对脚本加密则可以解决此问题,本文提供了CentOS7/8环境下,加密shell脚本需要安装的程序和方法. ...

  5. python练习--1

    ID_CARD = input("Input your ID Card: ") length = len(ID_CARD) if length < 5: NEW_ID_CAR ...

  6. [jointjs] 端口(port)

    关于端口,我也不知道怎么解释,就用joint官网的这句话先打个头. Many diagramming applications deal with the idea of elements with ...

  7. table control的最小高度

    标准的表维护和不通过向导建的table control最小显示行是2. 通过向导建立的table control最小显示行是4. 前台没有任何能看出来的配置差异. 有个隐藏的最小显示行,只有把屏幕下来 ...

  8. SpringBoot笔记--文件配置加载顺序+整合其他框架

    内部文件配置加载顺序 外部文件配置加载顺序 jar包配置 整合Junit 若是业务管理类和测试类在同一个包下面,那么这句话, 可以不加括号,只写注解名称 否则,就必须指定到包下面,不然会报错 整合Re ...

  9. 【深入浅出 Yarn 架构与实现】5-2 Yarn 三种调度器

    本篇文章将深入介绍 Yarn 三种调度器.Yarn 本身作为资源管理和调度服务,其中的资源调度模块更是重中之重.下面将介绍 Yarn 中实现的调度器功能,以及内部执行逻辑. 一.简介 Yarn 最主要 ...

  10. Module not found: Error: Can't resolve 'pubsub-js'

    包未安装或者包版本过新,再者安装位置有误. 我安装各种工具库或者其他包时有个 -g 到全局的习惯,觉得装到全局时在文件夹中何时何处都可以用. 在子孙文件夹中引入时依赖会在子孙和文件根目录的node_m ...