工业相机引导ABB机器人抓取系统设计与实现
·
工业相机引导ABB机器人抓取系统设计与实现
引言
在现代工业自动化中,视觉引导机器人(Vision-Guided Robotics, VGR)技术被广泛应用于物料抓取、装配、分拣等场景。本文将以工业相机引导ABB机器人抓取为例,详细介绍系统的设计思路、相机识别程序、机器人控制程序以及二者的协同工作流程。
系统概述
本系统由以下部分组成:
- 工业相机:用于识别物料的位置、姿态和类型。
- 视觉处理系统:运行图像处理算法,提取物料特征并计算坐标。
- ABB机器人:根据视觉系统的引导,完成物料的抓取和放置。
- PLC控制系统:协调相机、视觉系统和机器人的工作流程。
- 通信模块:实现相机、视觉系统、机器人和PLC之间的数据交互。
硬件配置
- 工业相机:Basler ace 2(高分辨率、高帧率)
- 视觉处理系统:PC运行Halcon图像处理库
- 机器人:ABB IRB 120(6轴工业机器人)
- PLC:三菱FX5U-64MT/ES
- 通信模块:以太网通信(TCP/IP协议)
软件配置
- 相机控制软件:Basler Pylon
- 视觉处理软件:Halcon
- 机器人控制软件:ABB RobotStudio
- PLC编程软件:GX Works3
- 通信协议:TCP/IP、Modbus TCP
系统工作流程
- 相机拍照:工业相机拍摄物料图像。
- 图像处理:视觉系统识别物料的位置、姿态和类型。
- 坐标转换:将图像坐标转换为机器人坐标系下的坐标。
- 机器人抓取:ABB机器人根据视觉系统的引导,抓取物料并放置到指定位置。
- 状态反馈:机器人完成动作后,反馈状态给PLC,触发下一步操作。
程序设计
1. 相机拍照与图像处理(Halcon程序)
以下是一个简单的Halcon程序示例,用于识别物料的位置和姿态。
* 读取图像
read_image(Image, 'part_image.png')
* 转换为灰度图像
rgb1_to_gray(Image, GrayImage)
* 阈值分割
threshold(GrayImage, Region, 128, 255)
* 形态学处理
closing_circle(Region, RegionClosing, 5.5)
* 提取轮廓
connection(RegionClosing, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 100, 1000)
* 计算物料中心坐标和角度
area_center(SelectedRegions, Area, Row, Column)
orientation_region(SelectedRegions, Phi)
* 输出结果
disp_message(3600, 'Part detected at (' + Row + ',' + Column + ')', 'window', 12, 12, 'black', 'true')
2. 坐标转换与通信(Python程序)
将Halcon计算的图像坐标转换为机器人坐标系下的坐标,并通过TCP/IP发送给机器人。
import socket
# 坐标转换函数
def image_to_robot_coords(row, col, phi):
# 假设相机与机器人的标定参数已知
scale_x = 0.1 # 像素到毫米的转换系数
scale_y = 0.1
offset_x = 100 # 相机坐标系与机器人坐标系的偏移
offset_y = 50
robot_x = col * scale_x + offset_x
robot_y = row * scale_y + offset_y
robot_phi = phi # 角度直接传递
return robot_x, robot_y, robot_phi
# 与机器人通信
def send_coords_to_robot(x, y, phi):
robot_ip = '192.168.1.10'
robot_port = 5000
# 创建TCP连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((robot_ip, robot_port))
# 发送坐标数据
data = f"{x},{y},{phi}"
sock.send(data.encode())
# 关闭连接
sock.close()
# 示例调用
row, col, phi = 200, 300, 45 # Halcon计算的图像坐标
robot_x, robot_y, robot_phi = image_to_robot_coords(row, col, phi)
send_coords_to_robot(robot_x, robot_y, robot_phi)
3. 机器人抓取程序(ABB RAPID程序)
ABB机器人根据接收到的坐标数据,执行抓取动作。
MODULE MainModule
VAR socketdev client_socket;
VAR string received_data;
VAR num robot_x, robot_y, robot_phi;
PROC main()
! 初始化TCP连接
SocketCreate client_socket;
SocketConnect client_socket, "192.168.1.20", 5000;
! 接收坐标数据
SocketReceive client_socket, received_data;
ParseCoords received_data, robot_x, robot_y, robot_phi;
! 移动到目标位置
MoveJ Offs(pHome, robot_x, robot_y, 0), v1000, fine, tool0;
MoveJ Offs(pHome, robot_x, robot_y, -50), v500, fine, tool0;
! 抓取物料
SetDO Gripper, 1;
WaitTime 0.5;
! 返回初始位置
MoveJ pHome, v1000, fine, tool0;
! 关闭TCP连接
SocketClose client_socket;
ENDPROC
PROC ParseCoords(string data, OUT num x, OUT num y, OUT num phi)
! 解析坐标数据
VAR num index1, index2;
index1 := StrFind(data, 1, ",");
index2 := StrFind(data, index1 + 1, ",");
x := StrToVal(StrPart(data, 1, index1 - 1));
y := StrToVal(StrPart(data, index1 + 1, index2 - index1 - 1));
phi := StrToVal(StrPart(data, index2 + 1, StrLen(data) - index2));
ENDPROC
ENDMODULE
4. PLC控制程序(三菱GX Works3程序)
PLC负责协调相机、视觉系统和机器人的工作流程。
// 启动相机拍照
LD X0 // 检测到物料
OUT Y0 // 触发相机拍照
// 接收视觉系统数据
LD X1 // 视觉系统完成处理
MOV D100 D10 // 存储物料X坐标
MOV D101 D11 // 存储物料Y坐标
MOV D102 D12 // 存储物料角度
// 发送数据给机器人
LD X2 // 数据准备完成
OUT Y1 // 触发机器人抓取
// 接收机器人状态反馈
LD X3 // 机器人完成抓取
OUT Y2 // 触发下一步操作
系统调试与优化
- 相机标定:确保相机坐标系与机器人坐标系的精确转换。
- 通信测试:测试TCP/IP通信的稳定性和实时性。
- 路径规划优化:优化机器人的运动路径,提高抓取效率。
- 异常处理:增加对通信失败、抓取失败等异常情况的处理逻辑。
结论
本文详细介绍了工业相机引导ABB机器人抓取系统的设计与实现,涵盖了相机识别、坐标转换、机器人控制以及PLC协调等多个环节。通过该系统,可以实现高效、精准的物料抓取,为工业自动化提供了强有力的技术支持。
参考文献
- Halcon图像处理库文档
- ABB RobotStudio用户手册
- 三菱FX5U系列PLC编程手册
- Python Socket编程指南
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)