当前位置: 首页 > news >正文

机器人手眼标定

机器人手眼标定

  • 一、机器人手眼标定
    • 1. 眼在手上标定基本原理
    • 2. 眼在手外标定基本原理
  • 二、眼在手外标定实验
  • 三、标定精度分析

一、机器人手眼标定

要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参数,包括镜头焦距、畸变等。一般相机出厂时内参已标定完成,保存在相机内部。
相机外参表示的是机器人与相机之间的位姿转换关系(即手眼关系,因此相机外参的标定称之为机器人手眼标定)。机器人与相机在不同的使用场景下其相对位姿不固定,需要在工作现场进行标定才能获得相机与机器人之间的手眼关系。

由于机器人手眼标定会使用相机的内参,所以具有准确的内参是标定外参的前提。

机器人手眼标定的分类方式各不相同,根据相机相对于机器人的安装方式,将手眼标定分为两种:

  1. 相机独立于机器人固定在支架上,称为ETH(Eye to hand) 方式。
  2. 相机固定于机器人末端法兰上,称为EIH(Eye in hand) 方式。

同时,可使用多个随机标定板位姿或TCP 尖点触碰的方法添加标定点。
两者的主要区别在于:

  1. 多个随机标定板位姿:使用软件自动生成的轨迹点或手动添加的多个位姿,在每个位姿拍照并识别标定板角点,建立标定板、相机及机器人三者间的关系,其过程简单,标定精度高。
  2. TCP 尖点触碰:利用三点法确定标定板位姿后,建立标定板、相机及机器人三者间的关系。适用于机器人活动空间局促、无法使用上位机来控制和标定板无法安装等情况。
    分类方式如下图:
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/98e8965ab91a4c87a5f21affd197f3a0.png

1. 眼在手上标定基本原理

机器人末端通过固定架将相机固定,此时机器人末端法兰中心与相机光心之间的位姿相对固定,即下图中的未知变量X;机器人末端法兰中心相对于机器人基坐标系(Base)的位姿为已知量B;相机通过对标定板(calibration grid)进行拍照,获得相机光心和标定板上每个圆点之间的位姿关系,可得已知量C;标定板平放在相机视野可达区域,其相对于机器人基坐标之间的位姿关系为一固定值A;这样变量A、B、C、X 构成闭环关系。下列等式中,由于A 为固定值,将前两个等式合并,得到的新等式中只有X 为未知待求量。变换机器人末端位姿进行不同角度拍照,得到多组A、B、C 的值,利用这些数值进行拟合计算,得到最优的X 的值。
在这里插入图片描述:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e66883f0e3104df7873a099eb1a52462.jpeg

当使用TCP 触碰法标定时,标定板或者其它标定物放置在工作平面,机器人末端加装已知尺寸的TCP 尖点,触碰标定标定物,其中A、B、C 已知,则X 的值也可求得。
在这里插入图片描述
EIH 标定的是相机光心和机器人末端法兰中心之间的位姿关系。如果相机相对于机器人末端法兰中心坐标发生移动,对应的外参就会相应发生变化,此时需要重新标定外参。

2. 眼在手外标定基本原理

机器人末端通过法兰连接已知尺寸的标定板,可以得到标定板(calibration grid)上的每个标志点相对于机器人基坐标Base 的坐标A;通过相机拍照获得标定板上每个圆点的图像,可以得到相机光心相对于标定板上每个标志点的坐标B;相机光心和机器人基坐标(Base)之间的位姿关系X 为待求量。A、B 和X构成闭环,形成等式,可以在等式中求解未知数X。通过移动机器人,变换标定板相对于相机的位姿,可以得到多组等式,对这些等式的值进行拟合优化计算,最终得到最优的X 的值。位姿关系如下图所示。
在这里插入图片描述
当使用TCP 触碰法标定时,标定板放置在工作平面,机器人末端加装已知TCP 的尖点,触碰标定板圆点,其中A、B 已知,求解X 的值。
实际操作中,坐标A的获取有以下三种方式:

  1. 标定板到法兰末端位置关系已知(三点法或是已知连接件尺寸计算得到),则A 可以直接计算得到;
  2. 标定板到法兰末端位置关系未知,则通过标定板在标定过程中的一系列相对移动,通过数值方法计算得到标定板到法兰末端的位置关系,进而计算得到A;
  3. 标定板与机器人末端不固定,则可以通过已知tcp 坐标的尖点对标定板标志点进行触碰的方式计算得到A的数值。以上三种方式对应三种不同获取标定数据的方式。

ETH 方式标定的是相机光心和机器人基坐标之间的位姿关系。如果机器人基坐标或者相机发生移动,对应的外参就会相应发生变化,此时需要重新标定手眼关系。

二、眼在手外标定实验

下图为相机从上至下拍摄标定板,且计算出标定板圆心实验过程图片。
在这里插入图片描述
代码不便拿出来展示。其余实验过程此处省略。

三、标定精度分析

本人分别进行了采用多个随机标定板位姿的眼在手外标定和TCP尖点触碰进行标定实验。
多个随机标定板位姿标定方法:集成了3D相机采集数据、机器人轨迹规划、数据处理算法,自动化程度较高,但标定精度较低,平均在2.5mm左右。
TCP尖点触碰方法:需要人工实时指导调整位置,但标定精度较高,1mm以内。
经过多次相机引导机器人进行标定实验,总结下来 机械臂的运动重复性、光照条件、反射和阴影等环境因素、相机的内参、用于提取特征点的算法的准确性都会是影响标定精度的因素。

相关文章:

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换,就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…...

基于Springboot + vue实现的校园失物招领系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

关于C语言初步的一些基础知识整理(2)

“本篇是对于C语言初步中一些基础知识的简单整理,内容较为琐碎,但实用” 在C语言中,格式控制符是用于指定数据输出格式的特殊字符,不同的数据类型有着其对应的格式控制符。具体的: %f 用于输出浮点型数据&#xff08…...

Linux驱动开发:深入理解I2C时序(二)

在Linux驱动开发中,I2C时序的理解和正确处理是保证I2C设备正常工作和通信的关键。I2C协议的时序特性决定了数据的有效传输和设备间的协作。因此,掌握I2C的时序细节,以及如何在Linux内核中进行时序处理,能够让开发者更好地处理设备通信问题。 本文将继续深入探讨I2C通信协议…...

逆向安卓抓包

打开Mumu网易,打开设置,打开其他,开启root权限 打开Mumu网易,找到apk安装藏航准备网.apk charles配置:proxy setting 端口9888 查看当地IP:help--->local IP address SSL Proxying Setting--->Add---->IP…...

Spring源码分析之事件机制——观察者模式(一)

目录 事件基类定义 事件监听器接口 事件发布者接口及实现 事件广播器实现 小小总结 Spring源码分析之事件机制——观察者模式(一)-CSDN博客 Spring源码分析之事件机制——观察者模式(二)-CSDN博客 Spring源码分析之事件机制…...

QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件,功能为暂停扫描,并在暂停后显示继续按钮,点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…...

SHViT模型详解

模型简介 SHViT是一种创新的 单头视觉Transformer ,旨在优化计算效率和内存使用。它的核心设计理念围绕着消除传统视觉Transformer架构中的冗余元素,特别关注宏观和微观设计层面的问题。 SHViT采用了 1616的大跨度patchify stem 和 3阶段结构 ,这种独特的设计不仅有效减少…...

QGIS Server安装部署教程

一、QGIS 安装部署 1、下载安装QGIS链接如下图,选择最新的安装包文件QGIS-OSGeo4W-3.34.14-1.msi,下载完成后运行安装。 2、安装时选择QGIS安装路径不要带空格,此处会影响QGIS Server安装运行。 3、安装过程省略,安装完成后打…...

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化

基于 Apache Commons Pool 实现的 gRPC 连接池管理类 GrpcChannelPool 性能分析与优化 1. 输出关键信息的代码示例 日志记录方法 使用以下代码记录连接池的关键信息,帮助分析连接池的状态和性能瓶颈: import org.apache.commons.pool2.impl.GenericO…...

【C语言】

目录 第一个C语言程序题目实际应用程序要求输入描述输出描述示例 程序实现三级目录 第一个C语言程序 打开VS创建项目&#xff08;视图-解决方案管理器&#xff09;创建源文件&#xff08;后缀.c&#xff09;.c会按照C的语言编译代码 c #include <stdio.h> //std-标准 //…...

标题:利用Spring Boot构建JWT刷新令牌应用

标题&#xff1a;利用Spring Boot构建JWT刷新令牌应用 去发现同类优质开源项目:https://gitcode.com/ 一、项目介绍 在Java开发中&#xff0c;Spring Boot以其简洁的配置和强大的功能深受开发者喜爱。Spring Boot Refresh Token with JWT 是一个开源示例项目&#xff0c;它展…...

性能测试工具的原理与架构解析

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在软件开发与运维领域&#xff0c;性能测试是确保系统稳定、高效运行的关键环节。性能测试工具作为实现这一目标的重要工具&#xff0c;通过模拟真实用户行为和负载…...

基于STM32的自动水满报警系统设计

目录 引言系统设计 硬件设计软件设计系统功能模块 水位检测模块报警模块自动控制模块控制算法 水位检测逻辑报警触发逻辑代码实现 水位检测模块报警控制模块自动控制逻辑系统调试与优化结论与展望 1. 引言 水满报警系统在家庭、农业、工业等领域广泛应用&#xff0c;通过实时…...

C语言 数组编程练习

1.将数组A的内容和数组B中的内容进行交换。&#xff08;数组一样大&#xff09; 2.创建一个整形数组&#xff0c;完成对数组的操作 实现函数Init()初始化数组全为0 实现print()打印数组的每个元素 实现reverse()函数完成数组元素的逆置 //2.创建一个整形数组&#xff0c;完…...

Windows 远程桌面连接Ubuntu操作 可以自由相互复制文件 粘贴板等

1.windows不用动&#xff0c;用IP和用户密码直接连 Ubuntu设置 详细参考&#xff1a;https://blog.csdn.net/qq_22370409/article/details/88914093 新建的用户需要加入sudo 使有权限。 效果 可以自由相互复制文件 粘贴板等。...

链表OJ题(一)

(一&#xff09;轮转数组 . - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例一&#xff1a; 方法一&#xff1a;暴力求解 先用一个变量存储数组中的最后…...

C/C++中new/delete与malloc/free的区别及对象管理

C/C++中new/delete与malloc/free的区别及对象管理 在C/C++编程中,动态内存管理是一个核心且复杂的话题,其中new、delete、malloc和free是四个经常用于此目的的工具。尽管它们都涉及到内存的分配和释放,但它们在处理对象时的方式和效果却大相径庭。本文将通过示例来说明这些工…...

我的nvim的init.lua配置

nvim的配置文件路径在&#xff5e;/.config/nvim路径下&#xff1a; 一、目录如下&#xff1a; coc-settings.json文件是配置代码片段路径的文件init.lua配置文件的启动脚本lua/config.lua 全局配置文件lua/keymaps.lua 快捷键映射键文件lua/plugins.lua 插件的安装和配置文件…...

2025第1周 | JavaScript中的正则表达式

目录 1. 正则表达式是个什么东东&#xff1f;1.1 怎么定义正则1.2 对象字面量方式1.3 类创建方式 2. 怎么使用2.1 实例方法2.1.1 exec方法2.1.2 test方法 2.2 字符串中的方法2.2.1 match/matchAll2.2.2 replace/replaceAll2.2.3 split2.2.4 search 3. 规则3.1 修饰符3.2 字符类…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...