关于ToF 番二


书接前文。【关于ToF 番一】

上回说到ToF的基本概念, 即LED/LD对着场景发射光线,如果场景中有物体反射光线回来,那么我们测定这道光线从发射到被接收的时间间隔, 就能计算出距该离物体的长度为 1/2 * c * t, c是光速。

举个例子, 如果光线的旅行时间测得为 5ns, 取光速为30万千米每秒, 那么光线总的行走距离就是 300000000 * 0.000000005 = 1.5米, 因为是一来一回再除以二, 就知道有个物体距离接收器0.75米(光源和接收器在同一位置)


对于一个直接ToF系统来说,精度和误差均只依赖于对时间的测量精度。

当然,由于目前的技术限制,使用直接ToF的成本相对较高,单个diode的体积也很大,一般只用于单点或者几个点的方案。对于阵列式的图像ToF系统,使用的是间接ToF方式。 即不直接测量光线往返时间, 而是发射连续的调制光(例如正玄波), 通过测量相位偏移的方式间接得出ToF。

初始发射时从正玄波的0度角开始连续发射, 然后接收到光线时, 通过鉴相算法, 得到相位,通过这个相位差以及调制光的频率, 就能算出光线的飞行时间。 真TM高级! 不过这也引入了一个雷达里的常用术语:maximum unambiguous range。 具体的算法以及处理,本文暂且按下不表,日后分解,下同。


虽然降低了难度, 但是也引入更多噪音。 因为测量相移受到诸多因素的影响,例如系统时钟的ppm,传感器温度,物体反射强度,背景光线强度等。

这回我们就简单说说ToF的工作、设计流程。

从整个系统看, 首先要考虑的是测距范围问题。 因为光线强度的减弱是距离倒数的平方关系。 例如:期待的测距范围是 5cm ~ 5m, 假如在5cm时的照明输出强度是1的话, 满足5m处同样条件的输出强度得是1000。当然合理的设计光路和LED位置布局, 可以在一定程度上减少功率输出的需求。

而如果被侧物体中有大量黑体,噗… 是对红外反射率较低的黑色物体, 那么对发射功率的要求又会提高。

ToF阵列里的每个pixel, 都可以计算出它的振幅质量, 如果过低(欠曝)或者过高(过曝)都无法解析出距离信息, 需要在下一个周期中,进行曝光调整。

如果需要更高的动态范围, 可以使用各类HDR技术,例如多帧曝光、行间切换曝光等。

对于曝光时间的选择,还有另外一个问题需要考量,曝光时间越长,就会有越多的环境光被吸收, 这会伤害整体精度(环境光的变化?)。 同时过长的曝光时间, 也会造成帧率降低。 一般曝光时间不要超过1ms,或者可以使用带通滤光片过滤掉调制光频率以外的光线。

一个典型的ToF计算流程包括:

  • 多次以不同时长曝光的ToF数据采样(用于鉴相,取得距离数据)
  • 一次最小曝光时间的灰度数据采集(用于过滤环境光线)
  • 周期性的传感器片上温度数据读取(用于温度补偿)
  • 根据算法取出有效数据(过滤掉过曝太多、欠曝过多或者振幅数值过小的数据集)
  • 温度补偿算法
  • 背景光补偿算法
  • 系统常量校准算法

to be continued


文章作者: chopin1998@gmail.com
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 chopin1998@gmail.com !
评论
 上一篇
关于ToF 番三 关于ToF 番三
由于各种事物影响, ToF项目被暂缓了, 趁着公司再次搬家的这段时间,重新捡起来。 先是把代码又理了一遍,抽空学习了一下numpy, 搞一点儿opencv,tensorflow和pytorch,把第二编辑器换成了VSCode(顺便看了
2020-03-22
下一篇 
关于ToF 番一 关于ToF 番一
曾经,通过CCD/CMOS等图像阵列传感器以及光学镜头,可以获取一帧帧平面2D的图像。现在,日新月异的传感器技术以及强大的移动计算能力,让计算机获得深度感知能力的可能性也越来越多。当获得一帧3D深度图景时,会收到一幅2D深度阵列, 其中的每
2020-03-22
  目录