当前位置: 编码机 >> 编码机优势 >> 机器人与机器视觉在ROS中使用OpenC
ROS教程:如何在计算机视觉的机器人拾取和放置任务中使用OpenCV计算机视觉是机器人技术的重要组成部分。它帮助机器人从相机数据中提取信息以了解其环境。应用范围从提取物体及其位置到检查制造零件是否存在生产错误,再到检测自动驾驶应用中的行人。
在本文中,我将展示如何在机器人中使用计算机视觉来使机器人手臂执行有点智能的拾取和放置任务。为此,我们将使用流行的开源库OpenCV。我们将学习如何安装OpenCV,将其连接到ROS和Kinect深度摄像头,应用计算机视觉算法提取必要的信息并将其发送给我们的机器人。这将是一篇更长的文章,我将在其中详细解释所有内容,以描述它从头到尾是如何工作的。对于那些只对特定主题感兴趣的人,在我们深入研究之前,我整理了一份内容列表。
在本教程中,我们将讨论:
什么是OpenCV以及如何安装它?
如何设置拾取和放置任务并运行应用程序
演练OpenCV节点实现
使用cv_bridge包在ROS和OpenCV之间转换相机图像
将计算机视觉算法应用于图像
从图像中提取边界及其中心
提取对象位置
将2D图像像素转换为世界帧中的3D位置
将结果作为服务调用发送
如何从拾取和放置节点调用OpenCV节点服务
让我们开始吧!
什么是OpenCV以及如何安装它?
OpenCV最初是在英特尔开始的,后来也由WillowGarage开发(这就是ROS发明的地方)。它提供了一组优化的计算机视觉算法,这些算法可移植且易于使用。它是开源的,自年以来,非营利组织OpenCV.org接管了支持。
如果您的机器上正确安装了ROS,则OpenCV也应该已经安装。您可以通过运行以下命令来检查:pkg-config--modversionopencv如果这没有产生任何结果,您可以尝试:dpkg-l
greplibopencv
如果您发现OpenCV尚未安装,请按照以下链接中的说明进行操作。
我使用ROSMelodic,默认情况下使用OpenCV3,所以这是本教程中使用的版本。也可以使用带有Melodic的较新的OpenCV4,但需要更多的努力才能使其运行。其中一个附加步骤涉及我们用于转换图像cv_bridge。要使用OpenCV4,您需要从源代码克隆和编译它。这是您将遇到的问题之一,可能还有更多。如果您仍然想尝试使用OpenCV4进行设置,您可能希望从堆栈溢出的这个问题开始。
如何设置和运行“拾取和放置”任务
我们希望开发我们的计算机视觉解决方案,并将其应用于真实的机器人场景中。因此,我们选择了在前面的教程中也使用的拾取和放置任务,其中我们使用MoveitC++界面处理拾取和放置任务,以及如何使用Moveit和深度摄像头进行防撞。
下图显示了设置。左边的蓝色框应该放在右边的白板上。在第一个教程中,我们使用Moveit的C++接口对任务进行编程,并对盒子(起始位置)和板(目标位置)的位置进行硬编码。我们还告诉Moveit中间绿色障碍物的确切位置和大小,以便它可以找到绕过它的路径。在第二个教程中,我们添加了一个深度摄像头,可以自动检测中间的障碍物,而无需事先告诉Moveit。现在我们想使用从相机获得的图像,并使用计算机视觉算法自动提取盒子和板的位置!
我们将首先完成设置并运行它,以便您可以看到程序的实际功能。然后,我将解释实现的所有细节,并引导您完成代码。
该项目由三个主要包组成:
适用于UR5机器人、抓手和Kinect深度摄像头的Moveit配置包。如果您执行了前面的教程,则应该已安装此包。如果没有,请转到有关如何创建Moveit配置包的教程的快速入门部分,然后按照步骤操作。之后,请查看避免碰撞教程中有关如何将Kinect3D相机添加到环境的部分,并复制前两个步骤。
OpenCV节点,通过应用计算机视觉算法从相机图像中提取对象位置并将其发送到我们的应用程序。在本文的后面,我将详细解释确切的实现。现在请继续将此存储库克隆到catkin工作区的src文件夹中:
~/catkin_ws/srcgitclone
转载请注明:http://www.aideyishus.com/lkgx/7366.html