人类之所以能够驾驭这个世界,是因为具有三维(3D)感知能力。而这个能力也可以赋予给我们的机器人。但人类感知三维的方式也许并不适用于机器。要引导机器人运用深度传感视觉,需要考虑三个关键方法:立体视觉、结构光和飞行时间(ToF)。
机器人系统已经存在了几十年,但直到最近它们大多都是盲目工作。只需为机器人配备接触传感器、接近传感器和位置传感器,它们就可以优雅地进行精心编排的、无休止的重复动作,可以操纵重型材料,执行精密装配,或焊接复杂的结构。但是,它们工作的成功与否,取决于其环境的精确性、必用材料的精确放置,以及对其运动轨迹的仔细绘制和编程。
然而,这种情况正在发生变化。机器视觉和视觉智能方面的研究、半导体制造的进步,以及图像传感器在手机市场上的应用,简化了视觉系统的开发并降低了其成本,使其成为了一种扩展机器人功能的越来越具成本效益的选择。借助视觉(特别是3D视觉)的引导,机器人将变得更能够与自由世界交互,工作起来更灵活,也更容易适应新的任务。
然而,特定的机器人所需的视觉特性高度取决于应用。例如,对于那些必须通过视觉引导在杂乱的仓库里移动的机器人来说,它们需要对动态环境进行远程感知,但只需要提供适当的精度。固定机器人的需求则可能完全不同,例如有些机器人用来将箱子里所混合的零件取出,并按相同类型进行堆放,这可能只需要在有限的范围内提供高精度的视觉。执行精密装配的机器人则又有另一套需求。因此,要确定采用哪一种3D视觉方法,首先要对机器“观看”的工作方式有所理解。
由于和人类观看的方式相似,最容易理解的3D方法是立体视觉。这是一种三角测量法,即用相隔一定距离的摄像头去捕获两个(或多个)图像(或用一个摄像头在图像之间移动),然后通过比较来确定摄像头视场中物体的距离。将摄像头分离会产生视差,这样,较近物体相对远处背景的对齐就会不同——物体越接近摄像头,视差越大。
图1给出了一个简单的示例。图中的两个摄像头沿平行轴指向相同方向,其传感器对齐并相隔基线距离B,每个摄像头都会捕获一个3D空间(X,Y,Z)的点(P)图像。捕获的图像中,该点在其2D图像平面上的位置将会不同(uL和uR)。几何上,该位置相当于从P点向摄像头引一条射线,穿过一个垂直于摄像头光轴(ZA)、距离等于摄像头镜头焦距(f)的平面所得的交点。
图1:简单的立体视觉几何图。
如果取每个摄像头的ZA与该平面相交的点作为每个图像2D坐标系的原点,那么计算两个成像点之间的距离,就可以获得该点的视差(d)。然后,就可以很容易地计算出该点到图像平面的距离(深度):
深度 = f * B/d
但是通常现实世界中的系统不是那么容易对齐的。图2给出了一种更通用的设置,其中,每个摄像头都有自己的坐标系,它们以其光轴方向和图像传感器像素栅格的旋转方向来界定。确定图像点视差要比简单的距离计算更复杂,这涉及到坐标变换和几何校正,但三角测量原理是相同的。
图2:现实世界中的立体视觉几何图。
幸运的是,有大量的商用和开源软件可以处理这些计算。还有一些软件可使用摄像头栅格图像来确定所有必要的坐标变换,这样开发人员就不需要精确地确定摄像头方向。因此,计算空间中单个点的深度信息就变成了机器视觉系统中相对简单的一项运算。
但是,这当中仍然存在许多其他的计算挑战。其中最重要的一个是让系统确定不同摄像头图像中是哪个点对应于空间中的相同物理点。这个确定过程可能涉及极为复杂的相关过程,需要将来自一幅图像的一小组像素与构成另一幅图像的所有组像素进行比较来确定哪些组匹配,然后对构成第一幅图像的所有小像素组重复该过程。
第二种3D视觉方法——结构光——可简化上面这个相关过程,设计人员应当留意这个优势。这种方法在三角测量工作中用投光机取代了其中一个摄像头。投光机生成一个已知的光斑,然后系统将摄像头图像与这个已知光斑进行比较。所捕获图像中的结构光光斑会因为被测对象上的每个点深度不同而产生失真(图3)。在这个例子中,可以使用基线和两条射线之间夹角计算出P点的深度(R):
R = B (sin α)/sin (α + θ)
图3:结构光系统根据已知光斑产生的反射光失真来计算深度。
目前业界已针对场景的深度信息提取开发出各种各样的结构光方案(图4),但其中有许多针对的是物体扫描而不是机器人运动控制。其中一些结构光方案产生图像序列所使用的光斑包含若干条纹,其宽度从一个图像到下一个图像依次减半(二进制编码)。还有类似采用格雷码或相移条纹的连续光斑也有使用。要利用单个图像捕获深度信息,可以利用连续变化的颜色编码图案,或对条纹图案编制索引,即每个条纹都与其他条纹不同。使用激光器或微镜光控制器可以很容易地创建这样的图案,而ams、Finisar和TI等公司也都专门针对结构光光源制造器件和控制器。
最近越来越流行的一种结构光方法是以伪随机图案来排列编码形状或二进制点所组成的栅格。系统使用人眼看不见的红外(IR)光来投射这种栅格图案,并且因为栅格是静止的,所以可以使用简单的全息光栅来创建图案。使用这种方法的商用深度传感摄像头系统现已上市。(请参见EDN姊妹刊物Electronic Products上发表的《Designer's guide to 3D cameras》一文)。
红外光的使用在视觉引导机器人应用中具有两个明显优势。首先,它可以使视觉系统与人类一起工作,而不会因结构光投射而为人类带来的视觉混乱。其次,使用红外光还可简化将结构光与环境光分离的工作。
图4:3D结构光的种类。(来源:OSA,《Structured-light 3D surface imaging: A tutorial》)
第三种3D视觉方法——飞行时间(ToF)——完全没有使用三角测量法。ToF 3D成像是直接测量深度,也就是确定光从光源到达环境中的物体然后返回所用的时间。在这方面,ToF类似于激光雷达(LIDAR)。然而,ToF方法不是用窄激光束扫描环境来构建深度图像,而是针对整个视场同时确定距离。半导体技术在不断进步,如今的传感器设计已经可以实现每个像素都可以向控制电子逻辑提供自己的信号,进而提取出计时信息。
ToF的一个挑战在于能够在有意义的范围内实现精确计时,从而获得精确的深度信息。光在空气中的传播速度约为1ft/ns(c),因此光脉冲必须使用数GHz时钟,才能分辨小于1ft的尺寸。类似地,传感器信号必须以亚纳秒精度进行测量。但是,这么短的脉冲所含光子数量有限,也即传感器接收到的光子数太少,从而导致信噪比(SNR)不佳。
尽管如此,仍有传感器使用直接时间测量法。Teledyne e2v的1.3MP BORA CMOS图像传感器提供距离选通成像,其全局快门开关可使传感器仅在很短的一段时间内针对特定深度平面收集光子。通过结合多次光照的结果,该传感器可以建立更强的信号用于处理。若在整个系统范围内扫描快门计时,该系统就可以在其深度范围内构建完整的深度图。
然而,更常见的一种方法是检测发射信号与反射信号之间的相位差来获取深度信息。图5给出了这种方法,反映了反射信号与方波发射脉冲(也可以是其他调制波)之间的关系。物距越大,关联信号越短,并且信号在多个周期内的积分值越低。由于对信号强度进行积分测量起来会比瞬时计时更加精确,因此这种方法的深度测量精度会比简单计算信号返回时间更高。目前,Infineon、pmd和TI等公司都提供这类ToF传感器,其中一些更具有可执行所有深度计算的内置电路。
图5:ToF通过比较反射信号与发射信号的时序来直接测量距离。
不幸的是,这两种方法均存在深度混叠的问题。ToF方案中,光源的调制频率(f)决定了最大不模糊距离,为R = c/2f。假如光脉冲速率是100MHz,则传感器可以清楚分辨的最大范围是5ft(10ns往返)。如果一个物体在6ft以外,其相关信号与1ft外的物体别无二致。也就是说,6ft远的物体对脉冲N的反射光线,其到达传感器的时间与1ft远的物体对脉冲N+1的反射相同。
降低调制频率可增大不模糊距离,但也有不利后果。释放的光子数较少,会使信噪比变差,或需要增加积分时间。这两种结果都不可取。
有一种解决方案是通过在光源中混合两种调制频率,来实现信号的去混叠。然后,传感器信号处理可以在对信号进行积分之前分离频率。其总返回信号较高,可提供良好的信噪比;不同的频率所混叠的距离不同,有助于解决距离模糊问题。该方案的最大模糊距离为光速除以两个频率最大公分母的两倍。
R = c/2*GCD(f1, f2)
上述3D视觉方法各有优劣,开发人员应根据其应用需求进行评估和选择;了解各种3D视觉技术的含义对于选择正确的方法也至关重要。例如,立体视觉系统可以使用传统的摄像头,并且无需使用集成式光源,所以这种方法成本低廉并且更容易集成到设计中。但是立体视觉系统的深度精度取决于其在多幅图像中找到对应点所需的计算性能,而且物体距离越远,深度分辨率越差。立体视觉系统在应对光滑表面和重复图案上也存在问题,这两者都使找到对应点的任务变得更复杂。
另一方面,结构光方法也使用传统摄像头,但只需要一个。其不需要有很强的计算性能,因此有助于降低成本。但其需要使用集成式光源,其强度会影响工作距离。在环境光可控或被滤除的情况下,其效果最佳,例如在封闭空间中。
ToF系统的计算强度最低,由于摄像头通常直接向系统主机提供深度信息,因此大大降低了计算需求。然而,与结构光一样,系统需要使用集成式光源,其功率会影响系统的距离,环境光不受控也会导致问题。此外,光源的调制频率也会影响距离。
无论哪种方法最适合您的应用,为机器人配备视觉引导正变得越来越容易。现货摄像头系统和视觉软件(商用和开源)也使事情变得更简单。此外,为下一代智能手机提供3D视觉功能的研发,有望进一步降低3D视觉的成本和复杂性。
本文为《电子技术设计》2019年5月刊杂志文章。