在 raspberry pi 上使用 OpenCV 进行视觉跟踪 FRC

Using OpenCV on raspberry pi for vision tracking FRC

我是一名高三学生,目前是机器人团队的一名程序员。今年我们计划做一些愿景 processing/tracking 以自动找到目标并使自己与目标保持一致。我们使用 java 对我们的机器人进行编程,并且是 FRC(第一届机器人竞赛)的一部分。我们在使用 RoboRealm 使视觉跟踪正常工作的标准方法上遇到了一些麻烦,我想使用 Raspberry Pi 作为协处理器,仅用于视觉跟踪目的。我对使用什么做了一些研究,看来 OpenCV 是最好的。我对Raspberry Pi的编码经验不多,但对python有基本的了解。我正在考虑让 raspberry pi 对目标进行所有跟踪(沿着目标的外边缘有反光带),并以某种方式发送该信号(通过 roborio——板载 FRC 标准处理器)以及我的 java 代码,它会告诉我们的机器人根据离目标的距离向左转或向右转。我很好奇这是否属于像我这样的初学者程序员的能力范围。任何反馈都会很棒!

谢谢!

您所说的一切听起来都非常可行 contour features 您可以使用边界 rectangle/circle 等来提取目标的质心 (COM) 坐标。此时你可以像你说的那样做一个简单的阈值处理,如果COM在左边,就向左移动,反之亦然。

最大的问题是可靠地定位目标,如果你之前从未做过CV,很容易低估这项任务的难度。我的建议是尽量使目标尽可能明确。既然它反光了,也许你可以照亮它,让它更显眼?也许从机器人身上照射 IR(红外线)并在相机上使用 IR 滤镜。您也可以对可见光谱中的任何常规光执行此操作。一旦你在目标和背景之间创建了足够的对比,你就可以做简单的 thresholding or possibly do template matching(虽然要慢得多,而且如果目标是倾斜的或倾斜的,它就不会起作用)。

希望我给了你一些想法,祝你好运。

编辑
在您的评论中,您提到您的目标是绿色的,这可以简化您的问题。我不确定您对 CV 了解多少,但图像采用 RGB 格式。每个像素都有一个红色、绿色和蓝色分量。如果您正在寻找绿色,那么 split the colors and only the green channel of the image for thresholding THe open CV site has GREAT tutorials 可能会更好。我强烈建议您(以及您团队中的任何其他人)看看这个。我建议您阅读:

  1. OpenCV 中的 Gui 特性
    一种。图片
    b.视频
  2. 核心操作——图像的基本操作
  3. 图像处理(这是最重要的)
    C。图像阈值
    d.平滑(几乎每个cv算法中的每个图像在预处理过程中都是平滑的)
    e.形态变换(可能有助于在阈值处理后清理图像)
    一世。轮廓(这是您获取坐标的地方)

另一个技巧是在算法开发过程中使用静止图像。从机器人可能遇到的角度拍摄几张不同的目标图像。对这些进行所有测试和开发。一旦你有很高的信心水平,然后转向视频。即使那样我也会从 offline 开始 视频(您捕获的记录,不是实时的)。如果您发现问题很容易重现(只需回到视频中那个麻烦的时间戳并调整您的算法)。然后最后用在线(实时)视频。

最后一条建议,即使您的最终目标是 运行 在 RPi 上,也可以在您拥有的任何计算机上随意测试您的 CV 算法。如果您大部分时间使用笔记本电脑,请在其上使用 opencv,移植到 Rpi 的主要区别在于您处理 RPi 相机模块的方式。但是,如果您仍处于使用静止图像和离线视频的早期阶段,这不会有什么不同。但这只是我的意见,我知道当我整天在我的 windows 笔记本电脑上时,我自己很难拖出我的 Pi 来编码。我更有可能使用日常 PC 编写代码。