MATLAB Robotics Toolbox

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Robotics Toolbox学习
    • 1、D-H参数
      • 1.连杆参数在连杆坐标系中的表示方法
      • 2.坐标系建立步骤
  • 二、位姿描述
    • 1、二维空间
    • 2、三维空间
  • 三、运动学
    • 1、建立机器人模型
    • 2、求解运动学正解
    • 3、雅可比矩阵
  • 四、机器人轨迹规划
    • 1、关节空间
    • 2、笛卡尔空间
  • 五、基于MATLAB的关节型六轴机械臂轨迹规划仿真实例
  • 六、附表
    • 1、Link类
    • 2、serialink类
  • 总结


前言

Robotics toolbox

一、Robotics Toolbox学习

一些自用的参考的robotics toolbox 代码学习的记录

1、D-H参数

1.连杆参数在连杆坐标系中的表示方法

  1. a i = 沿 X i 轴,从 Z i 移动到 Z i + 1 的距离 a_i=沿X_i轴,从Z_i移动到Z_{i+1}的距离 ai=沿Xi轴,从Zi移动到Zi+1的距离
  2. α i = 绕 X i 轴,从 Z i 移动到 Z i + 1 的角度 \alpha_i=绕X_i轴,从Z_i移动到Z_{i+1}的角度 αi=Xi轴,从Zi移动到Zi+1的角度
  3. d i = 沿 Z i 轴,从 X i − 1 移动到 X i 的距离 d_i=沿Z_i轴,从X_{i-1}移动到X_{i}的距离 di=沿Zi轴,从Xi1移动到Xi的距离
  4. θ i = 绕 Z i 轴,从 X i − 1 移动到 X i 的角度 \theta_i=绕Z_i轴,从X_{i-1}移动到X_{i}的角度 θi=Zi轴,从Xi1移动到Xi的角度

2.坐标系建立步骤

1)找出各关节轴,并标出这些轴线的延长线。
2)找出关节轴 i i i i + 1 i+1 i+1之间的公垂线或关节轴 i i i i + 1 i+1 i+1的交点,以关节轴 i i i i + 1 i+1 i+1的交点或公垂线与关节轴 i i i的交点作为连杆坐标系{ i i i}的原点。
3)确定Z轴:如果关节是旋转的,Z轴按右手定则大拇指指向为正方向,关节转角θ为关节变量。如果关节是移动的,Z轴定在沿直线运动方向的正方向,连杆偏移d为关节变量。
4)确定X轴:规定 X i X_i Xi沿着公垂线的方向,如果关节轴 i i i i + 1 i+1 i+1相交,则规定 X i X_i Xi轴垂直于两关节所在的平面。
5)确定Y轴:通过右手定则确定Y轴的方向。大拇指指向Z轴的方向,以x轴为准,逆时针旋转90°的方向为y轴的方向。
6)当第一个关节变量为0时,规定坐标系{0}和{1}重合。对于坐标系{N},其原点和 X N X_N XN的方向可以任意选取。但是在选取时,通常尽量使连杆参数为0。

二、位姿描述

1、二维空间

T = SE2(x, y, theta);    	% x、y为偏移量,theta为旋转角度(弧度制)
%SE——special Euclidean group 特殊欧几里得群
T = transl2(x, y); 			% (3x3矩阵)纯平移变换
trplot2(T);					%二维平面绘出相应的旋转矩阵

2、三维空间

代码如下(示例):

T1= SE3(T);									%将 SE(2)变换提升为 SE(3)(4x4)
rotx(alpha), roty(beta), rotz(theta);		% 绕xyz轴旋转的旋转矩阵(3x3)
trplot(T);									% 画出相应的旋转矩阵
tranimate(T);								% 旋转动画
transl( [x, y, z] );						% 平移变换(4x4)
trotx(theta), troty(theta), trotz(theta);	% 只有旋转的绕xyz轴旋转的齐次变换矩阵(4x4)

三、运动学

1、建立机器人模型

L(i) = Link( [theta, d, a, alpha, sigma] ) 			
% 定义关节,DH参数:关节角、连杆偏距、连杆长度、连杆转角,sigma=1为移动副
L(i).qlim = [min, max]							% 关节角度限制
Robot = SerialLink( L, 'name', 'Robot' )		% 将Link连接成一个机械臂
theta = [0 pi/2 0 0 pi 0];						% 初始关节角度
Robot.plot(theta) 								% 画出机械臂,theta为关节初始角度
Robot.display									% 输出机械臂信息
Robot.teach										% 机械臂操控交互界面		

link类其他的参数

名称 用法
jointtype 0-标准DH,1-改进DH
offset 关节变量的偏移量(转动副为角度,移动副为位移)
mdh 0-标准DH,1-改进DH

2、求解运动学正解

机器人正运动学:已知或给定一组关节角,计算出工具坐标系相对于基坐标系的位置和姿态,也就是说,用正运动学来确定机器人末端执行器的位姿。(得出连杆n相对于连杆0的位置和姿态)

机器人逆运动学:给定机械臂末端执行器的位置和姿态,计算所有可到达给定位置和姿态的关节角。

Robot.fkine(theta)						% 正运动学
Robot.ikine6s(T)						% 逆运动学封闭解
Robot.ikine(T)							% 逆运动学数值解						

3、雅可比矩阵

% q是位姿
Robot.jacob0(q)							% 对于基坐标系的雅克比矩阵
Robot.jacobn(q)							% 对于末端坐标系的雅克比矩阵

四、机器人轨迹规划

1、关节空间

[q, qd, qdd] = jtraj(init_ang,targ_ang,step)		
% init_ang——初始位姿,targ_ang——结束位姿,step——步数
%q——角度,qd——角速度,qdd——角加速度

2、笛卡尔空间

Tc = ctraj(T0, T1, n)			% T0——初始齐次变换矩阵,T1——结束时齐次变换矩阵, n——步数

五、基于MATLAB的关节型六轴机械臂轨迹规划仿真实例

%% MATLAB素质三连
clear all
clc
%% 实验一 基于MATLAB的关节型六轴机械臂仿真
%% 参数定义
%% 机械臂为六自由度机械臂
%角度转换
angle=pi/180;  %度
 
%D-H参数表
theta1 = 0;   D1 = 0.4;   A1 = 0.025; alpha1 = pi/2; offset1 = 0;
theta2 = pi/2;D2 = 0;     A2 = 0.56;  alpha2 = 0;    offset2 = 0;
theta3 = 0;   D3 = 0;     A3 = 0.035; alpha3 = pi/2; offset3 = 0;
theta4 = 0;   D4 = 0.515; A4 = 0;     alpha4 = pi/2; offset4 = 0;
theta5 = pi;  D5 = 0;     A5 = 0;     alpha5 = pi/2; offset5 = 0;
theta6 = 0;   D6 = 0.08;  A6 = 0;     alpha6 = 0;    offset6 = 0;

%% DH法建立模型,关节转角,关节距离,连杆长度,连杆转角,关节类型(0转动,1移动)

L(1) = Link([theta1, D1, A1, alpha1, offset1], 'standard')
L(2) = Link([theta2, D2, A2, alpha2, offset2], 'standard')
L(3) = Link([theta3, D3, A3, alpha3, offset3], 'standard')
L(4) = Link([theta4, D4, A4, alpha4, offset4], 'standard')
L(5) = Link([theta5, D5, A5, alpha5, offset5], 'standard')
L(6) = Link([theta6, D6, A6, alpha6, offset6], 'standard')

% 定义关节范围
L(1).qlim =[-180*angle, 180*angle];
L(2).qlim =[-180*angle, 180*angle];
L(3).qlim =[-180*angle, 180*angle];
L(4).qlim =[-180*angle, 180*angle];
L(5).qlim =[-180*angle, 180*angle];
L(6).qlim =[-180*angle, 180*angle];

%% 显示机械臂
robot0 = SerialLink(L,'name','six');
f = 1 									%画在第1张图上
theta = [0 pi/2 0 0 pi 0];				%初始关节角度
figure(f)
view(3);
robot0.plot(theta);
title('六轴机械臂模型');
%% 加入teach指令,则可调整各个关节角度
robot1 = SerialLink(L,'name','sixsix');
f = 2
figure(f)
view(3);
robot1.plot(theta);
robot1.teach
title('六轴机械臂模型可调节');
%% 实验二 基于MATLAB的六轴机械臂轨迹规划仿真

%% 2.2求解运动学正解
robot2 = SerialLink(L,'name','sixsixsix');
theta2 = [0.1,0,0,0,0,0];   			%实验二指定的关节角
p=robot2.fkine(theta2)       			%fkine正解函数,根据关节角theta,求解出末端位姿p
q=ikine(robot2,p)            			%ikine逆解函数,根据末端位姿p,求解出关节角q

%% 2.3 jtraj 已知初始和终止的关节角度,利用五次多项式来规划轨迹
% T1=transl(0.5,0,0);					%根据给定起始点,得到起始点位姿
% T2=transl(0,0.5,0);					%根据给定终止点,得到终止点位姿
T1=transl(0.5,0,0);						%根据给定起始点,得到起始点位姿
T2=transl(0,0.5,0);						%根据给定终止点,得到终止点位姿
init_ang=robot2.ikine(T1);				%根据起始点位姿,得到起始点关节角
targ_ang=robot2.ikine(T2);				%根据终止点位姿,得到终止点关节角
step = 20;
f = 3

%轨迹规划方法
figure(f)
[q ,qd, qdd]=jtraj(init_ang,targ_ang,step);
 %五次多项式轨迹,得到关节角度,角速度,角加速度,50为采样点个数
grid on
T=robot2.fkine(q);						%根据插值,得到末端执行器位姿
nT=T.T;
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
title('输出末端轨迹');
robot2.plot(q);							%动画演示 

%% 求解位置、速度、加速度变化曲线
f = 4
figure(f)
subplot(3,2,[1,3]); 					%subplot 对画面分区 三行两列 占用1到3的位置
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%输出末端轨迹
robot2.plot(q);							%动画演示

figure(f)
subplot(3, 2, 2);
i = 1:6;
plot(q(:,1));
title('位置');
grid on;

figure(f)
subplot(3, 2, 4);
i = 1:6;
plot(qd(:,1));
title('速度');
grid on;

figure(f)
subplot(3, 2, 6);
i = 1:6;
plot(qdd(:,1));
title('加速度');
grid on;

t = robot2.fkine(q);					%运动学正解
rpy=tr2rpy(t);   						%t中提取位置(xyz)
figure(f)
subplot(3,2,5);
plot2(rpy);

%% ctraj规划轨迹 考虑末端执行器在两个笛卡尔位姿之间移动  
f = 5
T0 = robot2.fkine(init_ang);			%运动学正解
T1 = robot2.fkine(targ_ang);			%运动学正解

Tc = ctraj(T0,T1,step);  				%得到每一步的T阵

tt = transl(Tc);
figure(f)
plot2(tt,'r');
title('直线轨迹');



六、附表

1、Link类

操作函数 用途
A 连杆变换矩阵
RP 关节类型:
friction 摩擦力
nofriction 摩擦力忽略
dyn 显示动力学参数
islimit 测试关节是否超出软限制
isrevolute 测试是否为旋转关节
isprismatic 测试是否为移动关节
display 连杆参数以表格形式显示
char 转为字符串
theta 关节角度
d 连杆偏移量
a 连杆长度
alpha 连杆扭角
sigma 旋转关节为0,移动关节为1
mdh 标准的D&H为0,否则为1
offset 关节变量偏移量
qlim 关节变量范围[min,max]
m 连杆质量
r 连杆相对于坐标系的质心位置3x1
I 连杆的惯性矩阵(关于连杆重心)3x3
B 粘性摩擦力(对于电机)1x1或2x1
Tc 库仑摩擦力1x1或2x1
G 齿轮传动比
Jm 电机惯性矩(对于电机)

2、serialink类

操作函数 用途
plot 以图形形式显示机器人
teach 驱动机器人
isspherical 测试机器人是否有球腕关节
islimit 测试机器人是否抵达关节极限
fkine 前向运动学求解
ikine6s 6旋转轴球腕关节机器人的逆向运动学求解
ikine3 3旋转轴机器人的逆向运动学求解
ikine 采用迭代方法的逆向运动学求解
jacob0 在世界坐标系描述的雅克比矩阵
jacobn 在工具坐标系描述的雅克比矩阵
maniplty 可操纵性度
jtraj 关节空间轨迹
accel 关节加速度
coriolis 关节柯氏力
dyn 显示连杆的动力学属性
fdyn 关节运动
friction 摩擦力
gravload 关节重力
inertia 关节惯性矩阵
nofriction 设置摩擦力为0
rne 关节的力/力矩
payload 在末端坐标系增加负载
perturb 随机扰动连杆的动力学参数
links 连杆向量(1xN)
gravity 重力的方向[gx gy gz]
base 机器人基座的位姿(4x4)
tool 机器人的工具变换矩阵[ T6 to tool tip] (4x4)
qlim 关节范围[qmin qmax] (Nx2)
offset 偏置(Nx1)
name 机器人名字(在图形中显示)
manuf 注释, 制造商名
comment 注释, 总评
plotopt options for plot() method (cell array)
n 关节数
config 机器人结构字符串, 例如 ‘RRRRRR’
mdh 运动学中约定的布尔数 (0=DH, 1=MDH)

总结

你可能感兴趣的:(matlab,开发语言)