常见问题#
CMUcam1 和 CMUcam2 之间有哪些差异?#
简介#
CMUcam2 以增强的形式包含了 CMUcam1 的所有功能,还有更多。下面我们简要介绍新功能和差异。您可能还想看看关于如何决定购买 CMUcam1 还是 CMUcam2 这一问题的答案。
硬件概述#
有两个重要的主要硬件差异,CMUcam2 使用与 CMUcam1 不同的处理器,并且 CMUcam2 集成了帧缓冲芯片,而 CMUcam1 则没有。
CMUcam2 使用 SX52 处理器,而 CMUcam1 使用 SX28 处理器,两者都来自 Ubicom 的 SX 处理器系列。在这两种情况下,处理器都以 75 MHz 运行,因此处理器速度或计算能力没有差异。SX52 处理器的优点是它拥有更多的 RAM(262 对 136 字节)、更多的 ROM(4096 对 2048 字)和更多的 I/O 引脚。更多的 RAM 和 ROM 意味着我们可以编写更复杂的代码,从而使我们能够在 CMUcam2 中集成更多功能。更多的 I/O 引脚数量意味着我们有更多引脚剩余用于其他功能——比如更多舵机、更多配置跳线等。
两个系统之间的主要区别在于,CMUcam2 包含来自 AverLogic 的 AL422B 帧缓冲芯片,而 CMUcam1 则没有。这使得 CMUcam2 硬件能够快速捕获单个完整帧并将其存储在帧缓冲存储器中。这有许多优点:
更复杂的处理。 在 CMUcam1 中,处理器必须在相机模块输出像素数据流时即时进行处理。这种设计有助于降低系统硬件的复杂性和成本。然而,它限制了处理的复杂性,因为处理必须在像素之间或图像行之间实时进行。由于 CMUcam2 上的处理器以自己的节奏从帧缓冲区访问像素数据,它可以对每个像素执行更复杂的处理。
更快的处理速度。 不必与相机模块的像素流保持同步的另一面是,处理器在需要像素数据时不必等待相机模块。消除这段等待时间意味着,即使处理器的性能并没有更强,CMUcam2 的处理器实际上也能比 CMUcam1 更快地处理一帧。
每帧多次操作。 由于存储在帧缓冲区中的图像不会改变,CMUcam2 可以对单个帧执行多次操作。因此,例如,可以在单个帧上检测运动、计算区域统计信息以及跟踪多种颜色。
更好的帧转储。 由于 CMUcam1 必须将传输的帧转储数据与相机模块的数据流同步,它每个相机帧只能发送一列数据。这意味着图像的不同部分是在不同时间捕获的,因此快速移动的物体会在 CMUcam1 的帧转储中被涂抹开来。由于 CMUcam2 从帧缓冲区中的固定数据传输图像,这不再是问题。
更好地处理较低的波特率。 拥有帧缓冲区还意味着 CMUcam2 传输数据的时序可以与从相机模块读取数据的时序完全解耦。这意味着当通信波特率发生变化时,来自帧转储和位图行模式的 CMUcam2 数据不会改变,无论波特率如何,CMUcam2 都会向主处理器传送相同的帧或位图数据。然而,每秒处理的帧数在波特率较低时仍可能改变,因为它仍需要最终完成发送一帧的所有数据,然后才能处理后续的帧。
更好的相机模块操作。 为了让 CMUcam1 中的处理器能够与来自相机模块的数据流保持同步,相机模块的帧率不得不降低到 17 fps。CMUcam2 使用的帧缓冲区使我们能够以完整的帧速度运行相机模块。这样做的一个优点是,相机的自动曝光和白平衡调整能够更快地进行,因为它每帧只能进行一次调整,而现在每秒有更多的帧。第二个优点是,黑白模拟视频输出(仅在模块以完整帧率运行时才起作用)可以在 CMUcam2 处理图像数据的同时使用,而 CMUcam1 则无法做到这一点。
功能概述#
CMUcam2 实现了 CMUcam1 的所有功能,还增加了许多新功能。以下是摘要。
颜色跟踪。 CMUcam2 实现了与 CMUcam1 相同的颜色跟踪功能。与 CMUcam1 一样,它实现了一个可选的位图行模式,用于传输被跟踪像素的位图。此外还有一些增强功能。有一个新的可选行模式,为每一行提供被跟踪像素的统计信息,包括被跟踪像素的平均值、最小和最大位置。这对于循线非常有用。还有一个新的可选模式,可以反转对跟踪边界的解释。在此模式下,跟踪边界之外的像素被视为"良好"。这对于在均匀背景下跟踪物体非常有用——想想蓝幕特效。当启用像素差分(如下所述)时,它对于检测边缘也很有用。噪声过滤选项也得到了增强,允许针对噪声情况调整过滤量。
图像统计。 CMUcam2 实现了与 CMUcam1 相同的图像区域均值和方差统计计算。与 CMUcam1 一样,它实现了一个可选的行模式,用于传输图像每一行的均值。还有一个新的增强行模式,可选地逐行包含方差信息。
运动检测。 CMUcam2 中全新的功能是运动检测(帧差分)命令。这些命令可用于指示 CMUcam2 捕获当前图像的低分辨率版本,并持续将其与新传入的图像进行比较。如果图像的任何部分变化超过指定量(这可能表示存在运动),CMUcam2 会报告数据包。这些数据包可以描述发生变化的图像块的质心和范围,或提供哪些图像块发生了变化的位图。此模式还可以与像素差分(如下所述)结合使用,使运动检测对光照变化更加稳健。
直方图计算。 CMUcam2 中全新的功能是直方图计算命令。这些命令可用于以最多 28 个区间的分辨率捕获单个颜色通道的一维直方图。直方图提供了概括图像外观的有用信息。通过在主处理器上进行额外的编程,这些信息可用于帮助检测障碍物、特定物体或位置。
图像窗口化。 CMUcam2 实现了将处理限制在整幅图像的一个小区域(子窗口)内的能力,就像 CMUcam1 那样。在 CMUcam2 中,此功能甚至更加有用,因为它可用于仔细检查存储在帧缓冲区中的单幅图像的子窗口。此外,减小垂直窗口尺寸可用于大大增加每秒处理的帧数,因为需要 CMUcam2 处理的像素数量大大减少。
输出数据包定制。 CMUcam2 实现了比 CMUcam1 灵活得多的数据包定制。有一些命令允许用户定制每个命令生成的每个数据包,使其仅返回特定应用所需的值。在许多情况下,这可以大大减少传输到主处理器并由其处理的数据量。
像素差分。 CMUcam2 中全新的功能是可选的像素差分模式。在像素差分模式下,像素在传递给 CMUcam2 代码的其余部分之前会经过预处理。此预处理步骤将新的像素值发送给代码的其余部分,这些值是当前像素值与前一个像素值之间的差值。基本上,这样做会过滤掉图像中除垂直边缘之外的所有内容。这是一个非常强大的操作,通过在主处理器上进行额外的编程,可用于辅助障碍物检测和循线。
降采样。 CMUcam2 中全新的功能是可选的降采样模式。在降采样模式下,CMUcam2 软件在处理相机图像之前会降低其分辨率。这样做的优点是需要处理和传输的像素大大减少。由于它是通过软件完成的,降采样只会带来处理速度的极小提升。最大的好处在于减少传输的数据量。对于转储的图像帧,降采样可以轻松地将数据大小减小 2 倍、4 倍甚至更多,从而缩短传输时间。同样,在使用位图行模式时,位图图像的大小可以大大减小,从而减少主处理器必须接收和处理的数据量。
舵机控制。 最初的 CMUcam1 仅支持单个舵机,并且该舵机只能在特定波特率下且 CMUcam1 处于流模式时才能正常工作。CMUcam2 最多支持五个舵机。CMUcam2 中的舵机控制器代码作为后台进程实现,因此舵机输出始终保持稳定,可以像使用任何其他舵机控制器一样使用它。此外,CMUcam2 可以配置为自动控制云台(水平和垂直)舵机。在此模式下,每次命令 CMUcam2 计算颜色跟踪数据时,它都会更新舵机位置。
省电。 CMUcam2 中全新的功能是省电模式。在某些应用中,CMUcam2 不需要连续处理图像数据。在这些情况下,可以命令 CMUcam2 进入各种掉电(或睡眠)模式。当 CMUcam2 处于这些模式之一时,不会执行任何跟踪命令或舵机控制。发送一个简单的串行命令即可在几毫秒内唤醒相机。
在 CMUcam2 上使用 OV6620 和 OV7620 模块有什么区别?#
简介#
就能力而言,OV7620 传感器是比 OV6620 传感器(356x292 个原始传感器位置)分辨率更高的传感器(664x492 个原始传感器位置)。但这一事实与考虑这些传感器中哪一个最适合您的 CMUcam2 应用时所产生的问题几乎没有关系。以下是一系列注意事项。
分辨率#
虽然 OV7620 传感器确实是比 OV6620 分辨率更高的传感器,但由于 CMUcam2 帧缓冲区的固定内存大小,CMUcam2 对 OV7620 传感器仅支持 160x239 的单一分辨率。CMUcam2 对 OV6620 传感器支持 88x143 的低分辨率模式和 176x255 的高分辨率模式。因此,在高分辨率模式下使用 OV6620,实际上可以实现比 OV7620 传感器可用的单一分辨率模式更高的分辨率运行。
帧率#
另一个与分辨率相关的问题是连续处理图像流时的最大帧率。分辨率越低,需要处理的像素越少,可实现的帧率就越高。虽然可以通过改变降采样率和虚拟窗口大小来提高帧率,但传感器输出的实际像素数量的影响要大得多。因此,当 OV6620 在其低分辨率模式下运行时,CMUcam2 可以实现比 OV7620 唯一可用的单分辨率模式高得多的帧率。
模拟视频输出#
这两个传感器之间的另一个区别是它们模拟视频输出的格式。OV6620 传感器以模拟 PAL 格式输出,而 OV7620 传感器以模拟 NTSC 格式输出。在这两种情况下,输出均为黑白。
需要注意的是,在 CMUcam2 的大多数用途中,不会使用模拟输出。在典型的应用中,图像处理的结果或原始像素通过串行端口以数字方式传输到主计算机或微控制器,因此这不是问题。然而,如果实时黑白视频很重要,那么您可能需要考虑模拟视频输出的格式。
摘要#
我们的建议是,OV6620 模块几乎是所有应用的最佳选择,特别是考虑到其较低的成本以及使用该模块可实现的更快的处理时间。在需要 NTSC 单色模拟视频输出的罕见应用中,您可能需要考虑 OV7620。
当前的 CMUcam2 固件版本是否存在任何已知问题?#
是的。在 1.00 版中,"RM"(原始模式)命令无法正常工作。1.01 版修复了该问题。
CMUcam2 中的固件是可升级的,但需要一个 SX-Key(或兼容)编程器才能这样做。ROM 映像的"hex"文件可在 下载 页面上找到。