使用find_object_2d包从ROS中的相机检测和识别对象



机器人操作系统(ROS)的好处之一是,它具有许多可在我们的应用程序中重复使用的软件包。 在我们的案例中,我们想引入一个物体识别和检测系统。 find_object_2d包实现了SURF,SIFT,ORB,FAST和 Brief 函数检测器以及用于检测对象的描述符 。 使用此软件包提供的图形界面,我们可以标记要检测的对象并将其保存以供将来检测。 检测器节点将检测相机图像中的对象,并通过对象发布对象详细信息。 使用3D传感器,它可以评估对象的深度和方向。

在本文的结尾,将对ORB和SIFT算法的示例进行视频测试。

设置find_object_2d


安装此软件包非常简单。 这是在Ubuntu 16.04和ROS Kinetic上安装它的命令:

$ sudo apt-get install ros-kinetic-find-object-2d 

从源安装


切换到ROS工作区:

 $ cd ~/catkin_ws/src 

将源代码复制到src文件夹:

 $ git clone https://github.com/introlab/find-object.git src/find_object_2d 

创建一个工作区:

 $ catkin_make 

使用网络摄像头运行find_object_2d节点


以下是启动网络摄像头的检测器节点的过程。 如果要使用网络摄像头检测对象,则首先需要安装usb_cam软件包(请参阅上一篇文章)。

1.启动roscore:

 $ roscore 

2.1将USB摄像头连接到计算机并运行usb_cam ROS驱动程序:

 $ roslaunch usb_cam usb_cam-test.launch 

这将启动用于USB网络摄像头的ROS驱动程序,您可以使用rostopic list命令在此驱动程序中查看主题。 驱动程序中的主题列表如下所示:


从相机驱动程序发布的主题

2.2通过uvc_camera从摄像机广播视频的另一种方法:

 $ rosrun uvc_camera uvc_camera_node 

3.从主题列表中,我们将使用相机原始图像的主题,该主题已发布在主题/ usb_cam / image_raw中。 如果您了解此主题,那么下一步就是启动对象发现节点。 以下命令将启动对象发现节点:

 $ rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

该命令将打开对象检测窗口,在该窗口中我们可以看到摄像机通道和对象特征。

4.那么,如何使用它来检测物体? 以下是使用此工具执行基本发现的过程:


查找对象检测窗口

5.您可以在该窗口的左侧面板(对象)上单击鼠标右键,然后就有机会从场景中添加对象。 如果选择此选项,将要求您标记当前场景中的对象,标记完成后,将开始从场景中跟踪标记的对象。 上一个屏幕截图显示了捕获包含对象的场景的第一步。

6.将对象对准相机后,单击“拍照”按钮以单击对象:


添加对象向导以捕获对象

7.下一个窗口用于标记当前绑定中的对象。 下图显示了这一点。 我们可以使用鼠标光标标记一个对象。 单击“下一步”按钮裁剪对象,然后可以继续执行下一步:


添加对象向导以标记对象

8.修剪对象后,它将显示该对象的功能描述符总数,您可以单击“结束”按钮以添加要检测的对象模板。 下图显示了向此检测器应用程序添加对象模板的最后一步:


添加功能向导的最后一步

9.恭喜! 您已添加要发现的对象。 现在,您可以看到下图所示的检测。 您可以在检测到的对象周围看到边界框:


查找对象向导启动发现

10.够了吗? 对象的位置如何? 我们可以得到
使用以下命令定位对象位置:

 $ rosrun find_object_2d print_objects_detected 


物业资料

11.您还可以从以下位置获取有关检测到的对象的完整信息:
/主题的对象。 本主题发布由对象的宽度和高度以及单应性矩阵组成的多播数组,以计算对象的位置和方向及其比例和偏移值。 您可以像这样获取/对象主题的回显:


主题/对象值

12.我们可以根据以下公式计算新的位置和方向:


用于计算对象位置的方程式

这里H是3×3矩阵的单应性,(x1,y1)是对象在存储图像中的位置,而(x2,y2)是对象在当前帧中的计算位置。
您可以使用单应性矩阵检查print_objected_src节点的源代码以获取onversion。

这是此节点的源代码。

使用ORB和SIFT算法的示例测试find_object_2d包的视频



算法摘要:ORB速度很快,但是看不到远程对象,并且通常无法正确确定几何形状。 SIFT可以看到远程物体,准确地确定几何形状,缺点需要大量计算资源,并且需要付费才能用于商业用途。

EduMIP机器人要解决的问题

  1. 从BeagleBone Blue上的Logitech C920摄像机接收已经经过硬件编码的视频,然后以这种形式将其传输到ROS中的大型计算机。
  2. 连接距离传感器VL6180X,Vl53l0x和保险杠以在ROS中建立地图(已订购附件)
  3. 用ROS编写一种算法,该算法将处理地图数据和从相机中检测到的物体,并根据它们建立移动路线。

如果有像我这样的机器人爱好者准备加入该项目,然后写一封个人电子邮件,那么我需要上述问题的帮助。

Source: https://habr.com/ru/post/zh-CN414991/


All Articles