空间有限且要求功耗较低的应用,通常是嵌入式计算机系统发挥作用的舞台。典型的例子是移动设备,从工厂中的移动测试设备到牙科扫描仪,其中运行的都是嵌入式计算机系统。嵌入式视觉也是机器人的一个极好解决方案,尤其是将相机集成到机器人的手臂上时。

在机器视觉领域,典型的相机集成工作是通过GigE或USB接口实现的,这可以说是一种将相机连接到PC(或IPC)的即插即用解决方案。与制造商的软件开发工具包(SDK)一起使用,可以轻松访问相机,这一工作原理也可以迁移到嵌入式系统中。

图1:(a)传统的基于PC的通用机器视觉系统;(b)针对特定解决方案的嵌入式机器视觉或图像处理系统的相机模块组件,其在性价比方面更优化。

利用单板计算机(SBC),基本的集成原理依然不变。低成本且易于获得的单板计算机,在一块SoC电路板上包含了计算机的所有部分——RAM、存储器插槽、IO端口(USB 3.0、Gig-E等)。

常用的单板机,如Raspberry Pi或Odroid,都具有兼容的接口(USB /以太网)。还有一些行业公认的来自Toradex或研华等公司的单板机,均提供这些标准接口。

图2:许多相机制造商提供SDK版本,允许用户将相机集成到ARM平台上,就像将相机集成到Windows PC上一样。

主要区别在于这些单板机所配备的处理器类型。虽然已经有单板机提供基于x86架构的处理器,但是目前大多数单板机上的处理单元使用的都是ARM处理器,因为它们的功耗更低。

越来越多的相机制造商也提供在ARM平台上工作的软件开发套件(SDK)版本,以便用户可以像在Windows PC中集成相机一样,以熟悉的方式将相机集成到ARM平台上。

在最好的情况下,SDK为Windows PC和ARM这两种平台提供相同的功能和API(应用程序可编程接口),甚至软件应用代码的一部分可以重用。因此,相比于标准的基于PC的视觉系统,嵌入式视觉系统的相机集成工作更为简单。

当需要剥离更多的冗余处理技术时,针对某些特定应用的嵌入式系统,可以做到更精简的水平。这就是为什么许多系统是基于模块系统的(SoM)。这些非常紧凑的板卡式电脑模块只包含一个处理器(准确地说,通常是片上系统SoC)、微控制器、存储器和其他基本元件。

这种SoM需要安装在载板上,载板上具有为特定接口准备的插口。有了这样一个相对便宜的载板,系统可以很容易地针对特定应用和系统要求进行个性化设计,因为SoM是现成的产品,所以可以保证整个系统设置的低成本。

通常,这种设置也可以配备标准接口连接器(如USB)。在这种情况下,即插即用的好处与单板机或是基于PC的机器视觉系统是一样的。但是,这往往不符合非常具体和精简的系统设置的想法。同样,由于空间、重量或功耗方面的要求,USB接口可能并不合适,相反,会使用相机到处理器之间更直接的连接方式。

此外,许多嵌入式视觉系统是基于(或包括)FPGA(现场可编程门阵列)模块的。这些器件对于立体视觉产品或面部检测应用中所需要的计算工作是理想的。

所有这些都是为什么可能需要将相机直接连接到FPGA或SoC的原因。

特定图像数据传输

直接将相机连接到SoC用于图像数据传输,可以通过基于LVDS的连接或MIPI CSI2标准实现。这两种方法在硬件方面都没有明确的标准化。这意味着没有指定的连接器,甚至没有规划电缆内的通道数量。因此,为了连接特定的相机,通常需要在载板上设计匹配的连接器,并且不是标准形式。

MIPI CSI2是来自移动设备行业的标准,用于描述信号传输和软件协议标准。很多SoC具有CSI接口,并且有可用于选定的相机模块和专用SoC的驱动程序。但是,它们并不以统一工作方式,也没有通用的驱动程序。因此,可能需要单独修改驱动程序,并且与驱动程序的数据连接,可能需要在应用程序软件侧进一步修改,以实现图像数据的收集。因此,CSI2并不是一个安装后就可立即使用的解决方案。

虽然LVDS是高速数据传输广泛使用的连接方式,具有明确定义的信号传输原理,但LVDS中也没有用于图像数据传输的标准化软件协议。因此,也没有现有的标准驱动程序。一些制造商提供补充系统,如基于专有协议的具有LVDS输出的相机、以及具有相应适配驱动程序的处理板,它们能够直接协同工作。这种方式的优点是能实现一个易于集成的完整解决方案,但是用户在硬件使用方面会受到一定的限制。

其他制造商提供开放的基于LVDS的相机输出,其对于任何硬件集成都是免费的。在这种情况下,必须要创建一个驱动程序。实际上,这个信号处理可以在FPGA上执行。这种基于FPGA的图像抓取算法可以从头开始编程,但是也有一些工具可用于减少集成工作量。

例如,在这种FPGA上使用预开发的IP核。Basler公司具有LVDS接口的板级相机dart,提供的开发套件中就包括一个带有参考实现(FPGA编程)的处理板,以为集成视觉设备提供直接样本。

相机配置

这些板对板连接的另一个方面是相机配置。控制信号可以通过各种总线系统(CAN、SPI或I²C)在SoC和相机之间交换。到目前为止,业界还没有针对这个功能设置标准。目前哪些成像参数可以控制、以及如何控制,完全取决于相机制造商;即使支持或不支持GenICam的决定,也取决于制造商。但好消息是,所有这些总线系统都得到大多数SoC的支持。因此,使用适当的驱动程序,软件可以直接访问相机进行配置和更改成像参数。

一个开放的软件协议对于访问相机配置也很重要。Basler通过其pylon SDK中的I²C(作为的BCON的一部分实现LVDS接口)支持相机访问,从而提供简化配置编程的标准化API。

对于某些应用而言,嵌入式视觉可能是一个有趣的解决方案;一些基于GigE或USB的应用,可以使用单板计算机开发。由于这些类型的硬件很受欢迎,并且在价格、性能和质量标准(消费者和企业)方面选择范围较广,这使得嵌入式视觉成了很多情况下的理想选择。