本篇我们在《python机器人编程——VREP数字孪生四轴机械臂联合仿真》的基础上,将引入单目摄像头(或视觉传感Vision_sensor),并在python侧获取摄像头的图像,并进行视觉处理,通过建立一个视觉抓取场景(三类垃圾的自动分类),利用色彩识别原理和二维码定位方法,用python创建识别模块对单目摄像头传过来的图像进行分析获取不同类型垃圾的位置坐标,并与UARM远程控制程序进行流程化集成,最终实现机械臂自动根据垃圾摆放场景,自动将三类不同的垃圾,准确抓取,并放入对应的垃圾桶中。
在上篇VREP仿真下面,我们增加的视觉传感(Vision_sensor)的位置其实是比较理想的,即镜头是水平的,成像的平面与水平面是平行的,下图中,我们已经看到在四个角上确定的位置放入了四个二维码,如果是没有旋转分量,可以看到摄像头的成像是绝对俯视图,如下图:
然而,在现实情况下,我们架设的摄像头(非工业摄像头)很难达到像仿真环境一下绝对的俯视,所以我们在仿真环境中加入适当的旋转分量,以模拟实际的情况,这样摄像头的成像不是100%俯视图了,就出现了一些偏离:
于是,摄像头所获得的图像和俯视图获得的图像出现了位置偏差,视觉抓取的第一步任务就是将这个图像的所有像素转换到世界坐标系下面,这里我们通过识别四个事先确定位置的二维码(从左上角顺时针号码分别是:0,1,2,3),来将图片进行转换,转换到绝对俯视图以解决摄像头有旋转的问题:
这个转换我已经在之前的博文里面详细介绍过了(机器视觉实用工具集NO.11——利用二维码实现免棋盘格标定的相机坐标转换简易工具)这里不再赘述。
效果如下():
变换成俯视图:
如上图,我们已经将原来图像转换成了俯视图,并且对四个二维码的距离也进行了调整(以1个像素代表1mm),这样就可以通过图像的像素坐标,进行平移转换就可以非常容易得到物体的实际坐标了。
这里需要识别的垃圾是三种颜色,识别的方法是通过颜色查找,这部分已经在机器视觉实用工具集NO.4——颜色查找可视化工具,在HSV、LAB、RGB三个颜色空间轻松进行颜色查找及python机器人视觉编程——入门篇(下)中有详细说明,这里也不赘述。
识别后进行坐标变换,如下图,世界坐标为黄色(x,y)坐标系,变换后俯视图为图像坐标系红色(u,v)(此处以0号二维码为原点),由于我们已经矫正了图像不用考虑旋转问题,两坐标系之间是简单的平移变换关系:
x=u
y=500-v
这样,当我们识别出物体的图像坐标(u,v),就可以马上求出该物体的世界坐标了(x,y),机械臂可以根据这个坐标就可以进行抓取了。
至此,核心的问题解决后,就可以根据顺序抓取的逻辑,进行编程实现了,主要流程如下:
未完待续…