我正在构建用于UGV的立体视觉系统。该系统适用于将在比赛中使用的机器人,在该比赛中,该机器人可以进行遥控操作,以在大型户外场地中找到相对较小的彩色岩石。我了解如何校准此类系统并处理立体视觉系统的数据。但是,我不知道如何为此类系统选择相机。为立体视觉系统挑选相机的最佳做法是什么?

#1 楼

我不由自主地遵循以下选择标准


颜色/黑白-通常,黑白效果更好,因为立体声算法始终只使用一个通道
基线-这真的取决于现场。使用基线可以控制距离的精确度。基线越宽,视差值越高,距离估计的噪声也越小。较高的基线还意味着您将减少视野之间的重叠。但最重要的是,基线越宽,两个视图之间的匹配就越困难。因此,结果的质量会下降。
快门-对于移动机器人上具有计算机视觉的任何事物,始终使用全局快门
-大多数立体声算法的计算量很大。而且您可能不需要那么多3d点。在近场中,采样密度通常就足够了,远场中来自低视差的误差比采样密度更成问题。 640x480在大多数情况下都可以。某些芯片具有较宽的纵横比,这有利于重叠,但是使用芯片的子窗口也可以得到相同的结果。
镜头/视野-对于移动户外机器人,我更喜欢宽视野在狭窄的视野。或多或少是出于与决议相同的原因。确保您的镜片是刚性的,并具有固定任何活动部件的方法,例如像可调焦距在大多数情况下,固定焦距还是可以的,因为您受基线选择的限制。
framerate-我认为最不重要的考虑因素。除非您具有强大的处理能力,否则您将获得的信号不会超过5 Hz。因此,您的算法更有可能是瓶颈,而不是芯片或连接。
介面-大多数相机都随附Firewire / USB2 / USB3 / Ethernet。 USB2无用,因为它消耗大量CPU。如果您有端口,Firewire会很好,但是我认为这些天对USB3的支持似乎正在下降。对USB3并没有太多经验。以太网非常好,因为与USB3相比,您现在更有可能找到具有GigEthernet的嵌入式系统。
外壳-尽可能地坚固。重新校准是一个烦人的过程。


#2 楼

您需要注意以下几点:



全局快门基本上意味着所有像素都被同时捕获,而不是滚动快门,后者是顺序捕获的以行扫描方式。由于您的UGV会四处移动并在捕获的图像上执行立体算法,因此避免相机移动时发生像差,例如下图所示的异常(摘自Wikipedia),很重要:





某些相机,尤其是火线相机AFAIK,可以实现硬件中的相机同步。这可以大大改善立体声效果,当物体四处移动时。
安装时应确保校准后立体声对的外部参数(相机之间的相对姿态)的变化不太可能改变。在您的钻机中,这可能更为重要,因为UGV可能会面对崎uneven不平的室外地形,并且物体会振动。
专用的立体硬件可以直接获取视差图像作为立体视觉系统的输出,从而减轻了负担您的嵌入式计算。它也往往比在软件中运行完全相同的算法要快得多。

和往常一样,您愿意付出越多,结果越好。老实说,如果您能够购买像Bumblebee2这样的功能完善的立体声相机,那就是我会做的。否则,如果您的价格偏低,我将只选择Kinect:不太可能以相同的价格获得性能优于其的系统。

评论


$ \ begingroup $
问题是室外系统。这有效地排除了Kinect。而且,我们发现Bumblebee随附的算法远非最佳。
$ \ endgroup $
–雅各布
13年2月15日在14:05

$ \ begingroup $
我和您一起讨论Kinect的评论,但是Bumblebee随附的立体声算法不能用您自己的代码代替吗?我指出的最大优势是实际硬件,而不是捆绑的软件。
$ \ endgroup $
–georgebrindeiro
13年2月15日在17:33

$ \ begingroup $
是的,这是真的。您可以像使用两个普通相机一样使用它,并且它具有坚固的外壳的优点。
$ \ endgroup $
–雅各布
13年2月15日在18:08

$ \ begingroup $
不仅如此,还可以使用全局快门,良好的镜头和其他功能
$ \ endgroup $
–georgebrindeiro
13年2月15日在19:09

#3 楼

您应该先计算每秒需要多少帧,以及在该帧速率下可以处理多少相机分辨率。如果没有别的,那将防止您超支或购买不满足您需求的相机。

除此之外,还有多种功能使选择更加困难/有趣。不同的摄像机(尤其是像Axis这样的网络摄像机)使您可以更改图像质量,或为图像流指定最大比特率。某些相机还为您提供快门速度的选择,使您可以选择恒定的曝光时间或恒定的图像平均照度。有些相机比其他相机更敏感(我上次使用此相机是在2009年,我们注意到PS3 Eye在弱光条件下的表现确实不错)。

可能最好的办法是对用DSLR拍摄的一些静态图像运行图像处理算法,然后尝试减小帧大小和质量,以查看事物从何处开始分解。

#4 楼

这是一个有趣的话题,第一次尝试并不容易。根据经验,这是最重要的事情。


同步。相机必须100%同步。例如,假设UGV以适度的36Km / hr(10m / s)的速度行驶并以每秒30帧的速度记录帧。也就是说,UGV在每个帧上将覆盖3m。现在,假设您的同步关闭了1ms,其中一台摄像机将关闭〜0.3m,这很糟糕[就在我头顶]。同步问题很难检测。
解决方案。在立体声环境中,我们指的是深度分辨率,或者在视差变化的情况下可以解决多少深度。在此处可以找到很好的解释:http://pub1.willowgarage.com/~konolige/svs/disparity.htm要查看的方程式是图像焦距和立体基线的函数。 $ \ delta Z = \ frac {Z ^ 2} {Bf} \ delta d $。这表示深度分辨能力$ \ delta Z $与基线$ B $乘以焦距$ f $成反比。那就是基线越长,$ \ delta Z $越小越好。这意味着,您可以解决更多的问题。视差$ \ delta d $的最小变化部分受图像分辨率和所用算法的控制。为了进行计算,您可以放心地假设$ \ delta d $至少为$ 1/2 $。最好选择$ \ delta d $。
重叠。您希望摄像机之间有重叠以获取立体声。因此,您需要选择镜头焦距(视野)和基线的组合,以便为应用程序提供足够的重叠。基本上,三角函数可以在板上运行,也可以在快速的matlab / python脚本上运行。


导航和姿势估计在这种情况下,您很可能需要较大的基线+长焦距。这样可以使立体声更好地看到并解析深度,并具有更大的范围。
障碍物的检测和避免您可能需要较短的基线和较宽的镜头(较小的焦距),以便您可以专注于离自己很近的物体。

某些UGV可能同时具有立体声设置,用于导航的较大基线窄视野和用于避障的另一或两个。

要小心购买。一些公司提供已经建立的立体声设置。在坚固性方面,这些功能很棒,它们不容易丢失校准,并且始终保持同步。问题在于市售的基准线较小。如果您想建立自己的。我想您最终会这样做,请确保相机可同步。 Firewire非常适合此功能,同一总线上的两个摄像头开箱即用,同步精度为125微秒! USB和Gige凸轮很难同步。将所有组件放在一起时,您要确保镜头完全不会移动,并且基线是刚性的,对于应用程序来说非常刚性。

选择镜头时也要小心。并非所有镜头都适用于所有相机。镜头也有分辨率。这是另一个主题,这是此http://www.qualitymag.com/articles/90642-q-a--selecting-lenses-for-machine-vision-systems上的简短文章

评论


$ \ begingroup $
您的同步计算错误。以10m / s的速度进行30 FPS时,每帧的距离为33cm(不是3m)。同样以该速度1ms表示距离为1cm(与FPS无关)。因此,对于这样的速度,毫秒级的同步实际上是一个超级结果!
$ \ endgroup $
– Kozuch
2014年8月12日17:21