UR机械臂运动学正逆解方法

最近几个月因为工作接触到了机械臂的项目,突然对机械臂运动方法产生了兴趣,也就是如何控制机械臂的位置和姿态。借用一张网上的图片,应该是ur5的尺寸。我用到的是ur3机械臂,除了尺寸不一样,各关节结构和初始位置和ur5是一样的。

ur机械臂是六自由度机械臂,由D-H参数法确定它的运动学模型,连杆坐标系的建立如上图所示。我当时在这个地方的理解上走了不少弯路,后来找个一个视频,我觉得讲解地比较容易理解,可以参考一下Denavit-Hartenberg参数视频详解。ur机械臂DH参数表如下,

转动关节θi是关节变量,连杆偏移di是常数。


关节编号


α(绕x轴)


a(沿x轴)


θ(绕z轴)


d(沿z轴)


1


α1=90


0


θ1


d1=89.2


2


0


a2=-425


θ2


0


3


0


a3=-392


θ3


0


4


α4=90


0


θ4


d4=109.3


5


α5=-90


0


θ5


d5=94.75


6


0


0


θ6


d6=82.5

由此可以建立坐标系i在坐标系i-1的齐次变换矩阵,注意每次不管平移还是旋转是相对于当前的运动坐标系变换,矩阵右乘

那么把DH参数代入就可以得到所有相邻坐标系的变换矩阵

所以末端坐标系6到基座固定坐标系0的变换矩阵。那么求正解就很简单了,只要输入六个关节角度θi,就得到末端坐标在基坐标系的变换矩阵T。ur机械臂的视教板上末端点的坐标是用六个值[x, y, z, rx, ry, rz]表示的。前三个值[x, y, z]是三维笛卡尔坐标,表示空间位置,后三个值[rx, ry, rz]是坐标旋转向量,表示空间姿态。我们得到的变换矩阵T怎么变成六值坐标[x, y, z, rx, ry, rz]呢?设

T的左上角的3x3矩阵是旋转矩阵,旋转矩阵和旋转向量之间可以通过罗德里格斯(Rodrigues)变换进行转换。opencv里有相应的函数调用。算法也比较简单,不用opencv的函数自己写代码也不难。T的右上角3x1就是空间位置[x, y, z]。这样有变换矩阵T得到六值坐标,完成了正解。

逆解相对要复杂一些,由末端的空间位置和姿态,计算可能的关节角度。逆解的方法有解析法,迭代法和几何法。其中解析法用数学推导,可以得到全部根,但是计算复杂。有的机械臂可以得到无穷解,比如7轴机械臂。而ur的6轴机械臂是有有限解的。这里推导一下ur的逆解。

首先计算求变换矩阵T过程其中的一些中间矩阵。

,其中c23=cos(θ23),s23=sin(θ23)。

得到。计算

,得到

等式两边矩阵的行列应该分别相等,由第三行第四列得到,可解得,有两个解。这里注意写程序的时候,求解这里的反正切是用atan2()这类的函数,返回之在(-π,+π]。而反余弦的返回值在[0,π],从而保证在2π范围每个解是唯一的。

由第三行第三列得,可解得,两个解。由第三行第二列得到,可解得

接着由

计算

,得出等式左边等于

,两边平方,令

同样由,令

两式相加得到,则,有两个解。

把θ3带入,得,其中t2=tanθ2。两式消去c2,得到

最后得到,从而得到θ4

p { margin-bottom: 0.1in; line-height: 120% }
a:link { }

综合有两个解的情况,ur机械臂逆解总共由2x2x2=8组解。

按照上面的算法,用python写了两个程序,一个正解一个逆解验证一下。工作手边是ur3的机械臂,上面的图和表都是ur5的,换成ur3的参数。正解算出来都没有问题,可以和实际机械臂的空间位姿对应。可是逆解算出来8组值,好像只有四组值是对的。一直还没理解到底是怎么回事,仔细检查了算法和程序好像都没有错阿,不知道是哪里出了问题。网上也没有找到答案,如果哪位大神知道,望不吝赐教!

原文地址:https://www.cnblogs.com/mightycode/p/9095059.html

时间: 2024-08-09 14:50:09

UR机械臂运动学正逆解方法的相关文章

机械臂运动学入门(二)

中篇:核心之机械臂运动学 一. 建立机械臂坐标系的步骤 对于一个新机构可以按照下面的步骤建立连杆坐标系: 1. 找出各关节轴,并标出这些轴线的延长线.在下面的步骤2至步骤5中,仅考虑两个相邻的轴线(关节轴i和i+1). 2. 找出关节轴i和i+1之间的公垂线或关节轴i和i+1的交点,以关节轴i和i+1的交点或公垂线与关节轴的交点作为连杆坐标系{i}的原点. 3. 规定Zi轴沿关节轴i的指向. 4. 规定Xi轴沿公垂线的指向,如果关节轴i和i+1相交,则规定Xi轴垂直于关节轴i和i+1所在的平面.

基于 Mathematica 的机器人仿真环境(机械臂篇)[转]

完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些函数,所以请使用最新版.[email protected]).  1 导入机械臂的三维模型  2 (正/逆)运动学仿真  3 碰撞检测  4 轨迹规划  5 (正/逆)动力学仿真  6 控制方法的验证  不妨先看几个例子: 逆运动学 双臂协作搬运 显示运动痕迹 (平移)零空间运动  无论你是从事机器

DH参数法建立机器人的运动学正解

运用DH参数法时坐标系建立的两个约定: (1)x_i与z_(i-1)垂直 (2)x_i与z_(i-1)相交 坐标系i与坐标系i-1的其次变换矩阵为: a为两z轴的距离,d为两x轴的距离. alpha与theta的正方向约定为: 下面举三个例子: a.平面二自由度机器人 clear; clc; syms theta1 alpha1 a1 d1 theta2 alpha2 a2 d2 a b theta d; A1=[cos(theta1),-sin(theta1)*cos(alpha1),sin(

机械臂的运动规划

如果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很成熟了,无需再研究,但实际上,机械臂运动规划非常难-- 如 果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很 成熟了,无需再研究,但实际上,机械臂运动规划非常难,之所以这么难,主要是因为规划问题的维度太高(具体后面分析),目前暂无兼顾实时性与最优性的规划 算

摄像机标定用于机械臂抓举等(利用标定将图像上的点映射为三维坐标)

在实验室或者是工程上,我们常常需要将拍摄到的图像的二维图像坐标来计算三维坐标. 如上图所示,我们有上图这样的一副图片.我们需要将物体和机械臂的三维位置算出来,使得机械臂能够精确的抓住物体. 我们采用张正友标定的方法标定出内外参数,利用其内参与外参数算出其对应的三维坐标.具体公式略!可以参考张PAMI的论文. /*/ //author:YeahPingYE //function: //time:2014/11/25 // // // // // //*/ #include<highgui.h>

首个成功无需植入大脑的脑控机械臂

卡内基梅隆大学的研究团队与明尼苏达大学合作,在无创机器人设备控制领域取得了突破.研究人员使用一种非侵入性的脑机接口(BCI),开发了有史以来首个成功的,由心理控制的机械臂,该机械臂具有连续跟踪和跟踪计算机光标的能力. 仅凭思想就能够无创地控制机器人设备将具有广泛的应用,特别是有益于瘫痪患者和运动障碍患者的生活. BCI已被证明仅使用从大脑植入物感应到的信号来控制机器人设备的良好性能.当机器人设备可以进行高精度控制时,它们可以用于完成各种日常任务.但是,到目前为止,那些脑机接口成功地控制机械手臂的

用javascript写了一个机械臂数据仿真效果

前言: 前段时间在网上看到网友用单片机制作了一个写字机器人,我想了想应该不太难,于是就有了这个. 先上效果图: 机械臂的运动空间: 如图所示,是一个平面的机械臂实现,以机械臂的原点建立笛卡尔直角坐标系,那么机械臂的末端执行机构的坐标就可以用下列两个方程组来表示: 此方程可以实现通过电机的运转角度来得到末端执行机构的精确位置坐标 . 但在实际情况下这个方程组的运用场景十分有限.因为往往对于机械臂的角度没有太大的要求和限制其运动空间. 实际运用往往都是驱动步进电机的步进角度来实现控制机械臂的输出位移

线段树求逆序数方法 HDU1394&amp;&amp;POJ2299

为什么线段树可以求逆序数? 给一个简单的序列 9 5 3 他的逆序数是3 首先要求一个逆序数有两种方式:可以从头开始往后找比当前元素小的值,也可以从后往前找比当前元素大的值,有几个逆序数就是几. 线段树就是应用从后往前找较大值得个数.(一边更新一边查) 当前个数是 n = 10 元素   9  5   3 9先加入线段树,T[9]+=1:查从T[9]到T[10]比9大的值,没有sum = 0: 5 加入线段树,T[5] += 1,查从T[5]到T[10]比5大的值,有一个9,sum +=1: 3

[CQOI2014]排序机械臂

洛谷P3165 [CQOI2014]排序机械臂 https://www.luogu.org/problem/show?pid=3165 题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到摄低的物品的位置P1,并把左起第一个至P1间的物品反序:第二次找到第二低的物品的位置P2,并把左起第二个至P2间的物品反序...最终所有的物品都会被排好序. 上图给出_个示例,第_次操作前,菝低的物品在位置4,于是把第1至4的物品反序:第二次