机器视觉【1】-机械臂视觉

news2024/12/28 22:03:36

文章目录

  • Eye-to-Hand
  • Eye-in-Hand
  • 基于Eye-in-Hand型机械臂单目视觉定位
    • 单目相机标定
      • 针孔相机模型
      • 畸变
      • 标定方法
    • 机械臂手眼标定
      • 手眼标定求解
    • 图像预处理
      • 图像灰度化与二值化
      • 图像滤波
      • 图像特征匹配
    • 机械臂单目视觉定位
      • 目标物体图像深度信息
      • 目标物体中心定位
  • 参考文献

根据机械臂与相机所处的相对位置关系,一般分为 Eye-to-Hand 与 Eye-in-Hand 两种视觉系统。
在这里插入图片描述

Eye-to-Hand

Eye-to-Hand 型机械臂视觉系统指的是相机固定安装于机械臂外,不随机械臂运动,与机械臂的基坐标系相对位置关系不变。

Eye-to-Hand 型机械臂视觉系统较为简单,其只需要对相机进行标定,即能确定相机坐标系与机械臂坐标系之间的变换关系,且因相机安装于机械臂外,不受机械臂振动等因素影响,精度能得到较好的保证。但其受限于安装位置,若要进行多次定位目标,则需要安装多台相机进行定位,大大增加了成本,若定位目标处空间狭小,无合适位置安装相机,同样也不适用。

Eye-in-Hand

Eye-in-Hand 型机械臂视觉系统则指的是相机安装在机械臂的末端执行器上,跟随末端执行器一起运动。

Eye-in-Hand 型机械臂视觉系统标定时,需要先对相机进行标定,再确定相机与机械臂末端的变换关系(即手眼标定),同时还需要对机械臂进行运动学分析,以确定相机坐标系在机械臂运动过程中的变换关系,较为复杂,但能较好地应对复杂多变的定位目标需求。

基于Eye-in-Hand型机械臂单目视觉定位

  • 进行图像采集;以标定板图像通过相机标定与手眼标定,确定视觉系统的相机内外参数以及机械臂手眼矩阵;
  • 对目标图像进行图像灰度化与图像滤波,去除图像的噪声,得到质量更高的处理图片;
  • 对预处理后的一组图像进行图像匹配,基于三角测量原理,求取图像中特征点的深度信息;
  • 对预处理后的图像进行图像轮廓提取,获取目标在图像中的位姿;
  • 经坐标变换后确定目标在机械臂坐标系下的位姿。
    在这里插入图片描述

单目相机标定

相机标定:根据相机成像模型求取相机的内部参数和外部参数。

针孔相机模型

  • 相机内参矩阵

在理想的情况下,相机成像可简化为针孔成像:
在这里插入图片描述
O O O是相机的光心,为相机坐标系的原点;点 O 1 O_1 O1是相机光轴与图像平面的交点,为图像平面的中心;空间中某点 Q Q Q在相机坐标系与世界坐标系的坐标分别为 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc) ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw);点 q q q Q Q Q经成像投影后所得,在图像坐标系下的坐标为 ( X u , Y u ) (X_u,Y_u) (Xu,Yu) f f f为相机焦距,表示光心 O O O到图像平面的距离。

由相似三角形原理,可以得到:
{ X u f = X c Z c ⇒ X u = f X c Z c Y u f = Y c Z c ⇒ Y u = f Y c Z c \begin{cases}\dfrac{X_u}{f}=\dfrac{X_c}{Z_c}\Rightarrow X_u=f\dfrac{X_c}{Z_c}\\\dfrac{Y_u}{f}=\dfrac{Y_c}{Z_c}\Rightarrow Y_u=f\dfrac{Y_c}{Z_c}\end{cases} fXu=ZcXcXu=fZcXcfYu=ZcYcYu=fZcYc

通常,图像坐标系的原点不是相机光轴与图像平面的交点 O 1 O_1 O1,而是在图像的右上角,且与成像平面还存在一个缩放变换。

O 1 O_1 O1与图像坐标系原点的偏移量为 ( X 0 , Y 0 ) (X_0,Y_0) X0Y0,图像坐标系与成像平面在 X 轴与 Y 轴方向的缩放倍数分别为 f x f_x fx f y f_y fy:
{ X u = f x X c Z c + X 0 Y u = f y Y c Z c + Y 0 \begin{cases}X_u=f_x \dfrac{X_c}{Z_c}+X_0\\\\Y_u=f_y \dfrac{Y_c}{Z_c}+Y_0\end{cases}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python来实现nmap扫描

今天分享一个用python实现nmap扫描的方法,以下是实现步骤 代码如下: import subprocessmissing_ips {166.139.144.163, 31.47.8.35, 58.242.86.191, 212.178.135.62, 103.1.35.114} port "7" for missing_ip in missing_ips:# 构造nmap命令…

数学建模--蒙特卡罗法MATLAB代码保姆式解析

1.简单介绍 2.思想的实际运用 我们利用蒙特卡罗法的思想求解圆周率π的值,这里求得的肯定是近似值,我们是通过大量的模拟实验,利用概率求解的,但是这个值和我们的精确值之间还是有一定的误差的; 我们的思想就是在半径为…

智慧化赋能园区新未来:探讨智慧园区如何以科技创新为引擎,推动产业转型升级

随着科技的飞速发展,智慧化已成为推动园区产业升级和转型的重要引擎。智慧园区,以其高效、便捷、智能的特性,正逐步改变传统的产业园区模式,为产业发展注入新的活力。本文旨在探讨智慧园区如何以科技创新为引擎,推动产…

web自动化系列-selenium的3种等待方式(十一)

在ui自动化测试中,几乎出现问题最多的情况就是定位不到元素 ,当你的自动化在运行过程中 ,突然发现报错走不下去了 。很大概率就是因为找不到元素 ,而找不到元素的一个主要原因就是页面加载慢 ,代码运行速度快导致 。 …

vivado 使用 JTAG-to-AXI Master 调试核进行硬件系统通信

使用 JTAG-to-AXI Master 调试核进行硬件系统通信 JTAG-to-AXI Master 调试核为可自定义核 , 可在运行时生成 AXI 传输事务并驱动 FPGA 内部的 AXI 信号。该核支持所 有存储器映射型 AXI 接口和 AXI4-Lite 接口 , 并且可支持位宽为 32 或 64 …

Ubuntu 传输文件

scp [选项] 源文件 目标路径 以下是一些常用的 scp 命令选项: -r:递归复制目录和子目录。 -P:指定远程 SSH 服务器的端口号。 -i:指定用于身份验证的私钥文件。 -p:保留源文件的时间戳、权限和所有者。 -v&#x…

嵌入式面试-回答I2C

说明: 此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理,主要针对的是嵌入式软件面试中涉及到的问答,努力精准的抓住重点进行描述。若有不足非常欢迎指出,感谢!在总结过程中有些答案没标记参考来源&…

线性代数---行列式的性质

1. 行列式的行与列(按原顺序)互换

RabbitMQ学习记录

核心概念 Brocker:消息队列服务器实体 Exchange(消息交换机):它指定消息按什么规则,路由到哪个队列。 Queue(消息队列载体):每个消息都会被投入到一个或多个队列。 Binding(绑定):它的作用就是把exchange和queue按…

心学从0开始学习rust-十万个为什么篇章(持续更新篇章)

问答环节 1.const x 1;和let x 1有何区别呢,const申请的是全局变量所以会一直有效对吗? const 声明的常量具有全局作用域,但它们不能直接在函数内部声明。常量通常用于定义整个程序中使用的值,如配置常量或数学常量。 let 声明…

并发执行一定比串行执行快吗?

一、多线程的两个主要方向 并发:多线程之间各自执行各自的互不影响 并行:多线程之间互相竞争资源,进行读写的时候可能会产生相互覆盖 二、上下文切换 1.什么是上下文切换 在多线程编程中一般线程的个数都大于cpu的核心数,而一个cpu核心在任意时刻都只能被一个线…

ElasticSearch实战之项目搜索高亮

文章目录 1. 前情配置2、数据操作2.1 操作API2.2 数据入库 3. 高亮搜索3.1 方法封装3.2 高亮搜索 1. 前情配置 为满足ElasticSearch可在项目中实现搜索高亮&#xff0c;我们需要先做一些前情配置 导入ElasticSearch依赖 <dependency><groupId>org.springframewor…

怎么设置启用远程桌面? 如何让外网电脑远程本地内网?

如何远程控制电脑&#xff1f;最简单实用的方案是开启电脑系统自带的远程桌面功能&#xff0c;如果涉及跨网、内外网互通&#xff0c;可以同时用快解析内网映射外网。下面是方案的具体实施步骤&#xff0c;供大家参考。 怎么打开设置启用远程桌面&#xff1f; 1.在目标需要远…

【详细讲解CentOS常用的命令】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

android 创建module

文章目的&#xff1a; 快速创建module并使用 创建步骤&#xff1a; 1 创建module 2 修改module下的build.gradle文件 3 修改清单文件中MainActivity属性&#xff0c;否则APP会因为有多个启动界面而崩溃 4 在主项目build.gradle引用该object Module 至此&#xff0c;可在APP中…

排序(五)——非比较排序+排序总结

1.非比较排序 我们前面讲的排序算法都是通过比较大小来进行排序的&#xff0c;他们都是比较排序。 像基数排序、计数排序和桶排序等都不是通过比较大小来排序的&#xff0c;是非比较排序&#xff0c;在这里我们讲一下其中的计数排序和基数排序&#xff0c;而桶排序实现起来太…

在k8s 中部署有状态服务MongoDB高可用集群详解(附带镜像)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s简介 2、MongoDB介绍 3、为什么要…

网络爬虫软件学习

1 什么是爬虫软件 爬虫软件&#xff0c;也称为网络爬虫或网络蜘蛛&#xff0c;是一种自动抓取万维网信息的程序或脚本。它基于一定的规则&#xff0c;自动地访问网页并抓取需要的信息。爬虫软件可以应用于大规模数据采集和分析&#xff0c;广泛应用于舆情监测、品牌竞争分析、…

【 书生·浦语大模型实战营】作业(五):LMDeploy 量化部署

【 书生浦语大模型实战营】作业&#xff08;五&#xff09;&#xff1a;LMDeploy 量化部署 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系…

Vue2之组件通信(爆肝)

大家有什么想看的可以在评论区留言&#xff0c;我尽量满足&#xff0c;感谢大家&#xff01; 组件通信是vue中一个非常重要的内容&#xff0c;我们需要掌握好组件通信&#xff0c;那么让我为大家介绍几种组件通信的方式吧&#xff01; 一、props 这是父传子的方式&#xff0…