越疆魔术师如何加入机器视觉功能


#33

前边我说思路的时候就有说到换算方式,就是常用的矩阵换算,没毛病的老铁


#35

[quote=“chenxufeng, post:34, topic:242, full:true”]
你摄像头是放在哪个位置,光说个矩阵换算,咋么听的懂嘛


#36

搞定了,用的像素坐标与水平坐标的转换 ,


#37

没毛病的,坐标转换不是难点,转换方式网上也有,还很详细


#38

大哥 你好呀 我才开始学 请问要怎样 给定dobot一个坐标 然后让它指定该坐标啊? 需要编程吗 需要什么样的编译环境呢 还是怎么样?


#39

大家这个东西做出来了么?可以一起讨论下啊,我现在想做个移动的物件,机械臂抓取的实现。


#40

您好。可以交流下么?我也是做这方面的。1294109495


#42

你好 可以加下qq吗 qq 2291335301


#43

统一留下我的联系方式, QQ:312386252 e-Mail:you30l@126.com
问题与答案,她是谁?你大爷

可以给各位一些帮助,提供一些思路,我不是大神,也只是菜鸟


#44

链上形状分拣的视频


#45

然后这是颜色分拣的视频


#46

我这也做出来了

Dobot分拣货架商品


#47

二值图已经出来了,坐标不知道如何找,下一步转换到机械手臂怎么弄,知道的可以告诉我一下吗,或者把代码发给我


#48

你好~ 能交流一下吗?我也想 实现一下这个功能 但不知道从哪做起需要什么传感器~~
能否交流一下呢? 谢谢了~


#49

唯一会用到的传感器就是摄像头了,如果要加上传送带的话可能还会用到一个超声波或者红外之内的传感器


#50

我的全部代码可出售了,有兴趣的朋友可以邮箱联系。 you30l@126.com
总共两个程序,一个形状分拣,一个颜色分拣。形状分拣程序已经规整完成。


#51

使用OpenCV获取零件位置的学习笔记
曹开.元
曹开.元
8 个月前
最近公司接到一个案子,使用移动机械臂抓取圆盘上下料,目前我们的移动机器人定位精度在两厘米左右,因此需要视觉辅助定位来提高夹取的精度。

这个项目本身不是我做,出于对是视觉的兴趣,学习了一下如何使用OpenCv提取零件的坐标。

臂大概是这样的,平台是我司开发的300kg负载全向轮系列,臂为ABB的IRB1200(话说n年前我也参与了这款臂的研发…):

实际使用的时候,应该是按以下流程操作:

移动机器人先到目标位置
然后使用视觉拍摄标定点位置,获得机器人当前准确坐标
然后根据标定点计算处目标零件位置
使用移动平台上的机械臂进行夹取
下面是学习过程 :

环境:

我自己做学习用所以拍照用的是手机拍照:iPhone5S深空灰国行移动定制版

软件:python2.7,OpenCv2

OpenCv的安装:

1.1安装Python2.7

1.2安装numpy: pip install numpy

1.3下载安装opencv2.4x

1.4把OpenCV安装目录下的 “\OpenCV\opencv\build\python\2.7”的 cv2.pyd复制到Python目录 ".\Program Files\Python27\Lib\site-packages"下

具体思路如下:

获取图片
提取黑色的区域
将黑色区域进行二值化处理
获取中心区域轮廓及坐标
获取坐标中心点位置
绘制矩形及中心点 输出图片,黑色区域图,二值化图,轮廓及中心点图片。

coding:UTF-8

import cv2
import numpy as np

class Findposition:
def init(self,path):
#获取图片
self.img=cv2.imread(path)
self.gray=cv2.cvtColor(self.img,cv2.COLOR_BGR2GRAY)
self.hsv=cv2.cvtColor(self.img,cv2.COLOR_BGR2HSV)

#提取黑色的区域 
def Get_black(self):
    #get black area
    low_black=np.array([0,0,0])
    high_black=np.array([100,100,100])
    mask=cv2.inRange(self.img,low_black,high_black)
    black=cv2.bitwise_and(self.hsv,self.hsv,mask=mask)
    return black

#将黑色区域进行二值化处理 
def Get_contour(self):
    #change to gray
    black=self.Get_black()
    black_gray=cv2.cvtColor(black,cv2.COLOR_HSV2BGR)
    black_gray=cv2.cvtColor(black_gray,cv2.COLOR_BGR2GRAY)
    
    #binaryzation
    _, thresh=cv2.threshold(black_gray,10,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    img_morph=cv2.morphologyEx(thresh,cv2.MORPH_OPEN,(3,3))
    cv2.erode(img_morph,(3,3),img_morph,iterations=2)
    cv2.dilate(img_morph,(3,3),img_morph,iterations=2)
    return img_morph


#获取中心区域轮廓及坐标 
def Find_contour(self,img):
    img_cp=img.copy()
    cnts,_=cv2.findContours(img_cp,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    cnt_second=sorted(cnts,key=cv2.contourArea,reverse=True)[1]
    box =cv2.minAreaRect(cnt_second)
    return np.int0(cv2.cv.BoxPoints(box))

#绘制轮廓
def Draw_contour(self,points):
    mask=np.zeros(self.gray.shape,np.uint8)
    cv2.drawContours(mask,[points],-1,255,2)
    return mask

#获取中心位置
def Get_center(self,points):
    p1x,p1y=points[0,0],points[0,1]
    p3x,p3y=points[2,0],points[2,1]
    center_x,center_y=(p1x+p3x)/2,(p1y+p3y)/2
    center=(center_x,center_y)
    return center

#绘制中心点
def Draw_center(self,center,mask):
    cv2.circle( mask,center,1,(255,255,255),2)
    return mask

#主函数
def main_process(self):
    morph=self.Get_contour()
    black=self.Get_black()
    points=self.Find_contour(morph)
    mask=self.Draw_contour(points)
    center=self.Get_center(points)
    draw_center=self.Draw_center(center,mask)
    center_x,center_y=self.Get_center(points)

    print(center_x,center_y)
    cv2.imshow('black',black)
    cv2.imshow('morph',morph)
    cv2.imshow('img',self.img)
    cv2.imshow('contour',draw_center)
    cv2.waitKey(0)

if name== ‘main’ :
path=‘C:\Users\KaiyuanCao\Desktop\sample.jpg’
d = Findposition(path)
d.main_process()
输出图片这个其实没啥用,主要是看看效果,目标是得到中心点的位置。

实际运行效果如下:

原始图片:
圆盘的边沿太薄了,不太好提取轮廓,因此希望用中间的圆柱区域来定位

黑色区域:
这个时候白色的背景和支撑盒已经被滤掉了

二值化:

提取出中间的轮廓就可以啦,然后绘制出矩形和中心点:

运行程序,中心点的坐标输出:

#学习到此结束
While True:
end learning
break
万事开头易,而后难,然后很难很难,最后难的不行了,凡事浅尝辄止。


#52

评论不能删除,没办法,然后说明下,程序没卖的,只是当时特气愤,所有才有此一贴。然后各位有什么疑问都可以邮箱联系,尽我最大能力回答大家,帮大家答疑吧,毕竟我当初写这个程序的时候也知道有多绝望

相信大部分人都对坐标转换这块有很大疑惑,我以前写过一个文档有上传到CSDN 链接:https://download.csdn.net/download/qq_32630565/10313672

应该算是写的简单易懂了,之后会慢慢的把这个课题的所哟东西上传,但是论坛应该不会怎么来


#53

我已经用双目相机做出来了,颜色分拣的。。。


#54

2-2