在具有ROS的Raspberry Pi 3上使用鱼眼-第2部分

尊敬的Habr读者,下午好! 这是在Raspberry Pi 3上使用鱼眼镜头的故事的第二部分。可以在此处找到第一部分。 在本文中,我将讨论如何校准鱼眼镜头,并使用find_object_2d包使用该相机检测对象。 谁在乎,请在猫下。

使用camera_calibration校准鱼眼相机


在这里,我根据ros.org门户上的官方手册描述校准过程。

要执行校准,我们需要相机校准包。 我们可以使用apt安装它:

sudo apt-get install ros-kinetic-camera-calibration 

我们将需要一个棋盘模板。 从ros.org的官方手册中下载模板并进行打印。 为了方便起见,我将其粘贴在胶合板上:

图片

让我们运行校准程序:

 rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam 

我们将得到一张照片:

图片

稍微移动模板,然后等待直到在框架中选择了模板(带点的彩色线不会出现在模板上)。

图片

图片

将模板再移到一边。 为了成功执行校准,我们需要在相机前方左右移动模板,以使模板落入相机视场中的所有角度位置(左,右,上,下)。 程序窗口中摄像机图像窗口右侧的是带有三个进度条的注册面板:

  • X捕捉相机视野中图案在左右方向(水平)上的移动
  • Y捕获相机视野中图案在上/下方向(水平)上的移动
  • 大小可捕获模板从相机接近/移走并相对于相机倾斜的情况。
  • 斜度固定模板的左右,上和下(斜角)的斜率。

因此,为了成功进行校准,重要的是模板应出现在框架的不同角落,占据整个框架,并且还应向左,向右,向上和向下倾斜。

在Raspberry Pi上校准鱼眼镜头摄像头可能需要一段时间,因此请耐心等待。 我的校准过程花了20分钟。

校准完成后,应激活“校准”按钮(以彩色突出显示):

图片

我们还可以在终端中看到校准结果:

图片

如果您对结果满意,请按COMMIT按钮。 程序窗口将关闭,您将在终端中看到消息“正在将校准数据写入...”。

检查指定文件是否已创建:

 ll ~/.ros/camera_info/head_camera.yaml -rw-rw-r-- 1 vladimir vladimir 592 Apr 14 14:02 /home/vladimir/.ros/camera_info/head_camera.yaml 

校准完成。 现在,获得的校准数据可用于ROS中的视觉定位和SLAM算法。

使用find_object_2d检测对象


安装软件包非常简单。 从Ubuntu 16.04中用于ROS Kinetic的apt仓库中安装它:

 sudo apt-get install ros-kinetic-find-object-2d source /opt/ros/kinetic/setup.bash 

运行ROS master和rqt_image_view:

 roscore roslaunch usb_cam usb_cam-test.launch 

使用以下命令,启动检测器节点:

 rosrun find_object_2d find_object_2d image:=/usb_cam/image_raw 

检测程序窗口打开:

图片

在这里,我们将看到来自摄像机的信息流以及物体特征特征检测的结果。
首先,我们将在我们的设施中进行探测器培训。 将第一个对象放在相机前面:

图片

右键单击窗口中“对象”的左侧面板,将打开“从场景添加对象”选项。 选择此选项,将打开用于添加对象的窗口:

图片

为对象选择最佳位置后,单击“拍摄照片”按钮拍摄对象的照片:

图片

我们需要选择图片中的对象。 使用鼠标光标选择对象:

图片

单击下一步按钮以剪切图片中的对象,然后继续下一步。 裁剪图像后,我们获得在对象处检测到的特征特征的总数。 只需按下“结束”按钮即可将对象添加到训练有素的检测器对象的数据库中。 在这里,我们看到了添加对象的过程的最后一步:

图片

结果,我们在一个物体上训练了探测器。 现在,您可以尝试检测场景中的对象:

图片

让我们将检测到的对象的位置绘制到终端:

 rosrun find_object_2d print_objects_detected 

输出将如下所示:

 Object 1 detected, Qt corners at (259.387238,103.530960) (448.684052,79.495495) (282.419050,240.049667) (458.438938,199.656717) --- Object 1 detected, Qt corners at (255.340408,104.615120) (451.348079,75.302353) (284.672425,230.382223) (452.696585,197.625600) --- Object 1 detected, Qt corners at (253.440521,102.973320) (447.226440,76.793541) (278.530854,238.918013) (454.377219,197.526599) --- 

让我们列出主题:

 rostopic list 

列表中出现了两个新主题:/ objects和/ objectsStamped。

我们显示有关检测到的对象的信息:

 rostopic echo /objects 

 layout: dim: [] data_offset: 0 data: [1.0, 266.0, 177.0, 0.7527905702590942, 0.060980819165706635, 0.00022385441116057336, 0.3012462854385376, 0.8929792046546936, 0.0008534671505913138, 334.9065856933594, 182.55294799804688, 1.0] --- 

在此,第二和第三值(266.0,177.0)表示对象的宽度和高度。 数据字段中的所有其他值表示3x3单应性矩阵(用于计算对象的位置和方向,以及比例和位移值)。

如观察结果所示,find_object_2d在检测纹理较弱或没有纹理(无纹理)的对象方面做得很差。 另外,当检测到与物体成较大角度的物体(如果我们从侧面观察物体)或与物体相距较大距离时,检测器无效。

图片

使用检测器完成工作之后,find_object_2d将为我们提供将添加的对象保存到磁盘的功能。

现在就这些了。 祝大家好运,很快再见!

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


All Articles