• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于opencv的ABB工业机器人视觉调试实例分析

一起生活科学
广州市机电技师学院 广州 510000


打开文本图片集

< a rel="example_group" title="Custom title" href="http://img.resource.qikan.cn/qkimages/ksxy/ksxy202126/ksxy202126854-2-l.jpg">< a rel="example_group" title="Custom title" href="http://img.resource.qikan.cn/qkimages/ksxy/ksxy202126/ksxy202126854-3-l.jpg">

摘要:作者采用visualstudio开发平台为基础,使用视觉辨别插件opencv3.0调用摄像头进行图像识别工作。然后在ABB工业机器人仿真软件robotstudio中使用PC软件开发工具包PC SDK,开通机器人控制器二次开发的接口。通过把ABB工业机器人的动态数据链文件导入visualstudio开发平台,visualstudio开发平台的视觉识别程序把摄像头拍摄的两张图片进行识别,得出偏移数据后以socket套接字通信方式送给ABB工业机器人,工业机器人通过接收XY轴的偏移数据,执行动作偏移程序。达成摄像头识别工件变化位置,机器人自动过去拾取的机器视觉工程测试案例。

关键词:visualstudio、opencv、ABB工业机器人、robotstudio、socket套接字、机器视觉

引言:

在工业检测中利用视觉系统的非接触、速度快、精度合适、现场抗干扰能力强等突出的优点,自动视觉识别检测目前已经用于产品外形和表面缺陷检验,如木材加工检测、金属表面视觉检测、二极管基片检查、印刷电路板缺陷检查、焊缝缺陷自动识别等。这些检测识别系统属于二维机器视觉,技术已经较为成熟,其基本流程是用一个摄像机获取图像,对所获取的图像进行处理及模式识别,检测出所需的内容。

为了能达到工程实际应用效果,本人使用VS程序与ABB工业机器人仿真软件robotstudio进行数据传输,自动捕捉搬运动作,体现了机器视觉工程技术的整个编程调试流程。

正文:

软件介绍

1.1 Visual Studio

Visual Studio 是一套完整的开发工具集,用于生成ASP.NET Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。创建SQL Server解决方案,使用Visual Studio SDK创建可以扩展VisualStudio IDE的工具。首先安装visualstudio软件。

1.2 OpenCV

OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库,提供友好的机器视觉接口函数,从而使得复杂的机器视觉产品可以加速面世。

在win10系统中安装visualstudio软件和opencv软件,然后设置win10系统环境,找到安装OpenCV4.1.0下的相应安装目录的的bin路径,编辑开发软件的环境变量,如图1所示。

然后打开VisualStudio2017软件,源文件选择为C++类型,创建程序。在程序的属性管理器中导入Opencv的dll动态数据库文件,如图2所示。

在程序属性页中配置包含目录,如图3所示。配置库目录。

添加依赖项组件后,然后安装ABB工业机器人仿真软件robotstudio6.08。

1.3 RobotStudio

RobotStudio是一款非常强大的ABB机器人仿真软件,技术人员可以用RobotStudio开发新的机器人程序,特别是焊接和喷涂用途的机器人程序。

ABB工业机器人是瑞士ABB集团出品的工业用机械臂,常用于制造车间的焊接、喷涂、搬运与切割等作业过程。ABB工业机器人采用通用化模块化语言RAPID。RAPID语言类似于VB高级机器语言,包含了基本数据类型、组合数据类型和化名数据类型。RAPID语言中的进程程序没有返回值,只能用于构成指令内容;函数可以返回某一类型的数据值,可以用作指令参数;中断程序提供了中断原有程序,跳转到其他程序段并优先执行的逻辑功能。

RobotStudio是建立在ABB VirtualController控制系统上的,技术人员可以使用该软件在办公室轻易地模拟现场生产过程。

安装软件插件PC SDK。PC SDK是ABB工业人的PC软件开发工具包,使技术人员能够开通机器人控制器二次开发的接口。打开visual studio软件,在软件的引用管理器项目导入ABB机器人仿真软件安装路径中的dll动态数据库文件ABB.Robotics.Controllers、ABB.Robotics.Controllers.Discovery、ABB.Robotics.Controllers.RapidDomain。

2.通信程序范例

2.1 visualstudio图像识别程序

编程通信程序,以套接字socket通信方式连接visualstudio和robotstudio两款软件,程序具体程序如下:

// Server01.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include <opencv2\opencv.hpp>

#include<iostream>

#include<winsock.h>

#pragma comment(lib,"ws2_32.lib")

using namespace cv;

//计算二值图中白色像素数量,输入为二值图

int countPixelNum(Mat src)

{

//二值化后,像素点是0或者255

int counter = 0;

//迭代器访问像素点

Mat_<uchar>::iterator it = src.begin<uchar>();

Mat_<uchar>::iterator itend = src.end<uchar>();

for (; it != itend; ++it)

{

      if ((*it) > 0) counter += 1;//像素点大于0(即白色的像素点),则counter加1

}

return counter;

}

//对工件进行分类识别,返回值为int类型

int partDetected(int cam_flag)

{

int result = 0;

Mat inputImage;//原图像

Mat roiImage;//输出ROI图像

Mat grayImage, binaryImage, displayImg;

std::vector<std::vector<Point>> contours;

Rect partRect;

std::vector<Vec3f> circles;

char fileName[100];

int num;

std::cout << "请输入图片序号:";

std::cin >> num;

sprintf_s(fileName, "partImgs\\C%d.jpg", num);

inputImage = imread(fileName);//将相机获取的图像存储到inputImage原图像里面

if (inputImage.empty())//如果相机未获取到图像,结束程序

{

      std::cout << "获取图像为空!!!\n";

      exit(0);//退出

}

resize(inputImage, inputImage, Size(640, 480));

imshow("获取的图像", inputImage);//显示相机获取的图像

grayImage = inputImage.clone();

bitwise_not(grayImage, grayImage);//图像反差

cvtColor(grayImage, grayImage, CV_BGR2GRAY);//灰度化

threshold(grayImage, binaryImage, 150, 255, CV_THRESH_BINARY);//依据阈值对图像进行二值化分割

imshow("二值图", binaryImage);//显示二值化图像

findContours(binaryImage, contours, RETR_EXTERNAL,

CHAIN_APPROX_SIMPLE);//提取检测轮廓

float maxArea = 0;//存储最大轮廓面积

int maxIndex = 0;//存储最大轮廓对应的序号

for (int j = 0; j < contours.size(); j++)//遍历所有轮廓,提取最大轮廓

{

      float area = contourArea(contours.at(j));//获得轮廓面积大小

      if (area > maxArea)//比较轮廓大小

      {

             maxIndex = j;//将较大轮廓对应的序号存储在maxIndex

             maxArea = area;//将较大轮廓面积存储在maxArea

      }

}

void initialization();

int main() {

//int result = partDetected(0);

//printf("%d\n", result);

//定义长度变量

int send_len = 0;

int recv_len = 0;

int len = 0;

//定义发送缓冲区和接受缓冲区

char send_buf[100];

char recv_buf[100];

//定义服务端套接字,接受请求套接字

SOCKET s_server;

SOCKET s_accept;

//服务端地址客户端地址

SOCKADDR_IN server_addr;

SOCKADDR_IN accept_addr;

initialization();

//填充服务端信息

server_addr.sin_family = AF_INET;

server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

server_addr.sin_port = htons(5010);

//创建套接字

2.2 ABB机器人软件端的动作程序

MODULE Module1

VAR socketdev a;

VAR string string1:="";

PROC main()

!Add your code here

SocketClose a;

SocketCreate a;

SocketConnect a, "127.0.0.1", 5010;

WHILE TRUE DO

      SocketSend a\Str:="hello";

      SocketReceive a\Str:=string1;

      TPWrite string1;

on_True := StrToVal(string1,strVal);

IF strVal = 1 THEN

Path_10;

ENDIF

IF strVal = 2 THEN

Path_20;

ENDIF

IF strVal = 0 THEN

Path_30;

ENDIF

SocketReceive a\Str:=string1;

ENDWHILE

ENDPROC

PROC Path_10()

   MoveL Target_10,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_20,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_10_2,v1000,z100,tool0\WObj:=wobj0;

ENDPROC

PROC Path_20()

   MoveL Target_10_3,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_30,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_10_3_2,v1000,z100,tool0\WObj:=wobj0;

ENDPROC

PROC Path_30()

   MoveL Target_40,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_50,v1000,z100,tool0\WObj:=wobj0;

   MoveL Target_40_2,v1000,z100,tool0\WObj:=wobj0;

ENDPROC

ENDMODULE

结束语

本文采用visualstudio开发平台为基础,使用视觉辨别插件opencv3.0调用摄像头进行图像识别工作。然后在ABB工业机器人仿真软件robotstudio中使用PC软件开发工具包PC SDK,开通机器人控制器二次开发的接口。通过把ABB工业机器人的动态数据链文件导入visualstudio开发平台,visualstudio开发平台的视觉识别程序把摄像头拍摄的两张图片进行识别,得出偏移数据后以socket套接字通信方式送给ABB工业机器人,工业机器人通过接收XY轴的偏移数据,执行动作偏移程序。达成摄像头识别工件变化位置,机器人自动过去拾取的机器视觉工程测试案例。

参考文献

【1】[美]Adrian Kaehler Gary学习OpenCV 3(中文版)[M]清华大学出版社 2018年

【2】曾建华 VisualStudio2015C#Windows数据库项目开发[M] 电子工业出版社 2018年

【3】龚仲华 ABB工业机器人从入门到精通[M] 化学工业出版社 2020年

【4】陈瞭 ABB工业机器人二次开发与应用[M] 电子工业出版社 2021年

【5】张明文 工业机器人视觉技术及应用[M] 人民邮电出版社 2020年

【6】陈海 工业机器人应用技术[M] 电子工业出版社 2018年

【7】工控帮教研组 机器视觉原理与案例详解[M] 电子工业出版社 2020年

作者简介:

吴嘉浩(1981-)男 讲师 电气工程在职研究生 广州市机电技师学院工业机器人专业教师

*本文暂不支持打印功能

monitor