本文主要参考清华大学出版社的《机器人仿真与编程技术》一书
空间中的位置:
所谓的位姿就是指机器人上每个关节在每一个时刻的位置和姿态。
在机器人工具箱中可以使用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()由旋转矩阵得到齐次变换矩阵