matlab 机器人工具箱1-坐标变换

本文主要参考清华大学出版社的《机器人仿真与编程技术》一书

空间中的位置:

所谓的位姿就是指机器人上每个关节在每一个时刻的位置和姿态。
在机器人工具箱中可以使用rotx( Θ)、roty( Θ)、rotz( Θ)计算旋转 Θ的旋转矩阵。( Θ为弧度
R=rotx(pi)
显示:
R =
    1.0000         0         0
         0   -1.0000   -0.0000
         0    0.0000   -1.0000
 
我们使用acos(-1)、asin(0)得到验证,返回结果就是3.1416=pi。
我们安装了机器人工具箱后可以使用角度形式进行表示,也就是:
R=rotx(180,'deg')
结果也是一样,但是直接使用R=rotx(180)返回结果就是:
R =
    1.0000         0         0
         0   -0.5985    0.8012
         0   -0.8012   -0.5985
我们算出acos(-0.5985)=2.2124 ,asin(0.8012)=0.9293,之后使用弧度角度转换发现rad2deg(2.2124+0.9293)=180.0062,是补交关系和机器人学中的旋转矩阵定义不相符
画出来样子:
 
之后是图形化绘制函数trplot:
R = rotx(pi)
subplot(1,2,1)
title("原始")
trplot()
subplot(1,2,2)
title("旋转后")
trplot(R)
效果图:
清晰的看到绕着x轴旋转了180°
使用函数tranimate
R1 = rotx(0)
R2 = rotx(pi)
tranimate(R1,R2)
就可以看到坐标轴旋转的动画效果
 

坐标变换:

平移变换:

A = [0.5,-0.5,0.6,5;0.3,0.8,0.4,3;-0.7,0,0.6,8;0,0,0,1]
T = transl(0,10,5)
B = T*A
C = A*T
我们的A是空间坐标系
A =
    0.5000   -0.5000    0.6000    5.0000
    0.3000    0.8000    0.4000    3.0000
   -0.7000         0    0.6000    8.0000
         0         0         0    1.0000
T是旋转矩阵,通过transl自动生成
T =
     1     0     0     0
     0     1     0    10
     0     0     1     5
     0     0     0     1
两个矩阵的关系到底是谁乘谁,我们用BC做了实验。
B =
    0.5000   -0.5000    0.6000    5.0000
    0.3000    0.8000    0.4000   13.0000
   -0.7000         0    0.6000   13.0000
         0         0         0    1.0000
C =
    0.5000   -0.5000    0.6000    3.0000
    0.3000    0.8000    0.4000   13.0000
   -0.7000         0    0.6000   11.0000
         0         0         0    1.0000
我们发现要使用T*A,使T只影响A的最后一列

旋转变换

同样使T*A
A = [0.5,-0.5,0.6,5;0.3,0.8,0.4,3;-0.7,0,0.6,8;0,0,0,1]
T = trotx(pi/6)
B = T*A
其中
T =
    1.0000         0         0         0
         0    0.8660   -0.5000         0
         0    0.5000    0.8660         0
         0         0         0    1.0000

平移加旋转

T=transl(4,0,3)*trory(pi/3)
当我们需要由变换后矩阵得到变换前的矩阵时使用:
inv(T)
得到变换矩阵的逆
如果我们想从T中提取旋转分量
R=t2r(T)
如果想提取平移分量
p=tranl(T)
总结
  • 使用transl()创建平移变换矩阵
  • 使用transl()提取平移部分
  • 旋转矩阵rotx( Θ)、roty( Θ)、rotz( Θ
  • 使用t2r提取旋转分量
  • 使用r2t()由旋转矩阵得到齐次变换矩阵
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
好的,下面是用MATLAB机器人工具箱求解6-UCU并联机器人的运动学正解的步骤: 1. 定义机器人模型: 使用`SerialLink`函数定义机器人模型,可以通过 `DH参数` 或 `参数表` 进行定义。 例如: ```matlab % DH参数 L(1) = Link([0, 0, 0, pi/2]); L(2) = Link([0, 0, 0, -pi/2]); L(3) = Link([0, 0, d3, 0]); L(4) = Link([0, a4, d4, 0]); L(5) = Link([0, a5, d5, 0]); L(6) = Link([0, a6, d6, 0]); % 参数表 % L(1) = Link('d',0,'a',0,'alpha',pi/2); % L(2) = Link('d',0,'a',0,'alpha',-pi/2); % L(3) = Link('d',d3,'a',0,'alpha',0); % L(4) = Link('d',d4,'a',a4,'alpha',0); % L(5) = Link('d',d5,'a',a5,'alpha',0); % L(6) = Link('d',d6,'a',a6,'alpha',0); R = SerialLink(L, 'name', '6-UCU并联机器人'); ``` 2. 定义运动学参数: 定义机器人的DH参数或参数表(如果第1步已经定义过就可以省略)和每个关节角度,例如: ```matlab % DH参数 a4 = 0.1; a5 = 0.1; a6 = 0.1; d3 = 0.2; d4 = 0.3; d5 = 0.4; d6 = 0.5; % 每个关节角度 q1 = 0; q2 = 0; q3 = 0; q4 = 0; q5 = 0; q6 = 0; ``` 3. 求解正向运动学: 使用机器人模型的 `fkine` 函数求解正向运动学。例如: ```matlab T = R.fkine([q1, q2, q3, q4, q5, q6]) ``` 其中,T为末端执行器的位姿矩阵。 4. 提取位置和姿态: 从末端执行器的位姿矩阵中提取位置和姿态信息。例如: ```matlab % 提取位置信息 p = T.t; % 提取姿态信息 R = T.R; ``` 其中,p为末端执行器的位置向量,R为末端执行器的旋转矩阵。 5. 显示结果: 将位置和姿态信息显示出来。例如: ```matlab disp('位置:'); disp(p); disp('姿态:'); disp(R); ``` 这样就可以求解6-UCU并联机器人的运动学正解了。 您可以将步骤2中的关节角度设置为具体的值,例如: ```matlab % DH参数 a4 = 0.1; a5 = 0.1; a6 = 0.1; d3 = 0.2; d4 = 0.3; d5 = 0.4; d6 = 0.5; % 每个关节角度 q1 = pi/6; q2 = pi/4; q3 = pi/3; q4 = pi/2; q5 = pi/4; q6 = pi/6; ``` 然后运行上面的代码,就可以得到末端执行器的位置和姿态信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值