8_机械臂工作台坐标系标定及验证

857d58e690b3274d9ee2b2e52a6d8886.jpeg

1、机械臂实际数据

AUBO 机械臂xOxy方式标定用户坐标系:

O:

 a7eff84a2ad55751724756efb1d19b93.png

X轴正半轴一点:

77e9c99b65d446462a8f08d0edf4edc0.png

XOY象限任意一点(还是有一些要求的):

ba7d26e047c1fc6336bb607ac9d3e030.png    

一些坐标点的验证:

1596a52e84207a82c5063795e9f95c66.png

aad4909e582da3e5047cb5095eadebc7.png

c5a51c3d45a11d0cd01e67d5f98b9c81.png

2、如何根据上述3点,计算work1坐标系与base坐标系的关系?

最开始在网上没找到相关的资料(论资料搜索对程序员的重要性),唯一一篇有参考价值的还需要充会员,最后不得不冲了会员,太想知道了。之后就有了向量叉积那篇笔记。有了前两篇笔记的铺垫,本次笔记就纯是将思路代码化,是个体力活,要注意的是坐标系之间的相对关系,那块调了好一会儿。

部分代码(通过work1坐标系X轴向量和work1 XOY象限向量的叉积求work1坐标系的Z轴向量,并单位化):    

//po  origin          (-0.163555, 0.396348, 0.071506, -90.148331, 45.409718, -90.103142)
//px  x-axis positive (-0.326204, 0.396016, 0.071179, -90.148407, 45.409279, -90.103485)
//pxy first quadrant  (-0.324761, 0.231210, 0.071491, -90.148285, 45.409794, -90.103714)
    //px-po,  px向量减去po向量,基于base坐标系
    double user_px_x = -0.326204+0.163555;
    double user_px_y = 0.396016-0.396348;
    double user_px_z = 0.071179-0.071506;


    //pxy-po, pxy向量减去po向量,基于base坐标系
    double user_pxy_x = -0.324761+0.163555;
    double user_pxy_y = 0.231210-0.396348;
    double user_pxy_z = 0.071491-0.071506;


    double user_px_modulus = sqrt(user_px_x*user_px_x +
                                  user_px_y*user_px_y +
                                  user_px_z*user_px_z);


    double user_pxy_modulus = sqrt(user_pxy_x*user_pxy_x +
                                  user_pxy_y*user_pxy_y +
                                  user_pxy_z*user_pxy_z);     


    //px normal,  px向量单位化
    double user_px_x_mormal = user_px_x/user_px_modulus;
    double user_px_y_mormal = user_px_y/user_px_modulus;
    double user_px_z_mormal = user_px_z/user_px_modulus;
    //pxy normal,  pxy向量单位化
    double user_pxy_x_mormal = user_pxy_x/user_pxy_modulus;
    double user_pxy_y_mormal = user_pxy_y/user_pxy_modulus;
    double user_pxy_z_mormal = user_pxy_z/user_pxy_modulus;


    Eigen::Vector3d user_px_axis_normal(user_px_x_mormal, user_px_y_mormal, user_px_z_mormal);
    Eigen::Vector3d user_pxy_axis_normal(user_pxy_x_mormal, user_pxy_y_mormal, user_pxy_z_mormal);    
          
    //a = {ax,ay,az), b = (bx,by,bz),  根据px和pxy向量的叉积求pz
    //CrossProduct -->> poz axb =(aybz -azby,azbx -axbz,axby -aybx}
    double user_pz_x = user_px_y_mormal*user_pxy_z_mormal - user_px_z_mormal*user_pxy_y_mormal;
    double user_pz_y = user_px_z_mormal*user_pxy_x_mormal - user_px_x_mormal*user_pxy_z_mormal;
    double user_pz_z = user_px_x_mormal*user_pxy_y_mormal - user_px_y_mormal*user_pxy_x_mormal;


    double user_pz_modulus = sqrt(user_pz_x*user_pz_x+
                                  user_pz_y*user_pz_y +
                                  user_pz_z*user_pz_z);


    //pz 向量单位化
    double user_pz_x_normal = user_pz_x/user_pz_modulus;
    double user_pz_y_normal = user_pz_y/user_pz_modulus;
    double user_pz_z_normal = user_pz_z/user_pz_modulus;


根据px和pz可求py,并将其单位化。
工作台坐标系相对于base坐标系的旋转矩阵:
    R << user_px_x_mormal, user_py_x_normal, user_pz_x_normal,
         user_px_y_mormal, user_py_y_normal, user_pz_y_normal,
         user_px_z_mormal, user_py_z_normal, user_pz_z_normal;

根据《7_机械臂工作台坐标系理论_一般坐标系的映射_2》笔记,构建齐次矩阵,代码如下:    

Eigen::MatrixXd pos(3,1);  
    pos(0,0) = -0.163555;  
    pos(1,0) = 0.396348;  
    pos(2,0) = 0.071506;  


    Eigen::MatrixXd homogeneous(1,4);    
    homogeneous(0,0)=0.0f;  
    homogeneous(0,1)=0.0f;  
    homogeneous(0,2)=0.0f;  
    homogeneous(0,3)=1.0f;  


    Eigen::MatrixXd posX(3,1);  
    posX(0,0) = -0.326204;  
    posX(1,0) = 0.396016;  
    posX(2,0) = 0.071179;  


    Eigen::MatrixXd posTest(3,1);  
    posTest(0,0) = 0.214300;  
    posTest(1,0) = -0.138937;  
    posTest(2,0) = 0.200473;  


    Eigen::Matrix     <double,            </double,3, 4> m3x4;    
    Eigen::Matrix     <double,            </double,4, 4> m4x4;    


    m3x4 << R, pos;  
    m4x4 << m3x4, homogeneous;

3、验证结果  

计算base下的原点pos在工作台坐标系下的坐标:    

根据红框欧拉角的姿态,发现工作台坐标系相对于base坐标系X轴和Y轴相对偏移很小(从标定点坐标也可以看出,第二个点相对第一个点只在base的X轴上进行了移动),Z轴方向相反。  

4151c2dac5816d09df4b3192331e283b.png 

-0.400319, -0.121499, 0.547598;的验证:  

5964166342e2e1f489249d32b035e277.png  

欢迎关注:  

43a16249a413467c67a44a43d1d30a85.png

公众号后台留言“用户坐标系标定” 可获取源码工程。  

其他相关笔记:

7_机械臂工作台坐标系理论_一般坐标系的映射_2

6_工作台坐标系理论_向量叉积_1

5_机械臂工具位姿计算理论及代码实现验证

4_机械臂坐标系简介

3_机械臂位姿变换计算过程代码

4_机械臂位姿求逆理论及代码计算

1_机械臂位姿变换计算过程_1

1_机械臂姿态表示旋转矩阵与XYZ固定角坐标系_ZYX欧拉角的公式转换&3D相机应用例子

             

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

90V转12V1A恒压WT6039

90V转12V1A恒压WT6039 WT6039降压DC-DC转换器芯片专为处理宽泛的电压输入范围设计&#xff0c;支持从12V至90V。该芯片集成了关键功能&#xff0c;如使能控制开关、参考电源、误差放大器、过热保护、限流保护及短路保护等&#xff0c;以确保系统在各种操作条件下的安全与稳定性…

【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能

【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能 一&#xff0c;文档简介二&#xff0c;RT1170 CSI Y8黑白格式配置与测试2.1 软硬件情况2.2 Y8黑白格式的具体配置2.3 测试结果 一&#xff0c;文档简介 RT1170的CSI可以支持YUV格式&#xff0c;所谓的YUV分为三个分量&#xff1a…

xocde编辑器支持修改为中文吗?不支持

xocde编辑器支持修改为中文吗&#xff1f; 不支持

储能电池竞争出海分析

锂电池的激烈竞争进一步蔓延到储能行业。为保市场份额和现金流稳定&#xff0c;不少储能电池企业都开始大幅度降低报价只求中标储能项目。 随着6月的储能电芯的最高限价和系统报价都已经贴近成本价&#xff0c;一二三线的储能电池厂商将要如何应对&#xff1f; 1、储能规模快速…

Redis进阶 - Redis 淘汰策略

我们知道Redis是分布式内存数据库&#xff0c;基于内存运行&#xff0c;可是有没有想过比较好的服务器内存也不过几百G&#xff0c;能存多少数据呢&#xff0c;当内存占用满了之后该怎么办呢&#xff1f;Redis的内存是否可以设置限制&#xff1f; 过期的key是怎么从内存中删除的…

重学java 80.Junit单元测试

我总是着急的解释我自己&#xff0c;却忘了厚爱无需多言 —— 24.6.21 一、Junit介绍 1.概述 Junit是一个单元测试框架,可以代替main方法去执行其他的方法 2.作用 可以单独执行一个方法,测试该方法是否能跑通 3.注意 Junit是第三方工具,所以使用之前需要导入jar包 二、J…

1.SG90

目录 一.实物图 二.原理图 三.简介 四.工作原理 一.实物图 二.原理图 三.简介 舵机&#xff08;英文叫Servo&#xff09;&#xff0c;是伺服电机的一种&#xff0c;伺服电机就是带有反馈环节的电机&#xff0c;这种电机可以进行精确的位置控制或者输出较高的扭矩。舵机…

在线二维码解码器:将二维码转换成网址链接

在当今数字化时代&#xff0c;二维码&#xff08;QR码&#xff09;已成为一种便捷的信息传递工具。它不仅可以存储大量数据&#xff0c;还能快速分享信息。然而&#xff0c;有时我们需要将二维码中的内容转换为网址链接&#xff0c;以便在浏览器中直接访问。小编将详细介绍如何…

关于jupyter notebook的使用经验

jupyter notebook 第一点&#xff0c;调整每次打开jupyter notebook的时候的位置第二点&#xff0c;如何设置jupyter notebook可以使用本地anaconda创建的虚拟环境呢&#xff1f;第三点&#xff0c;使用jupyter notebook的技巧 以下三点都是独立的&#xff0c;可以根据自己的需…

【Gradio】构建自定义多模态聊天机器人

这是我们构建自定义多模态聊天机器人组件两部分系列的第一部分。在第一部分中&#xff0c;我们将修改 Gradio 聊天机器人组件&#xff0c;使其能够在同一消息中显示文本和媒体文件&#xff08;视频、音频、图片&#xff09;。在第二部分中&#xff0c;我们将构建一个自定义的文…

3D视觉引导机器人提升生产线的自动化水平和智能化程度

随着智能化技术的不断发展&#xff0c;汽车制造企业正积极寻求提升智能化水平的途径。富唯智能的3D视觉引导机器人抓取技术为汽车制造企业提供了一种高效、智能的自动化解决方案。 项目目标 某汽车制造企业希望通过引入智能化技术提升生产线的自动化水平和智能化程度。他们希望…

哎呦我, HashMap KeySet有序? 好像是哈

背景&#xff1a;有8个格子&#xff0c;上架物品时需要从第一个格子开始上架&#xff0c;不能跳格子&#xff0c;也就是说 如果格子1空着&#xff0c;就不能把物品放到格子2。有这么个顺序的情况 前人模块功能实现&#xff1a; 用HashMap 初始化格子信息&#xff0c;然后用 Ke…

2024年【T电梯修理】免费试题及T电梯修理考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理免费试题参考答案及T电梯修理考试试题解析是安全生产模拟考试一点通题库老师及T电梯修理操作证已考过的学员汇总&#xff0c;相对有效帮助T电梯修理考试总结学员顺利通过考试。 1、【多选题】TSGT7005-2012《…

基于vue3 + ant-design 使用阿里图标库iconfont.cn

对于使用 iconfont.cn 的用户&#xff0c;通过设置 createFromIconfontCN 方法参数对象中的 scriptUrl 字段&#xff0c; 即可轻松地使用已有项目中的图标。 组件封装 IconFont <template><IconFont :type"iconType" /> </template><script se…

联想Y7000P 2023款拆机教程及升级内存教程

0.电脑参数介绍 联想Y7000P 2023电脑&#xff0c;笔者电脑CPU为i7-13700H&#xff0c;14核20线程&#xff1b;标配内存为三星的DDR5-5600MHz-8GB*2&#xff0c;由于电脑CPU限制&#xff0c;实际内存跑的频率为5200MHz; 2个内存插槽&#xff0c;2个固态硬盘插槽。每个内存插槽最…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…

python自动化办公工具:自动批量生成奖状的工具(可视化)

&#x1f446;点击关注 获取更多编程干货&#x1f446; 不知道大家有没有注意到一种趋势&#xff0c;现在即便是那些非程序员&#xff0c;甚至对计算机一窍不通的人&#xff0c;也开始学习Python了&#xff0c;其“普及程度”实在让人感到有些惊讶。 那么&#xff0c;对于那些…

Github 2024-06-22 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3JavaScript项目2Python项目2HTML项目1Rust项目1Dart项目1Dockerfile项目1Shell项目1C++项目1Swift项目1RustDesk: 用Rust编写的…

一个电商创业者眼中的618:平台大变局

战役结束了&#xff0c;战斗还在继续。 一位朋友去年5月创业&#xff0c;网上卖咖啡&#xff0c;这个赛道很拥挤&#xff0c;时机也不好&#xff0c;今年是他参加第一个618。朋友说&#xff0c;今年的目标是锤炼团队&#xff0c;总结方法&#xff0c;以及最重要的——活下去。…

getPhysicalNumberOfCells获取列数不是合并前实际列数

问题就是:有的导入复杂表头被合并的单元格有默认空字符串&#xff0c;有的直接不存在这个单元格 实际我需要下面这种情况 断点可以看到这个导入第一行合并了&#xff0c;被合并单元格还有默认的空字符串 解决办法就是在合并单元格里面判断&#xff0c;不是第一行第一列都设置…