ABB机械臂手眼协作--空间点的坐标转换

2023-11-06 10:20

本文主要是介绍ABB机械臂手眼协作--空间点的坐标转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在做钢筋捆扎的机器人,涉及到如何将相机中空间点的坐标转换到机械臂base坐标系下实现捆扎。

场景描述

我们采用eyeInhand的手眼方式,设置ABB机械臂的base坐标系与大地坐标系重合,钢筋捆扎操作面(竖直放置)与机械臂base坐标系的YOZ平面平行。机械臂工作场景示意图如下图

待求问题详细描述

已知空间中一点P,点P在3D点云相机坐标系中的坐标为Pc,拍照点机械臂的位姿为Tbg(x,y,z,q1,q2,q3,q4),手眼标定的结果(相机在机械臂末端法兰坐标系下的位姿)Tgc(x,y,z,q1,q2,q3,q4),会用到中间变量P在机械臂末端法兰坐标系中的坐标记为Pg,求P在机械臂base坐标系下的坐标Pb(x,y,z)。

求解过程中关键点记录

  • 问:ABB机械臂位姿(x,y,z,q1,q2,q3,q4)这7个数的含义?

答:xyz表示机械臂末端法兰中心在机械臂base坐标系下的位置;q1,q2,q3,q4为四元数的形式,表示机械臂base到机械臂末端法兰中心的旋转关系;手眼标定结果同理

  • 问:机械臂位姿中四元数描述的旋转是遵循左手旋转法则顺时针旋转还是遵循右手旋转法则逆时针旋转?(因为旋转方向同坐标旋转矩阵不同,坐标变换的公式不同)

答:机械臂位姿表示中的四元数遵循右手旋转法则为逆时针旋转(空间坐标系的旋转一般都遵循右手法则),手眼标定结果中的四元数也遵循右手法则。

  • 问:四元数表示的坐标系的旋转为顺时针旋转和逆时针旋转时,旋转矩阵和坐标变换分别是什么?有何不同?

答:参考博客https://blog.csdn.net/weixin_44010117/article/details/107207731,和《摄影测量学基础》中的内容如下图,详细还是要去补数学中空间坐标系的旋转空间点的坐标变化,以及四元数,欧拉角,旋转矩阵,坐标变换之间的复杂关系。。。总之有点复杂,,在此暂不一一叙述。。。

问:将ABB机械臂位姿,手眼标定结果转换为变换矩阵并进行坐标变换(Pc-->Pb)python代码实现?

答:如下代码实现将位姿(x,y,z,q1,q2,q3,q4)转为变换矩阵,并将Pc-->Pb

from scipy.spatial.transform import Rotation as R#四元数转旋转矩阵
def get_matrix_quate(x, y, z,q1,q2,q3,q4):Rq = [q2,q3,q4,q1]Rm = R.from_quat(Rq)Rm = Rm.as_matrix()Rm2 = tfs.affines.compose(np.squeeze(np.asarray((x, y, z))), Rm, [1, 1, 1])return Rm2,RmPc=[72.323,171.863,1022.452]
Tgb =[850.08,-64.82,760.68,0.48883,-0.50049,0.46997,-0.53822]
Tcg = [184.324,-261.431,182.170,0.998517,0.012349,-0.038843,0.036090]
#四元数-->旋转矩阵(scipy)
qm_cg,Rmcg = get_matrix_quate(Tcg[0], Tcg[1], Tcg[2], Tcg[3], Tcg[4], Tcg[5], Tcg[6])
qm_gb,Rmgb = get_matrix_quate(Tgb[0],Tgb[1],Tgb[2],Tgb[3],Tgb[4],Tgb[5],Tgb[6])
print('位姿四元数转旋转矩阵:\n',qm_gb)
Pc = Pc+[1]
Pc = np.array(Pc)
Pg = np.dot(qm_cg,Pc)
Pb = np.dot(qm_gb,Pg)
print('Pb:',Pb)

 

这篇关于ABB机械臂手眼协作--空间点的坐标转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java轻松实现PDF转换为PDF/A的示例代码

《Java轻松实现PDF转换为PDF/A的示例代码》本文将深入探讨Java环境下,如何利用专业工具将PDF转换为PDF/A格式,为数字文档的永续保存提供可靠方案,文中的示例代码讲解详细,感兴趣的小伙伴... 目录为什么需要将PDF转换为PDF/A使用Spire.PDF for Java进行转换前的准备通过

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解