当前位置:   article > 正文

matlab机器人工具箱攻略——矩阵变换,运动学_trans matlab

trans matlab

一.旋转矩阵:

1)基本

R = rotx(pi/2)

R = roty(pi/2)

R = rotz(pi/2)

分别对X Y Z轴生成3*3的旋转矩阵

R = rotx(30, 'deg')

R = roty(30, 'deg')

R = rotz(30, 'deg')

可以改变输入的方式

 

2)姿态的叙述方法:

 1.Y-Z-Y欧拉角

R = rotz(a)*roty(b)*rotz(c)

eul2r(a,b,c)

旋转矩阵反解出y-z-y欧拉角度的函数为

tr2eul(R)

 

2.x-y-z欧拉角

 R = rotx(r)*roty(p)*rotz(y)

rpy2r(r,p,y)

旋转矩阵反解出x-y-z欧拉角度的函数为

tr2rpy(R)

 

3.等效轴角坐标表示法

把坐标系b看做原坐标a按向量V方向按右手方向旋转theta度

旋转矩阵反解出等效轴角坐标表示的函数为

[theta,V] = tr2angvec(R)

由等效轴角坐标表示转换为旋转矩阵的函数

R = angvec2r(theta, V)(记得把v做单位化的处理v = v / norm(v))

 

4.欧拉参数法表示(4元数)

在等效轴角坐标表示法的基础上更进一步

E1=Kx*sinθ/2);E2=Ky*sinθ/2);E3=Kz*sinθ/2);E4=cos(θ/2);

求解4元数的函数为

 Quaternion(R)


 

二.齐次变换矩阵

4*4矩阵用于描述坐标系的位置和姿态

 

1.平移算子

transl(x, y, z)

 

2.旋转算子

trotx(pi/2);troty(pi/2);trotz(pi/2)

 

3.各种表示下齐次矩阵的求解

 rpy2tr(roll, pitch, yaw, options) 求解x-y-z欧拉角变化对应的齐次矩阵  options:’deg’或不填

angvec2tr(theta, V)求解等效轴角坐标表示的齐次矩阵

eul2tr(phi, theta, psi, options)反解出Y-Z-Y欧拉角 options:’deg’或不填

同样可以用

tr2eul(t)反解出Y-Z-Y欧拉角

tr2rpy(t)反解出x-y-z欧拉角

[theta,vec] = tr2angvec(R);反解等效轴角坐标表示

Quaternion(R) 反解4元数表示

 

4.求出姿态的相关表示

trprint(T, OPTIONS)

可以表示出齐次矩阵的参数

Options为:

(1)'rpy' ; 'euler'  ;'angvec' ;

改变转换的方式为rpy,欧拉角,等效轴角坐标

 

(2)'radian' ;

改变显示的方式,和‘deg’功能相对。

 

5.旋转矩阵与齐次矩阵

r2t(t),rt2tr(t)可以把旋转矩阵t增广为齐次矩阵

tr2rt(t),t2r(t)可以把齐次矩阵t降维旋转矩阵     

 

6.

trplot(R)

trplot2(R)

可以在画图中显示出齐次矩阵

 

7.

tranimate((P1, P2, OPTIONS)

可以显示从P1变到p2的动画

P1P2可以是旋转矩阵,齐次矩阵和4元数这几个形式任意一个

Options::

 'fps', fps  fps的值可以改变动画的速度(默认 10)

 'nsteps', n   n是插入的中间点个数(默认 50)

 'axis',A      坐标系限制A=[xmin, xmax, ymin, ymax, zmin, zmax]

 'movie',M     Save frames as files in the folder M

 

.一维轨迹生成:tpolylspb

1.五次多项式轨迹规划

典型用法

[p,pd,pdd] = tpoly(p0, p1, 50);

subplot(3,1,1); plot(p); xlabel('Time'); ylabel('p');

subplot(3,1,2); plot(pd); xlabel('Time'); ylabel('pd');

subplot(3,1,3); plot(pdd); xlabel('Time'); ylabel('pdd');

也可以

[S,SD,SDD] = tpoly(S0, SF, N, SD0, SDF)

SD0为初始速度,SDF为最终速度

S0为起点位置,SF为终点位置,N为步数

2.抛物线轨迹规划

典型用法

[p,pd,pdd] = lspb(p0, p1, 50);

subplot(3,1,1); plot(p); xlabel('Time'); ylabel('p');

subplot(3,1,2); plot(pd); xlabel('Time'); ylabel('pd');

subplot(3,1,3); plot(pdd); xlabel('Time'); ylabel('pdd');

也可以

[S,SD,SDD] = LSPB(S0, SF, M, V)

V为限定的最大速度

.机械臂的构建
1.Link

Link()是构建连杆的基本函数

建立连杆的基本规则是

 L = Link(DH, OPTIONS) 

DH = [THETA D A ALPHA SIGMA OFFSET]

THETA  D  A  ALPHA 为基本的DH参数

   theta    关节角度
   d        连杆偏移量
  a        连杆长度
  alpha    连杆扭角

Sigma可以设定连杆的类型 0为旋转 1为伸长

offset   关节变量偏移量

qlim     关节变量范围[min max]

 

Options:

  'standard'    for standard D&H parameters (default).

  'modified'    for modified D&H parameters.

 'revolute'    旋转关节(default)

 'prismatic'   伸长关节

 

建立一个旋转连杆

     L = Link([0 1.2 0.3 pi/2]);或  L = Link([0 1.2 0.3 pi/2 0])

     L = Link([0 1.2 0.3 pi/2],’revolute’)

     L = Link( 'd', 1.2, 'a', 0.3, 'alpha', pi/2);

     L = Link('revolute', 'd', 1.2, 'a', 0.3, 'alpha', pi/2);

     L = Revolute('d', 1.2, 'a', 0.3, 'alpha', pi/2);

建立一个移动连杆

   L = Link([0 1.2 0.3 pi/2 1])

   L = Link([0 1.2 0.3 pi/2],’prismatic’)

   L = Link( 'theta', 0, 'a', 0.3, 'alpha', pi/2);

   L = Link('prismatic', ' theta', 0, 'a', 0.3, 'alpha', pi/2);

   L = prismatic(' theta', 0, 'a', 0.3, 'alpha', pi/2);

通过操作

L.thetaL.d;L.aL. alpha  。。。。

可以显示,修改连杆的参数

 

操作函数:

%A               连杆变换矩阵
%  RP            关节类型: 'R' 或 'P'
%  friction      摩擦力
%  nofriction    摩擦力忽略

%  dyn           显示动力学参数
%  islimit       测试关节是否超出软限制
%  isrevolute    测试是否为旋转关节
%  isprismatic   测试是否为移动关节
%  display       连杆参数以表格形式显示
%  char          转为字符串

L.AX)可以显示连杆变换矩阵,但是需要补齐DH参数变量,X在旋转连杆中就是theta  值

在伸长连杆中就是d的值。

L.RP 返回关节类型  返回R表示旋转关节,P为伸长关节

其他的用法类似。。。

 

2.SerialLink

使用SerialLink可以把连杆联系起来形成机械臂

(1)基本用法

R = SerialLink(R1, options) 复制机器人R1

R = SerialLink([L1 L2 ...], OPTIONS) 机器人连接L2的基座连接到L1的末端.

R = SerialLink(DH, OPTIONS),矩阵DH的构成:每个关节一行,每一行为[theta  d  a  alpha](默认为旋转关节),第五列(sigma)为可选列,sigma=0(默认)为旋转关节,sigma=1为移动关节


 

OPTIONS可以是:

'name''comment''manufacturer'
'base''tool''gravity''plotopt'

'name'可以用于给机械臂命名

bot = SerialLink([L1 L2], 'name', 'my robot')

'name''comment''manufacturer'的用法都差不多。用于标定一些额外信息

 

'base', 'tool',用于设定基坐标和工具坐标的原点

>>mdl_puma560

>>p560_2 = SerialLink(p560, 'base', transl(-0.5, 0.5, 0) )


2R.teach()可以进入一个自由调节的界面

 

>> p560.teach()


 

在界面中可以任意调节个关节变量

调节好需要的机械臂姿态后按×

然后p560.getpos()可以进一步得到刚调出来的各变量的值


3R.plot(Q, options)可以显示出机械臂

Q1*N维向量,向量元素为各关节变量,显示的是静态的机械臂

QM*N矩阵,列向量元素为各关节变量,显示一个机械臂的动图

 Options::

  'workspace', W    为空间限制W = [xmn, xmx ymn ymx zmn zmx]

  'floorlevel',L      底板在Z轴的显示位置

Eg

>>mdl_puma560

>> p560.plot(q,  'floorlevel',0);



 

 

五.运动学常用函数

正运动学求解

 Q = R.fkine(T) 

逆运动学求解

 T = R.ikine(Q, OPTIONS)

 Options:: 'deg'


Eg

clear;
clc;
clear L
%             th    d       a    alpha
L(1) = Link([ 0     0       0   -pi/2     0]);%定义连杆
L(2) = Link([ 0     1       0    pi/2     0]);
L(3) = Link([ 0     0       0    0        1]);
L(4) = Link([ 0     0       0   -pi/2     0]);
L(5) = Link([ 0     0       0    pi/2     0]);
L(6) = Link([ 0     1       0    0        0]);
bot = SerialLink(L, 'name', 'Stanford arm');%连接连杆
T=transl(1,2,3)*trotz(60,'deg')*troty(30,'deg')*trotz(90,'deg')
inverse_kinematics=bot.ikine(T,'pinv');%逆向运动学
theta1=inverse_kinematics(1);
theta2=inverse_kinematics(2);
d3=inverse_kinematics(3);
theta4=inverse_kinematics(4);
theta5=inverse_kinematics(5);
theta6=inverse_kinematics(6);
forward_kinematics=bot.fkine([theta1 theta2 d3 theta4 theta5 theta6])%前向运动学,验证结果的准确性.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/262723
推荐阅读
相关标签
  

闽ICP备14008679号