轴机械手机械手视觉抓取 + 振动盘上料视觉筛选系统方案
一、系统整体架构
该系统以 “视觉引导定位 + 振动盘有序上料 + 4 轴机械手精准抓取” 为核心,实现物料从无序上料到筛选定位抓取的自动化流程,适用于电子元件、五金件、塑胶件等小型物料的分拣抓取场景。系统分为上料筛选单元、视觉定位单元、机械手执行单元和控制单元四大模块,架构如下:
plaintext
[振动盘上料机] → [视觉筛选相机] → [输送带/定位台] → [视觉定位相机] → [4轴机械手] → [物料分拣区] ↓ ↓ ↓ ↓ ↓ └───────────────┴────────────────┴────────────────┴────────────────┘ 工业控制器(PLC/运动控制器)
1. 核心功能目标
二、各模块硬件选型与设计
1. 上料筛选单元(振动盘 + 视觉筛选)
(1)振动盘上料机
(2)视觉筛选相机(缺陷检测 + 尺寸测量)
2. 视觉定位单元(抓取工位精准定位)
(1)安装位置与硬件选型
(2)定位算法核心
3. 4 轴机械手执行单元
(1)机械手选型(根据负载与行程)
(2)运动控制要求
4. 控制单元(核心逻辑与通信)
(1)控制器选型
(2)通信网络设计(关键:低延迟、高同步)
通信链路 | 协议选择 | 作用 | 延迟要求 |
---|---|---|---|
视觉筛选相机→PLC | Modbus-TCP | 发送筛选结果(合格 / 不合格,物料位置) | ≤100ms |
视觉定位相机→机械手控制器 | Profinet / 以太网 IP | 发送定位数据(X,Y,θ) | ≤50ms(确保抓取同步) |
PLC→振动盘 / 输送带 | 开关量 / RS485 | 控制振动频率、输送带启停、挡料气缸动作 | ≤200ms |
机械手控制器→PLC | 以太网 TCP/IP | 反馈机械手状态(空闲 / 抓取中 / 故障) | ≤100ms |
三、软件流程与核心算法
1. 系统整体工作流程(时序逻辑)
2. 核心视觉算法(以 Halcon/OpenCV 为例)
(1)视觉筛选算法流程
python
运行
# 简化代码逻辑(OpenCV)import cv2import numpy as npdef material_screening(image): # 1. 图像预处理:去噪、二值化(突出物料轮廓) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5,5), 0) _, thresh = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY_INV) # 2. 轮廓提取(定位物料区域) contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if len(contours) != 1: # 排除多料/无料情况 return "error" # 3. 尺寸检测(计算物料外接矩形) x, y, w, h = cv2.boundingRect(contours[0]) if w < 9.9 or w > 10.1 or h < 4.9 or h > 5.1: # 假设合格尺寸:10±0.1mm(宽),5±0.1mm(高) return "unqualified" # 4. 缺陷检测(查找轮廓内的孔洞/缺口) hull = cv2.convexHull(contours[0]) hull_area = cv2.contourArea(hull) contour_area = cv2.contourArea(contours[0]) if (hull_area - contour_area) > 0.5: # 缺陷面积>0.5mm²(需标定像素与实际尺寸比例) return "unqualified" # 5. 姿态判断(通过最小外接矩形角度判断) rect = cv2.minAreaRect(contours[0]) angle = rect[2] if angle < -45 or angle > 45: # 姿态偏差超45°,不符合抓取要求 return "unqualified" return "qualified" # 合格物料,允许进入抓取工位
(2)视觉定位算法流程
python
运行
def material_positioning(image, calib_matrix): # 1. 图像预处理(同筛选,增强特征) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (3,3), 0) edges = cv2.Canny(blur, 50, 150) # 2. 特征点提取(以物料中心孔为例) circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1.2, 20, param1=50, param2=30, minRadius=2, maxRadius=4) if circles is None: return "no_target" # 3. 像素坐标转世界坐标(通过标定矩阵calib_matrix消除畸变) pixel_x, pixel_y = circles[0][0][0], circles[0][0][1] world_x = (pixel_x - calib_matrix[0][2]) / calib_matrix[0][0] # 标定矩阵:内参矩阵 world_y = (pixel_y - calib_matrix[1][2]) / calib_matrix[1][1]