使用协同处理器的视觉处理

使用诸如OpenCV之类的库进行视觉处理来识别目标或游戏作品通常会占用大量CPU资源。通常,负载并不是太重要,而且roboRIO可以轻松处理该处理。在摄像机流更多或图像处理复杂的情况下,最好通过将代码和摄像机连接放在不同的处理器上来卸载roboRIO。在FRC | reg |中有很多种处理器可供选择。例如Raspberry PI,基于Intel的袋鼠,LimeLight,以实现极致的简洁性,或者为更复杂的视觉代码提供图形加速器,例如nVidia Jetson型号之一。

策略

我们需要一款对应的软件来设置我们的协同处理器,一般包括有:

  • OpenCV - 一个开源的计算机视觉库

  • 术语: Network tables(网络表) - 用于将图像处理的结果传输到RoboRIO的程序里

  • Camera server library(摄像头服务器库) - 用于摄像头的连接与传输视频流以确保在控制面板上能看到视频

  • 语言库(对应视觉程序的编程语言)

  • 你的程序(能探测到物体的那种)

将协同处理器连接到RoboRIO的办法有两种。一,将协同处理器通过额外的以太网接口与路由器相连;二,若是要连接更多设备的话,可以在机器上添加一个小型的网络交换机。摄像头插入协同处理器后会获取图像、处理图像,最终将结果(通常是目标的地点信息)通过Network tables(网络表)传输到机器以便瞄准与控制方向。

协处理器和 roboRIO 在同一网络上的网络图。

将视频流传输至控制面板

我们通常会简单地将摄像头的数据直接通过机器人的网络传到控制面板。使用以上方法,我们可以将一个或多个视频流传输到网络并且通过例如Shuffleboard或网页浏览器在控制面板上显示。使用Shuffleboard的好处有几点:1、便于调整摄像头的分辨率;2、便于调整摄像头的比特率;3、可以将视频流与其他数据一起传输给机器人。

同时,我们也可以在处理图像时添加注释并传输到控制面板,例如目标的线或是盒子,如此以便于操控手们看清机器人周围的情况。