机器人控制系列教程之UR机器人运动学求解

运动学简介

运动学是处理运动的几何学以及与时间有关的量,包括正向运动学逆向运动学
正运动学指从机器人的关节空间描述计算笛卡尔空间描述的机器人末端执行器的位置和姿态,该问题通常是一个几何问题,给定一组关节角度,计算末端坐标系相对于基坐标系的位置和姿态。
逆运动学指从笛卡尔空间描述下的机器人末端执行器位置和姿态反算出机器人关节空间应该达到的关节角度组合,是实现机器人控制的一个基本问题。
对于串联机器人(开链)通常因为正运动学方程是非线性的,逆运动学问题较为困难,很难得到封闭解,甚至无解。而正运动学的像空间就形成了逆运动学的有解空间,称为机器人的工作空间

UR机器人的正向运动学

UR构型的机械臂是优傲机器人公司在2008年推出的轻巧灵活的协作机器人,它通过直观的用户界面开创了人性化的3D编程设计,让任何人都可以快速设置和操作机器人手臂。迄今为止,优傲机器人已经累计销售超过5万台。2013年,UR在中国成立优傲机器人贸易(上海)有限公司,迄今已有七十余家代理商。

可得D-H参数为:

利用MATLAB机器人工具箱,可进行如下编写,建立UR5机器人模型。

clear,clc,close all;
%% 建立机器人DH参数,初始状态为竖直状态
L1=Link('d',162.50,'a',0,'alpha',0,'modified');
L2=Link('d',0,'a',0,'alpha',pi/2,'offset',pi/2,'modified');
L3=Link('d',0,'a',425,'alpha',0,'modified');
L4=Link('d',126.70+6.6,'a',392.25,'alpha',0,'offset',pi/2,'modified');
L5=Link('d',99.70,'a',0,'alpha',pi/2,'modified');
L6=Link('d',99.60-4.5,'a',0,'alpha',-pi/2,'modified');
 
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','UR5')
Theta=[0 0 0 0 0 0];
Theta=Theta/180*pi; %换算成弧度
forwarda=robot.fkine(Theta) %求正解的齐次变换矩阵
W=[-1000,+1000,-1000,+1000,-1000,+1000];
robot.plot(Theta,'tilesize',150,'workspace',W); %显示三维动画
robot.teach(forwarda,'rpy' ) %显示roll/pitch/yaw angles,GUI可调界面

代码运行完成后,可看到:

UR5机器人逆向运动学

机械臂逆向运动学建模就是已知机械臂初末位姿,对各个自由度的空间角度和位置求解的一种方法,由于逆向运动学的特殊性,最后的结果可能是多解或者是无解。当存在多个解时需要考虑实际情况,比如机械臂是否能到达目标位置,即机械臂的避障问题以及空间位置是否存在等问题,而无解时说明机械臂不能到达所求的位置。据文献所述,Pieper 等提出一种针对六个旋转关节及后面三个关节轴相交机械臂的求逆解的方法,他也证明出具有该结构的机械臂可以进行逆运动学求解,这种求解方法也可用于其它类型的机械臂。不同的求解法都各有优缺点,在实际使用中,要根据具体任务和机械臂的具体结构选择合适的机械臂逆向运动学求解法。下表对机械臂进行逆向运动学求解的几种方法的分析对比:

本文使用代数法进行求解,已知末端相对于世界坐标系的总变换矩阵,求解各关节角度。因为变换矩阵第四行是 0 和 1,其余元素皆与角度有关,根据矩阵相等就是每个元素对应相等,所以可得一系列等式。对公式(3-14)的两边进行可逆矩阵左乘,可分别求出对应关节角度,过程如下:

  1. 求解 θ 1 \theta_1 θ1。基体坐标系到末端坐标系得转换矩阵表示为:
    在这里插入图片描述
    可见, θ 1 \theta_1 θ1具有两个解,同理,以此类推即可求解出其他各个关节角的代数式。详见[1]。最后得到的所有解可罗列为:

所有关节角度求出后,可知非奇异姿态存在八组结果,因此要进行选解以满足任务需求。在实际运动过程中,每一时刻只能选择一组角度进行运动,因此必须对多解的情况挑选最合适的解。首先解要满足机械臂各关节的运动范围,为避免关节碰撞要运动“最短行程”。为提高移动效率,尽量选择移动关节较小部分,避免移动较大关节”。当机械臂运动路径存在障碍时,“近解”可能发生碰撞就要选择“远解”。因此要计算全部的解进行选择。
MATLAB的机器人工具箱中,对于串联机器人的逆运动学的求解,可在建立完成机器人的正向运动之后调用ikine函数进行逆向运动学求解,该函数基于正向运动学和雅可比转置矩阵开发了一套通用方法,对于任何机械臂位形都可以计算其正向运动学和雅可比转置矩阵,且不存在奇异性,其内部通过Levenberg-Marquadt可变步长求解器。原理如下:

假设机器人的期望位姿和当前位姿之间存在着一个特殊的弹簧,这个弹簧既可以改变机器人末端的姿态也可以改变位置,而当前位姿和期望位姿之间的差异值是一个包含平移和旋转分量的六维分量。而这个弹簧的力旋量也是一个六维向量,包含力和力矩。通过雅可比矩阵的转置矩阵可将该力旋量转换为关节力,依次迭代,从而求解出来关节的角度,具体详细原理解释请见[2]中的8.4小节。代码实现如下:

clear,clc,close all;
%% 建立机器人DH参数,初始状态为竖直状态
L1=Link('d',162.50,'a',0,'alpha',0,'modified','qlim',[-180,180]/180*pi);
L2=Link('d',0,'a',0,'alpha',pi/2,'offset',pi/2,'modified','qlim',[-145,65]/180*pi);
L3=Link('d',0,'a',425,'alpha',0,'modified','qlim',[-65,220]/180*pi);
L4=Link('d',126.70+6.6,'a',392.25,'alpha',0,'offset',pi/2,'modified','qlim',[-180,180]/180*pi);
L5=Link('d',99.70,'a',0,'alpha',pi/2,'modified','qlim',[-135,135]/180*pi);
L6=Link('d',99.60-4.5,'a',0,'alpha',-pi/2,'modified','qlim',[-360,360]/180*pi);
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','UR5')

%% 正向运动学
% 已知:
Theta=[-170 0 0 0 0 0];
Theta=Theta/180*pi; %换算成弧度
forwarda=robot.fkine(Theta) %求正解的齐次变换矩阵
W=[-1000,+1000,-1000,+1000,-1000,+1000];
robot.plot(Theta,'tilesize',150,'workspace',W); %显示三维动画
robot.teach(forwarda,'rpy' ) %显示roll/pitch/yaw angles,GUI可调界面
% 求解
Tf=robot.fkine(Theta);

%% 逆向运动学
% 已知:
Tf;
%求解:
Thetai=robot.ikine(Tf,'q0',robot.offset);
Thetai=Thetai/pi*180 %换算成角度

运行结果如下图所示。

参考资料

[1] https://blog.csdn.net/AlbertDS/article/details/123679114

[2]. PeterCorke.机器人学、机器视觉与控制:MATLAB算法基础[M].电子工业出版社,2016.
在这里插入图片描述

  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UR机器人运动学分析可以通过UR机器人提供的软件包`ur_kinematics`来实现。该软件包包含了UR机器人的正向和逆向运动学计算,可以帮助用户计算机器人末端执行器的姿态和位置。 UR机器人的正向运动学可以计算出机器人末端执行器在关节空间中的姿态和位置,即输入机器人每个关节的角度,计算出末端执行器的姿态和位置。 UR机器人的逆向运动学可以计算出机器人每个关节的角度,即输入末端执行器的姿态和位置,计算出每个关节的角度。 要使用`ur_kinematics`软件包进行运动学分析,您需要: 1. 安装`ur_kinematics`软件包 打开终端窗口并输入以下命令以安装`ur_kinematics`软件包: ``` sudo apt-get install ros-kinetic-ur-kinematics ``` 2. 编写运动学分析程序 您可以使用ROS编写一个运动学分析程序,该程序将调用`ur_kinematics`软件包中的正向或逆向运动学计算函数,并将结果输出到终端窗口或保存到文件中。以下是一个简单的ROS程序,演示如何使用`ur_kinematics`软件包进行正向运动学计算: ```python #!/usr/bin/env python import rospy from ur_kinematics.ur_kin_py import forward, inverse # 机器人关节角度 joint_angles = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # 进行正向运动学计算 pose = forward(joint_angles) # 输出末端执行器的姿态和位置 print("Pose: ", pose) ``` 该程序首先导入`forward`函数,该函数用于进行正向运动学计算。然后,程序定义了机器人的关节角度,并调用`forward`函数计算出末端执行器的姿态和位置。最后,程序输出末端执行器的姿态和位置。 您可以将上述代码保存为一个ROS节点并运行它,然后在终端窗口中查看输出结果。 逆向运动学计算与正向运动学计算类似,只需调用`inverse`函数即可。 注意:UR机器人运动学分析是一个广泛的领域,涉及到许多复杂的数学和物理概念。上述程序只是一个简单的示例,无法涵盖所有情况。如果您需要更深入的运动学分析,请参考相关文献或咨询专业人士。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值