UR机械臂位置数据旋转矢量与欧拉角变换

2024-04-24 04:44

本文主要是介绍UR机械臂位置数据旋转矢量与欧拉角变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

UR机械臂位置数据旋转矢量与欧拉角变换

​ 本文介绍在UR机械臂控制过程在,使用函数返回的数据为旋转矢量,但是该数据对于控制非常不友好,我们需要将旋转转化为欧拉角的数据,才可以直观观察到工具端相对于不同轴旋转的角度。本文针对这一问题,描述旋转矢量与欧拉角转换的概念,以及如何通过Python代码进行两者之间相互转换的函数。

参考链接:https://forum.universal-robots.com/t/pose-rotation-order/223/2

旋转矢量->欧拉角

​ 欧拉角是用来描述刚体在固定坐标系下的方向的三个角任何方向都可以通过围绕一个坐标系的轴组成三个基本旋转来实现。具体来说,从参照系出发,分别沿X、Y、Z轴旋转γ、β、α的角度,就可以得到方向。参考框架以蓝色显示,旋转方向以红色显示。角γ, β和α也可以称为RPY(滚转,俯仰和偏航)。

在这里插入图片描述

​ 欧拉角用于理解机器人的方向,但它应该转换为旋转矩阵,以进行运动学和动力学等计算。给定欧拉角γ, β和α,旋转矩阵可由下式计算。

在这里插入图片描述
在这里插入图片描述

​ 给定旋转矩阵R,欧拉角由下式确定。

在这里插入图片描述

​ python解算代码如下所示:

# 将旋转矢量转为欧拉角
def rotvec2rpy(self, pose):rx, ry, rz = posetheta = np.sqrt(rx * rx + ry * ry + rz * rz)kx = rx / thetaky = ry / thetakz = rz / thetacth = np.cos(theta)sth = np.sin(theta)vth = 1 - np.cos(theta)r11 = kx * kx * vth + cthr12 = kx * ky * vth - kz * sthr13 = kx * kz * vth + ky * sthr21 = kx * ky * vth + kz * sthr22 = ky * ky * vth + cthr23 = ky * kz * vth - kx * sthr31 = kx * kz * vth - ky * sthr32 = ky * kz * vth + kx * sthr33 = kz * kz * vth + cthbeta = np.arctan2(-r31, np.sqrt(r11 * r11 + r21 * r21))# 这里需要判断分母为cos(beta)=0的情况if beta > np.deg2rad(89.99):beta = np.deg2rad(89.99)alpha = 0gamma = np.arctan2(r12, r22)elif beta < -np.deg2rad(89.99):beta = -np.deg2rad(89.99)alpha = 0gamma = -np.arctan2(r12, r22)else:cb = np.cos(beta)alpha = np.arctan2(r21 / cb, r11 / cb)gamma = np.arctan2(r32 / cb, r33 / cb)rpy = np.zeros(3)rpy[0] = gammarpy[1] = betarpy[2] = alphareturn rpy

欧拉角->旋转矢量

​ 轴角表示通过一个单位向量𝑢表示旋转轴的方向,一个角度e .描述绕轴旋转的大小来参数化线性空间中的旋转轴角表示可以定义两个方向之间的关系。

在这里插入图片描述

​ 如果我们有一个固定的参考系,比如UR机器人的基本框架,我们可以用四个数字来表示任何方向:三个元素代表单位方向矢量和一个角度。如果我们乘以单位方向矢量的每个元素的角度,我们可以减少到三个数值,我们可以称之为旋转矢量

在这里插入图片描述

​ 轴角表示在机器人控制中很有用,因为它不受欧拉角的连续性和旋转序列问题的限制。然而,物理方向与旋转矢量的数值之间很难匹配。在UR机器人中,我们使用旋转向量来表示机器人姿势的方向。要转换为旋转矩阵,旋转矢量应分为角度矢量和单位方向矢量。

在这里插入图片描述

然后,需要进一步计算如下。

在这里插入图片描述

给定一个旋转矩阵,旋转向量可以计算如下:

在这里插入图片描述

​ python解算代码如下所示:

# 将欧拉角转为旋转矢量
def rpy2rotvec(self, pose):gamma, beta, alpha = poseca = np.cos(alpha)cb = np.cos(beta)cg = np.cos(gamma)sa = np.sin(alpha)sb = np.sin(beta)sg = np.sin(gamma)rotation_matrix = np.zeros((3, 3))rotation_matrix[0, 0] = ca * cbrotation_matrix[0, 1] = ca * sb * sg - sa * cgrotation_matrix[0, 2] = ca * sb * cg + sa * sgrotation_matrix[1, 0] = sa * cbrotation_matrix[1, 1] = sa * sb * sg + ca * cgrotation_matrix[1, 2] = sa * sb * cg - ca * sgrotation_matrix[2, 0] = -sbrotation_matrix[2, 1] = cb * sgrotation_matrix[2, 2] = cb * cgtheta = np.arccos((rotation_matrix[0, 0] + rotation_matrix[1, 1] + rotation_matrix[2, 2] - 1) / 2)sth = np.sin(theta)if sth == 0:return np.zeros(3)kx = (rotation_matrix[2, 1] - rotation_matrix[1, 2]) / (2 * sth)ky = (rotation_matrix[0, 2] - rotation_matrix[2, 0]) / (2 * sth)kz = (rotation_matrix[1, 0] - rotation_matrix[0, 1]) / (2 * sth)rovetc = np.zeros(3)rovetc[0] = theta * kxrovetc[1] = theta * kyrovetc[2] = theta * kzreturn rovetc

如有表述错误或侵权,请指正,谢谢

这篇关于UR机械臂位置数据旋转矢量与欧拉角变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元