原文地址: https://blog.csdn.net/yaked/article/details/73030668
以实验室的KUKA youBot五自由度机械臂为切入点,记得当时和实验室的同学在这上面花费了好长时间,最后也没搞定,而这又算是基础中的基础,不能忽视。
DH一般分为标准DH和改进的DH,以John J.Craig的《机器人学导论》来说,它的是Modified DH,另一本孙富春翻译的《机器人学导论——分析、控制及应用》则是用的标准DH。通过Peter Corke的那本《Robotics,Vision and Control》(已有中文版)我才知道有这两个。区别很明显DH参数表的下标如果都是一样的则是标准DH,如果有一半不一样则是Modified DH。
这样的和
这条臂比较特别的地方在于关节0和关节1之间有个偏置,特别是在于改进DH中的坐标系0和坐标系1的设置很特殊。
标准DH的介绍我是参考的孙富春翻译的《机器人学导论——分析、控制及应用》,后来接触到《Robot Modeling and Control》(已有中文版)也是标准DH。
一个刚体的自由度是6,而为什么标准DH只用四个参数呢?这里其实暗含了一个建立坐标系的原则:垂直和相交,刚好六个限制条件。这在《Robot Modeling and Control》这本书中有详细介绍。垂直相交的意思是说,建立坐标系的时候,后一个坐标系的X要与前一个坐标系的Z垂直且相交。如建立X1的时候需要与Z0垂直相交。
在孙的那本书的P62页,关于DH参数的解释如下图:
我举个例子,例如:
我记的时候就是前一个Z,和后一个的X。如右边括号里的,而这里正是与后文的改进的DH不一样的地方。
KUKA youBot机械臂的DH
-
%kuka youBot
-
clear;
-
clc;
-
close all;
-
d1=
0.147;
-
a1=
0.033;
-
a2=
0.155;
-
a3=
0.135;
-
d5=
0.113;
-
tool =
0.105;
-
-
qlim1=[
-169,
169]*pi/
180;
-
qlim2=[
-65,
90]*pi/
180;
-
qlim3=[
-151,
146]*pi/
180;
-
qlim4=[
-102.5,
102.5]*pi/
180;
-
qlim5=[
-167.5,
167.5]*pi/
180;
-
-
L(
1) = Link(
‘d’, d1,
‘a’, a1,
‘alpha’, pi/
2,
‘qlim’,qlim1);
-
L(
2) = Link(
‘d’,
0,
‘a’, a2,
‘alpha’,
0,
‘qlim’, qlim2,
‘offset’,
1.57);
-
% L(
2) = Link(
‘d’,
0,
‘a’, a2,
‘alpha’,
0,
‘qlim’, qlim2);
-
L(
3) = Link(
‘d’,
0,
‘a’, a3,
‘alpha’,
0,
‘qlim’,qlim3);
-
L(
4) = Link(
‘d’,
0,
‘a’,
0,
‘alpha’, -pi/
2,
‘qlim’,qlim4,
‘offset’,
-1.57);
-
% L(
4) = Link(
‘d’,
0,
‘a’,
0,
‘alpha’, -pi/
2,
‘qlim’,qlim4);
-
L(
5) = Link(
‘d’, d5,
‘a’,
0,
‘alpha’,
0,
‘qlim’,qlim5);
-
-
bot = SerialLink(L,
‘name’,
‘KUKA youBot’);
-
bot.display();
-
-
% bot.plot([
0
0
0
0
0]);
-
% bot.teach;
-
-
%% forward kinematics.
-
bot.tool= transl(
0,
0, tool);% EEF
-
-
bot.fkine([
0
0
0
0
0]*pi/
180);
-
-
bot.fkine([
0
0
-90
0
0]*pi/
180)
-
bot.fkine([
0
0
90
0
0]*pi/
180)
编好以后可以输入一些角度验证一下
如上图中的这个姿态,第三关节转动90°,X为33 + (655 - 302)= 386mm,Z坐标为底座到第三关节长度为302mm与Figure2中显示的一致,说明DH建立没有问题。
改进的DH那就是如John J.Craig的《机器人学导论》上的,它与标准DH的区别在于:标准DH的Link0(大地)和Link1之间为J0。而Modified DH则是Link0上有J0,Link1上有J1,基座为坐标系{0},一般让{0}和{1}重合。
Craig的书中文版P52页
P54页建立坐标系的步骤:
举个例子:
通常都是下标有一半是i -1,类似这样
clc;
clear;
close all;
L(1) = Link([ 0 0.147 0 0 ], ‘modified’ );
L(2) = Link([ 0 0 0.033 pi/2 ], ‘modified’);
L(3) = Link([ 0 0 0.155 0 ], ‘modified’);
L(4) = Link([ 0 0 0.135 0], ‘modified’);
L(5) = Link([ 0 0.218 0 -pi/2], ‘modified’) ;
youbot = SerialLink(L, ‘name’, ‘youbot’);
youbot.display()
youbot.plot([0 0 0 0 0]);
youbot.teach;
相关链接: