书接前文。【关于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