【从零开始进行高精度手眼标定 eye in hand(小白向)3 非线性高精度标定法编程实现】

news2024/11/24 2:57:15

从零开始进行高精度手眼标定 eye in hand(小白向)1 原理推导

  • 前言
  • 原理推导
    • 算法框图
  • MATLAB编程计算
    • 相关优化工具箱的安装(不安装会报错)
    • 数据读取
    • 目标函数计算
    • 完整代码
    • 实验验证

传送门:
1.【从零开始进行高精度手眼标定 eye in hand(小白向)1 原理推导】
2.【从零开始进行高精度手眼标定 eye in hand(小白向)2 Tsai轴角法与四元数法编程实现】
3.【从零开始进行高精度手眼标定 eye in hand(小白向)3 非线性高精度标定法编程实现】

前言

最近由于组内的相关工作需求,需要进行机器人的高精度标定。原始的标定精度在6mm左右,虽然听起来是非常微小的偏差,但是由于研究方向手术机器人对精度要求极高。且在运动过程中,深度信息误差、畸变误差、机械误差、坐标系转换等一系列误差累积环节,将导致误差放大,因此远不能达到要求。

在经过了为其两周的研究和编程探索,最后成功将标定精度提升到0.5mm,达到了任务要求。

使用规划和智能算法对相机进行标定具有比较强的优势在于,不管是非线性规划的方法还是粒子群/遗传等智能方法的计算目标函数可以将旋转矩阵与位移矩阵一起进行计算,这种计算方法也被称之为一步法,对比传统的Tsai手眼标定的两步法可以有效避免旋转矩阵和位移矩阵计算的误差积累。当然缺点是非常不好进行编程实现,且一旦编程出现错误极有可能误差巨大,而且数学要求较高,需要一定的数学基础。

本系列的重点有三个:

  1. 原理中A,B矩阵的推导和代码计算
  2. Tsai轴角方法和四元数等二步计算方法的实现
  3. 基于非线性优化的高精度手眼标定方法的原理与代码实现

原理推导

算法框图

在这里插入图片描述

MATLAB编程计算

相关优化工具箱的安装(不安装会报错)

主要需要的相关工具箱进行优化求解:

不知道matlab怎么安装工具箱的同学也可以走传送门:

优秀的同学就可以直接自己往下看

数据读取

%% RobotEffectorPose;      %机器人末端位姿导入
img_num = 10;
x = load("E:\研究生学习\手眼标定\IMG_20230516_5\pos.txt");  
pos = zeros(4,4,img_num);
% 各个点机械臂位姿变化矩阵
for i=1:1:img_num
    pos(:,:,i) = x(((4*(i-1)+1):4*i),:);
end
% 相邻机械臂位姿变化增量 
for i=1:1:img_num-1
    A_add(:,:,i)= pos(:,:,i)\pos(:,:,i+1);
end
% 矩阵拼接
A = [];
for i=1:1:img_num-1
    A(:,:,i) =  A_add(:,:,i);
end
B = [];
%% 相机标定数据导入
load('calibrationSession0516_5.mat')
for i=1:1:img_num-1
    Rr1 = calibrationSession.CameraParameters.RotationMatrices(:,:,i);
    Rr2 = calibrationSession.CameraParameters.RotationMatrices(:,:,i+1);
    Tr1 = calibrationSession.CameraParameters.TranslationVectors(i,:);
    Tr2 = calibrationSession.CameraParameters.TranslationVectors(i+1,:);
    B_add = [Rr1' (Tr1/1000)';0,0,0,1]/[Rr2' (Tr2/1000)';0,0,0,1];
    B(:,:,i) = B_add;
end

中需要注意的两点是数据的输入格式
其中矩阵A的输入为:

x = load("E:\研究生学习\手眼标定\IMG_20230516_3\pos.txt");  

pos.tx文件中储存的是机械臂各个位姿点,由机器人基座标系到末端坐标系的变换矩阵
在这里插入图片描述
矩阵B的输入为:

load('calibrationSession0516_3.mat')

其中calibrationSession0516_3.mat是通过相机标定工具箱保存在代码同一文件夹下的标定参数
在这里插入图片描述

目标函数计算

X=[q0^2+q1^2-q2^2-q3^2  2*(q1*q2-q0*q3)  2*(q1*q3-q0*q2)  t1
   2*(q1*q2-q0*q3)  q0^2-q1^2+q2^2-q3^2  2*(q2*q3-q0*q1)  t2
   2*(q1*q3-q0*q2)   2*(q2*q3-q0*q1)  q0^2-q1^2-q2^2-q3^2 t3
   0  0  0  1];
%% 根据几何误差创建关于X的目标函数
fx_sum = 0;
for i = 1:img_num-1
    fx = A(:,:,i)*X-X*B(:,:,i);
    fx_transpose = transpose(fx);  % 计算矩阵的转置
    fx_norm_2 = trace(fx * fx_transpose);  % 计算矩阵的二范数平方
%     fx_norm_2 = sqrt(sigma_max);  % 计算二范数(最大奇异值的平方根)
%     fx_norm_2 = norm(fx, 'fro')^2;  % 计算矩阵A的二范数
    fx_sum = fx_sum + fx_norm_2;
end
Fx = fx_sum /(img_num-1);

完整代码

代码目前由于还涉及项目问题不准备完全公开,可能晚一些时间等项目结束会更新博客内容。感谢理解。
我会上传部分关键代码在资源,有能力的同学可以尝试根据博客内容补齐:
基于非线性优化的高精度手眼标定关键部分代码

完整代码和答疑真正需要的同学可以私信联系我,请私信表明来意和代码用途

实验验证

在这里插入图片描述

经过实验测量以y轴精度进行验证,整机验证进行六次采集,平均精度误差为0.361mm

在本次中参考论文:
[1]LI, W., LYU, N., DONG, M., & LOU, X. (2017). Robot hand-eye calibration by convex relaxation global optimization. Journal of Computer Applications, 37(5), 1451.
[2]李巍, 吕乃光, 董明利, & 娄小平. (2017). 凸松弛全局优化机器人手眼标定. 计算机应用, 37(5), 1451-1455.

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

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

相关文章

2023.7.13-【if】与【for】的配合使用:键入一个整数,输出结果用1234567890循环填充,填充的位数等于键入的整数

功能描述&#xff1a; 例如我们输入一个整数&#xff1a;25。输出的结果为1234567890123456789012345&#xff0c;共计25个数填充了这个输出结果。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a;int b; int c;int i;prin…

fiddler抓包工具使用大全

目录 Fiddler基础知识 HTTP协议 Fiddler的使用 HTTPS抓包 Fiddler过滤会话 对request设置断点 对response设置断点 Fiddler的编码和解码 Fiddler基础知识 Fiddler是强大的抓包工具&#xff0c;它的原理是以web代理服务器的形式进行工作的&#xff0c;使用的代理地址是&…

Camtasia Studio 2023怎么导出mp4格式的视频的详细教程介绍

很多用户刚接触Camtasia Studio 2023&#xff0c;不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 Camtasia Studio 2023保存为mp4格式的视频的详细教程 1、 打开Camtasia Studio。 Camtasia Studio- …

Linux 删除 颜色转义字符 乱码 \x1b

目录 Linux颜色控制 方式一&#xff1a;添加sed正则命令 方式二&#xff1a;将输出写入文件再读取 Git颜色控制 使用Python paramiko ssh 获取 git 输出时&#xff0c;出现乱码&#xff0c;实际上是终端输出的ANSI颜色转义字符&#xff0c;用于控制终端颜色展示&#xff1a;…

CSS---CSS面试题

目录 1.盒模型 2.offsetHeight /clientheight/scrollHeight 3.left与offsetLeft 4.对BFC规范的理解 5.解决元素浮动导致的父元素高度塌陷的问题 6.CSS样式的先级 7.隐藏页面元素 8.display: none 与 visibility: hidden 的区别 9.页面引入样式时&#xff0c;使用link与import有…

水库大坝安全监测系统是由什么组成的?

水库大坝是防洪抗灾的重要设施&#xff0c;它们的安全性直接关系到人民群众的生命财产安全。因此&#xff0c;水库大坝的安全监测必不可少。水库大坝安全监测系统是一种集成了数据采集、传输、处理和分析的技术平台&#xff0c;能够实时、准确地监测大坝的状态&#xff0c;及时…

Python实现将pdf,docx,xls,doc,wps链接下载并将文件保存到本地

前言 本文是该专栏的第31篇,后面会持续分享python的各种干货知识,值得关注。 在工作上,尤其是在处理爬虫项目中,会遇到这样的需求。访问某个网页或者在采集某个页面的时候,正文部分含有docx,或pdf,或xls,或doc,或wps等链接。需要你使用python自动将页面上含有的这些信…

青岛大学_王卓老师【数据结构与算法】Week05_09_顺序栈的操作3_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

WebSocket理解

WebSocket理解 WebSocket定义与HTTP关系相同点:不同点&#xff1a;联系总体过程 HTTP问题长轮询Ajax轮询 WebSocket特点 WebSocket 定义 本质上是TCP的协议 持久化的协议 实现了浏览器和服务器的全双工通信&#xff0c;能更好的节省服务器资源和带宽 与HTTP关系 相同点: 基于…

路径规划算法:基于蜣螂优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于蜣螂优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于蜣螂优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法蜣螂…

Linux与Windows:自由与便利的角力

引言&#xff1a; Linux与Windows作为两大常见的电脑操作系统&#xff0c;一直以来都在用户中有着激烈的争议。两者各有优势和劣势&#xff0c;也有着不同的定位和用户群体。Linux以其开源、自由和灵活的特性&#xff0c;吸引了一大批技术爱好者和专业人士&#xff1b;而Window…

数据采集专家----4通道AD采集子卡推荐

FMC136是一款4通道250MHz采样率16位AD采集FMC子卡&#xff0c;符合VITA57规范&#xff0c;可以作为一个理想的IO模块耦合至FPGA前端&#xff0c;4通道AD通过高带宽的FMC连接器&#xff08;HPC&#xff09;连接至FPGA从而大大降低了系统信号延迟。 该板卡支持板上可编程采样时钟…

【SLAM】Ceres优化库官方实例详细解析(SLAM相关问题)

在ceres-solver官方教程中提供了三个SLAM相关的优化问题&#xff0c;分别为&#xff1a;bundle_adjuster、pose_graph_2d、pose_graph_3d。本文就这三个问题进行拆解和分析。 在阅读本文之前&#xff0c;你需要确保已经知晓了Ceres的基础用法&#xff0c;这部分可以参考文章&a…

一个多线程并发执行且顺序进出的执行器设计

考虑这样一种场景&#xff0c;有一批数据需要处理&#xff0c;且每个数据是有顺序的&#xff0c;这时最简单的方式就是按顺序同步执行每个数据的处理。但是&#xff0c;在有多核cpu时这种方式无疑是对cpu资源的极大浪费&#xff0c;这时就需要多开几个线程同时对数据进行处理&a…

计算机视觉的图像标注与视觉任务

1 ​计算机视觉应用 计算机视觉是一种利用计算机和数学算法来模拟人类视觉的技术&#xff0c;可以应用于许多领域。以下是计算机视觉的八大应用&#xff1a; 图像识别&#xff1a;利用计算机视觉技术&#xff0c;可以对图像进行分类、识别和分割&#xff0c;从而实现自动化的…

FreeRTOS实时操作系统(十四)软件定时器

系列文章目录 文章目录 系列文章目录软件定时器API函数实验测试 软件定时器 定时器的作用&#xff1a;经过一段指定时间&#xff0c;触发超时事件 在裸机开发中&#xff0c;应用的是芯片自带的定时器模块&#xff0c;精度很高&#xff0c;在中断服务函数中处理信息&#xff0…

大模型基础知识 - 语言模型及其演进 公开版

本文为作者内部分享文档&#xff0c;由于不涉敏可以公开&#xff0c;分享本身是课程形式&#xff0c;有什么疑问欢迎在评论区留言。 开场白 人工智能发展到现在&#xff0c;在2个重要领域取得了重大突破&#xff0c;有望达到人类水平&#xff1a; 计算机视觉 &#xff08;Com…

【电路原理学习笔记】第2章:电压、电流和电阻:本章习题

第2章&#xff1a;电压、电流和电阻 以后还是分开做&#xff0c;每一节习题都按节做&#xff0c;不集中在一起做了&#xff0c;太累了&#xff0c;而且要忙其他事&#xff0c;好不容易凑了几天时间做这个题 本章习题 同步练习 &#xff08;2-1&#xff09;3C电荷对应于多少…

【数据网格架构】数据网格架构详解

“我想指出&#xff0c;所提供的链接都不是附属的&#xff0c;我从本文中提到的公司中没有任何收获。我做这一切是因为直到最近我才听说过数据网格&#xff0c;我很期待这次活动&#xff0c;并希望在此之前深入了解一下。我还认为这可能会让其他人感兴趣&#xff0c;并付出了额…

pytorch2.0版本简介

PyTorch 2.0 中发布了大量足以改变 PyTorch 使用方式的新功能&#xff0c;它提供了相同的 eager mode 和用户体验&#xff0c;同时通过 torch.compile 增加了一个编译模式&#xff0c;在训练和推理过程中可以对模型进行加速&#xff0c;从而提供更佳的性能和对 Dynamic Shapes …