使用数码相机和OpenCV确定高架吊车的位置和速度





在计算机视觉中,存在一种无需使用深度传感器和立体相机即可测量到物体的距离的方法。在本文中,该方法用于确定高架起重机小车的位置和速度。



由于购物车配备了编码器,因此我将能够基于三角形的相似性来说明此方法的工作原理。本文介绍了如何使用一台摄像机测量距离,以及如何将其用于实际任务。



该主题专门针对我两年前写的硕士论文。



设备



该研究是在马格尼托哥尔斯克市OOO OOO Privod-Avtomatika的工业实验室中进行的,该实验室安装了大梁起重机,模拟了真正的桥式起重机的操作。







在实验过程中,通过同时从编码器获取读数的过程,记录了起重机移动的视频。速度图是从Schneider Electric的SoMove软件中获得的。



视频以1920x1080的分辨率记录在佳能EOS 1200D相机上。



为了检测购物车,使用了带有绘制的矩形和内部圆的图形标签。解决方案并不完全成功,在进行实验之前,我应该更好地了解标签。但是借助轮廓分析(面积和宽高比限制),我仍然能够检测到所需的矩形。我还要补充一点,如果物体易于检测并且可以精确测量物理尺寸,则不需要图形标签。



工作算法



距离计算方法基于会聚在镜头光圈上的三角形的相似度。







让我们使用尺子测量纸上标记的面积,并使用opencv库测量框架中标记的面积。知道了焦距,我们可以计算到物体的距离。



实验中



数码相机安装在高架吊车前。以足够的视角覆盖起重机的整个区域。





安装图。从上面查看。



记录了两个测试视频,它们分别沿x轴(向后,远离相机和y轴)向左移动,然后向右移动。将位置和时间值写入numpy数组,然后

导出到Matlab,在其中绘制运动图S(t)。







区分数据,我们得到速度V(t)的图形。



x_veloc = np.diff(x_position) / np.diff(time_mas)


由于运动图具有与不正确的边缘检测和不均匀照明相关的细微噪声,因此微分操作会大大增加此噪声。







让我们使用Matlab中的一阶滤波器消除噪声,然后将编码器读数与数码相机读数进行比较。







这些图显示了使用一台摄像机可以获得的距离测量精度。



为了降低噪声水平并获得更平滑的图形,开发了带有遮阳板和局部照明的第二版标签。







从理论上讲,这应该可以减少噪声,从而提高测量精度。不幸的是,我们还无法试用该标签的新版本。



对于那些有兴趣了解更多有关基于轮廓分析的对象跟踪的人来说,有一篇不错的文章估计从数字摄影数据确定机械系统的2d坐标和速度的跟踪方法的准确性。



在本文中,我讨论了最简单的方法来测量到物体的距离,并展示了可以达到的测量精度。谢谢大家的关注。



All Articles