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])%前向运动学,验证结果的准确性.

  • 22
    点赞
  • 204
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
MATLAB(Matrix Laboratory,矩阵实验室)是一款强大的科学计算软件,它在科学研究、工程设计、数据分析和教学等领域都有广泛的应用。在机器人领域,MATLAB机器人工具箱(Robotics Toolbox for MATLAB)则是一款非常重要的工具箱,它可以实现机器人动力学模拟、控制器设计、路径规划和视觉处理等各种任务。本文将重点介绍MATLAB机器人工具箱中的建模与正逆运动学算法。 建模是机器人控制中非常重要的一步,在机器人工具箱中可以通过类似DH表示法的方式来对机器人进行建模。这里我们以一个三自由度的SCARA机器人为例进行说明。首先需要定义机器人的DH参数,比如对于SCARA机器人,可以采用以下方式定义: ```matlab L1 = Link([0, 0, 0, pi/2, 0]); L2 = Link([0, 0, 0.25, 0, 0]); L3 = Link([0, 0, 0.25, 0, 0]); SCARA = SerialLink([L1 L2 L3], 'name', 'SCARA'); ``` 其中Link表示机械臂链接,SerialLink表示串联链接,name表示机器人的名称。接着可以使用plot和animate方法来绘制机器人的3D模型,如图所示: ```matlab SCARA.plot([0, pi/4, pi/2]); %绘制机器人在三个角度下的姿态图 SCARA.teach(); %绘制机器人可交互的3D模型 ``` ![scara](https://img-blog.csdn.net/20170601140015099?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpbGRlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75) 接着我们再来介绍一下MATLAB机器人工具箱中的正逆运动学算法。 正运动学是指根据机器人各个关节的角度来计算机器人的末端执行器的姿态(位置和姿态角),可以通过以下代码来实现: ```matlab theta = [0, pi/4, pi/2]; %关节角度 T = SCARA.fkine(theta); %末端执行器的姿态 disp(T); ``` 其中fkine表示正运动学求解,返回机器人末端执行器的位姿矩阵T(4x4)。需要注意的是,机器人正运动学求解中必须使用李代数(Lie algebra)和指数映射(Exponential map)的方法,以保证运算的精度和稳定性。 逆运动学是指根据机器人末端执行器的姿态来计算各个关节的角度,可以采用以下方法来实现: ```matlab T = [1, 0, 0, 0.3; 0, 1, 0, 0.3; 0, 0, 1, 0.5; 0, 0, 0, 1]; %给定机器人末端执行器的位姿矩阵 q = SCARA.ikine(T); %计算机器人各个关节的角度 disp(q); ``` 其中ikine表示逆运动学求解,需要注意的是,机器人逆运动学求解中必须考虑机器人的奇异问题、避障问题和轨迹规划问题,以保证机器人的运动轨迹和效率。 总的来说,MATLAB机器人工具箱中的建模与正逆运动学算法为机器人控制和仿真提供了很好的工具和方法,可以大大简化机器人控制的难度和复杂度。未来随着机器人技术的不断发展和普及,MATLAB机器人工具箱的应用也将逐渐扩大。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值