机械手视觉引导相关算法

2023-11-22 16:50

本文主要是介绍机械手视觉引导相关算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达
在开发项目的过程中,产品有一个入料初定位,需要操作员把产品放到载具上后,一个大视野的相机会拍一下产品,然后伺服电机对载具进行一个调整,以保证产品在小视野的相机范围内,从而进行检测。这里我们用到了相机和伺服电机的手眼标定,及位置补正算法。
机械手分为:4轴,6轴或者XY模组或UVW模组。相关的视觉引导项目主要包括:抓取,放置,位置补正,贴合。其中相机模式又分为:单相机和多相机;相机固定安装和相机手部安装。机械手核心是通过相机拍摄Mark点,计算出产品的偏移位置,让执行机构去执行某个动作。
操作步骤主要分为:4步(标定的核心思想就是相机坐标系和机械坐标系进行统一,然后根据产品实时来料位置计算偏差)
1.相机的非线性校正(此步骤需要更具实际情况选取,由于相机镜头的光学特性比较稳定,大多数情况此步骤可以省略);
2.相机与机器人做9点标定手动标定:可以使用机器人扎9个点,然后相机拍摄次9个点的像素位置;自动标定:机器人抓住工件移动9个位置,得到9个机械坐标,相机也得到9个像素坐标,然后标定(此过程需要标定软件和机械进行实时通信,确定机械位置和像素Mark点);
3.计算机器人的旋转中心(由于机械的夹具中心和法兰中心不重合,所以需要进行旋转标定)机器人抓住工件至少旋转三个不同角度,工件要在相机视野内,相机可以得到多个像素坐标值,通过三个坐标值拟合圆心,为旋转中心;(旋转中心是否计算也要根据具体需求选取,若产品来料无角度或者产品不需要做角度补偿,则此步骤可以省略)
4.相机通过公式计算得到最终输出结果:(rx0,ry0)为旋转中心,(x,y)为被旋转的点,(x0,y0)旋转后的点旋转公式:X0 = cos(a)*(x-rx0) - sin(a)*(y-ry0) + rx0Y0 = cos(a)*(y-ry0) + sin(a)*(x-rx0) + ry0其中对应halcon核心算子为:a.计算出仿射变换矩阵:vector_to_hom_mat2d( : : Px, Py, Qx, Qy : HomMat2D)b.求旋转矩阵:hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)c.应用仿射变换矩阵求出对应点:affine_trans_point_2d( : : HomMat2D, Px, Py : Qx, Qy)d.求取圆心坐标:fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row,Column, Radius, StartPhi, EndPhi, PointOrder)转自:天眼观视界

本文仅做学术分享,如有侵权,请联系删文。

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 

38e15ab9477598cfcc51c08fbb4a49ee.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

这篇关于机械手视觉引导相关算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411533

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组