点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者从机器视觉的角度,由简入繁从相机标定,平面物体检测、有纹理物体、无纹理物体、深度学习、与任务/运动规划结合等6个方面深度解析文章的标题。

首先,我们要了解,机器人领域的视觉(Machine Vision)跟计算机领域(Computer Vision)的视觉有一些不同:机器视觉的目的是给机器人提供操作物体的信息。所以,机器视觉的研究大概有这几块:

1. 物体识别(Object Recognition):在图像中检测到物体类型等,这跟 CV 的研究有很大一部分交叉;
2. 位姿估计(Pose Estimation):计算出物体在摄像机坐标系下的位置和姿态,对于机器人而言,需要抓取东西,不仅要知道这是什么,也需要知道它具体在哪里;
3. 相机标定(Camera Calibration):因为上面做的只是计算了物体在相机坐标系下的坐标,我们还需要确定相机跟机器人的相对位置和姿态,这样才可以将物体位姿转换到机器人位姿。
当然,我这里主要是在物体抓取领域的机器视觉;SLAM 等其他领域的就先不讲了。

由于视觉是机器人感知的一块很重要内容,所以研究也非常多了,我就我了解的一些,按照由简入繁的顺序介绍吧:

一. 相机标定

这其实属于比较成熟的领域。由于我们所有物体识别都只是计算物体在相机坐标系下的位姿,但是,机器人操作物体需要知道物体在机器人坐标系下的位姿。所以,我们先需要对相机的位姿进行标定。

内参标定就不说了,参照张正友的论文,或者各种标定工具箱;

外参标定的话,根据相机安装位置,有两种方式:

  • Eye to Hand:相机与机器人极坐标系固连,不随机械臂运动而运动

  • Eye in Hand:相机固连在机械臂上,随机械臂运动而运动

两种方式的求解思路都类似,首先是眼在手外(Eye to Hand)

只需在机械臂末端固定一个棋盘格,在相机视野内运动几个姿态。由于相机可以计算出棋盘格相对于相机坐标系的位姿A_i 、机器人运动学正解可以计算出机器人底座到末端抓手之间的位姿变化E_i 、而末端爪手与棋盘格的位姿相对固定不变。

这样,我们就可以得到一个坐标系环 CX=XD

这种结构的求解有很多方法,我这边给出一个参考文献:

Shiu, Yiu Cheung, and Shaheen Ahmad. "Calibration of wrist-mounted robotic sensors by solving homogeneous transform equations of the form AX= XB."ieee Transactions on Robotics and Automation 5.1 (1989): 16-29.

而对于眼在手上(Eye in Hand)的情况,也类似,在地上随便放一个棋盘格(与机器人基座固连),然后让机械臂带着相机走几个位姿,然后也可以形成一个AX=XB 的坐标环。

二. 平面物体检测

这是目前工业流水线上最常见的场景。目前来看,这一领域对视觉的要求是:快速、精确、稳定。所以,一般是采用最简单的边缘提取+边缘匹配/形状匹配的方法;而且,为了提高稳定性、一般会通过主要打光源、采用反差大的背景等手段,减少系统变量。

目前,很多智能相机(如 cognex)都直接内嵌了这些功能;而且,物体一般都是放置在一个平面上,相机只需计算物体的(x,y,θ)T 三自由度位姿即可。

另外,这种应用场景一般都是用于处理一种特定工件,相当于只有位姿估计,而没有物体识别。

当然,工业上追求稳定性无可厚非,但是随着生产自动化的要求越来越高,以及服务类机器人的兴起。对更复杂物体的完整位姿(x,y,z,rx,ry,rz)T 估计也就成了机器视觉的研究热点。

三.有纹理的物体

机器人视觉领域是最早开始研究有纹理的物体的,如饮料瓶、零食盒等表面带有丰富纹理的都属于这一类。

当然,这些物体也还是可以用类似边缘提取+模板匹配的方法。但是,实际机器人操作过程中,环境会更加复杂:光照条件不确定(光照)、物体距离相机距离不确定(尺度)、相机看物体的角度不确定(旋转、仿射)、甚至是被其他物体遮挡(遮挡)。

幸好有一位叫做 Lowe 的大神,提出了一个叫做 SIFT (Scale-invariant feature transform)的超强局部特征点

Lowe, David G. "Distinctive image features from scale-invariant keypoints."International journal of computer vision 60.2 (2004): 91-110.

具体原理可以看上面这篇被引用 4万+ 的论文或各种博客,简单地说,这个方法提取的特征点只跟物体表面的某部分纹理有关,与光照变化、尺度变化、仿射变换、整个物体无关。

因此,利用 SIFT 特征点,可以直接在相机图像中寻找到与数据库中相同的特征点,这样,就可以确定相机中的物体是什么东西(物体识别)

对于不会变形的物体,特征点在物体坐标系下的位置是固定的。所以,我们在获取若干点对之后,就可以直接求解出相机中物体与数据库中物体之间的单应性矩阵。

如果我们用深度相机(如Kinect)或者双目视觉方法,确定出每个特征点的 3D 位置。那么,直接求解这个 PnP 问题,就可以计算出物体在当前相机坐标系下的位姿。

↑ 这里就放一个实验室之前毕业师兄的成果

当然,实际操作过程中还是有很多细节工作才可以让它真正可用的,如:先利用点云分割和欧氏距离去除背景的影响、选用特征比较稳定的物体(有时候 SIFT 也会变化)、利用贝叶斯方法加速匹配等。

而且,除了 SIFT 之外,后来又出了一大堆类似的特征点,如 SURF、ORB 等。

四. 无纹理的物体

好了,有问题的物体容易解决,那么生活中或者工业里还有很多物体是没有纹理的:

我们最容易想到的就是:是否有一种特征点,可以描述物体形状,同时具有跟 SIFT 相似的不变性?

不幸的是,据我了解,目前没有这种特征点。

所以,之前一大类方法还是采用基于模板匹配的办法,但是,对匹配的特征进行了专门选择(不只是边缘等简单特征)。

这里,我介绍一个我们实验室之前使用和重现过的算法 LineMod:

Hinterstoisser, Stefan, et al. "Multimodal templates for real-time detection of texture-less objects in heavily cluttered scenes." Computer Vision (ICCV), 2011 IEEE International Conference on. IEEE, 2011.

简单而言,这篇论文同时利用了彩色图像的图像梯度深度图像的表面法向作为特征,与数据库中的模板进行匹配。

由于数据库中的模板是从一个物体的多个视角拍摄后生成的,所以这样匹配得到的物体位姿只能算是初步估计,并不精确。

但是,只要有了这个初步估计的物体位姿,我们就可以直接采用 ICP 算法(Iterative closest point)匹配物体模型与 3D 点云,从而得到物体在相机坐标系下的精确位姿。

当然,这个算法在具体实施过程中还是有很多细节的:如何建立模板、颜色梯度的表示等。另外,这种方法无法应对物体被遮挡的情况。(当然,通过降低匹配阈值,可以应对部分遮挡,但是会造成误识别)。

针对部分遮挡的情况,我们实验室的张博士去年对 LineMod 进行了改进,但由于论文尚未发表,所以就先不过多涉及了。

五.深度学习

由于深度学习在计算机视觉领域得到了非常好的效果,我们做机器人的自然也会尝试把 DL 用到机器人的物体识别中。

首先,对于物体识别,这个就可以照搬 DL 的研究成果了,各种 CNN 拿过来用就好了。在 2016 年的『亚马逊抓取大赛』中,很多队伍都采用了 DL 作为物体识别算法。

然而, 在这个比赛中,虽然很多人采用 DL 进行物体识别,但在物体位姿估计方面都还是使用比较简单、或者传统的算法。似乎并未广泛采用 DL。如 @周博磊 所说,一般是采用 semantic segmentation network 在彩色图像上进行物体分割,之后,将分割出的部分点云与物体 3D 模型进行 ICP 匹配。

当然,直接用神经网络做位姿估计的工作也是有的,如这篇:

Doumanoglou, Andreas, et al. "Recovering 6d object pose and predicting next-best-view in the crowd." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.

它的方法大概是这样:对于一个物体,取很多小块 RGB-D 数据(只关心一个patch,用局部特征可以应对遮挡);每小块有一个坐标(相对于物体坐标系);然后,首先用一个自编码器对数据进行降维;之后,用将降维后的特征用于训练Hough Forest。

六. 与任务/运动规划结合

这部分也是比较有意思的研究内容,由于机器视觉的目的是给机器人操作物体提供信息,所以,并不限于相机中的物体识别与定位,往往需要跟机器人的其他模块相结合。

我们让机器人从冰箱中拿一瓶『雪碧』,但是这个 『雪碧』 被『美年达』挡住了。

我们人类的做法是这样的:先把 『美年达』 移开,再去取 『雪碧』 。

所以,对于机器人来说,它需要先通过视觉确定雪碧在『美年达』后面,同时,还需要确定『美年达』这个东西是可以移开的,而不是冰箱门之类固定不可拿开的物体。

当然,将视觉跟机器人结合后,会引出其他很多好玩的新东西。由于不是我自己的研究方向,所以也就不再班门弄斧了。

来源:知乎  作者:fly qq

原文链接:https://www.zhihu.com/question/26199861

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

工业机器人抓取时怎么定位的?用什么传感器来检测?相关推荐

  1. alex机器人 ser_机器人抓取时怎么定位的?用什么传感器来检测?

    忽然想起,自己是<机器视觉与应用>课程助教,所以这题也可以简单说一些东西. 首先,我们要了解,机器人领域的视觉(Machine Vision)跟计算机领域(Computer Vision) ...

  2. 机器人识别抓取笔记(基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计:综述)

    Real-Time Deep Learning Approach to Visual Servo Control and Grasp Detection for Autonomous Robotic ...

  3. 【机器人识别抓取】基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计

    目录 导读 1 引言 1.1 抓取综合方法 1.2 基于视觉的机器人抓取系统 2 抓取检测.视觉伺服和动态抓取 2.1抓取检测 2.2 视觉伺服控制 2.3 动态抓取 3 本文实现的方法 3.1 网络 ...

  4. python爬取图片失败显示404_python3.7中Web抓取时出现http404错误

    我收到404错误代码(如下所示)当尝试对某个网站进行网页抓取时.在 我试着在不同的论坛上寻找答案,但找不到解决办法 有人有解决方案来修复这个404错误吗?>>> from urlli ...

  5. 您遇到过网页抓取时被封IP的情况吗?

    ​网站如何检测网络爬虫? 网络爬取和网络抓取相辅相成,对于公共数据收集来说至关重要.电子商务企业会使用网络抓取工具从各个网站收集新数据.然后,将抓取到的信息用于改进业务和营销策略. 对于那些不知道如何 ...

  6. [Python] 抓取时光网的电影列表并生成网页

    抓取时光网的电影列表并生成网页 源码 https://github.com/YouXianMing/BeautifulSoup4-WebCralwer 分析 利用BeautifulSoup进行分析网页 ...

  7. python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...

    欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...

  8. html5怎样实现信息抓取,HTML5获取定位简单方案

    由来 一个客户提出一个需求,想在xiunobbs中实现,发帖时显示 定位信息,然后在查看时 可以实现,如果是Android或IOS端安装了百度地图APP的可以唤起,否则就和网页PC端的一样,直接跳转到 ...

  9. python 广告拦截_Python如何在抓取时欺骗反广告块过滤器?

    Javascript解析 您遇到的问题是在页面加载后加载数据的JavaScript过滤器.警告您正在使用adblock的消息以原始HTML格式存在,并且是完全静态的.当JavaScript调用能够验证 ...

最新文章

  1. react下移动端可吸附悬浮窗按钮,支持拖动拖拽功能
  2. 【学习笔记】mongoDB初步(一)MongoDB的安装和增删改查基本语法,使用和命令
  3. spring cloud nacos_SpringCloud Alibaba系列之Nacos配置中心玩法
  4. 在线模拟器RollerCoin使采矿业重回游戏
  5. JS疑惑-1(连续赋值)
  6. deepin下Clion连接mysql_CLion如何添加依赖库 ? 需要把mysql/Connector c++放入 用cpp连接数据库...
  7. Eclipse 中,web项目在Tomcat运行时填写不了Server name
  8. dom4j.jar有什么作用?
  9. hot编码 字符one_使用字符级RNN进行名字分类
  10. mysql gis 高德_基于高德自定义地图数据的GIS矢量地图制作
  11. 痛失阵地,又一家热门BT种子观影网站关停
  12. 菲尔人格测试(测试一下自己的分数看看)
  13. html5 dpi,关于meta viewport中target-densitydpi属性详解(推荐)_哒哒_前端开发者
  14. 锐捷交换机时钟同步设置
  15. 用二十来页PPT做个年终总结及规划
  16. STM32读写24C02遇到的问题
  17. 30 分钟用 Ranch 搭建 FTP 服务器
  18. Understand:高效代码静态分析神器详解(一)
  19. python基础 海龟绘图 绘制奥运五环
  20. vue js IOS H5focus无法自动弹出键盘的解决方法

热门文章

  1. 奖金+招聘绿色通道,这一届算法大赛关注下?
  2. 11月最佳机器学习开源项目Top10!
  3. 速成班出来的AI人才,老板到底要不要?6位导师告诉你行业真相
  4. 技术详解 | 如何用GAN实现阴影检测和阴影去除?
  5. 新手科普 | 探索机器学习模型,保障账户安全
  6. 字节一面:如何从 100 亿 URL 中找出相同的 URL?
  7. 重塑云上的 Java 语言
  8. 15 年腾讯老兵谈技术人成长之路
  9. 数据工程师生存必备工具!
  10. 特斯拉AI总监:我复现了LeCun 33年前的神经网络,发现和现在区别不大