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

相关文章

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre