1. demo
rtbdemo
出现工具箱的demo和简单工具
2. 常用函数
2.1 旋转与旋转矩阵
- 绕某轴旋转a角度:
rotx(a);
roty(a);
rotz(a);
rotx(30)=
1.0000 0 0
0 0.8660 -0.5000
0 0.5000 0.8660
- 欧拉角与旋转矩阵相互转化:
eul2r()
tr2eul()
//示例:以当前坐标系为基准旋转
r1=eul2r(90,60,30);
r2=rotz(90)*roty(60)*rotz(30); //r2 r1等价 z-y-z
- 旋转矩阵与RPY角(横滚-俯仰-偏航)相互转化:
rpy2r()
tr2rpy()
%doc : convert SO(3) or SE(3) matrix to roll-pitch-yaw angles
% roll and yaw:[-pi,pi) pitch:[-pi/2,pi/2)
//示例
r3=rpy2r(90,60,30);
r4=rotz(30)*roty(60)*rotx(90); //r2 r1等价
绕当前坐标系旋转(r1,r2),右乘(90,60,30);
绕固定坐标系旋转,左乘(30,60,90)。
2.2 旋转与变换矩阵
- 旋转某角度
trotx(a);
troty(a);
trotz(a);
trotx(30)=
1.0000 0 0 0
0 0.8660 -0.5000 0
0 0.5000 0.8660 0
0 0 0 1.0000
- 欧拉角与变换矩阵相互转化:
T1=eul2tr(90,60,30);
T2=trotz(90)*trotz(60)*trotz(30);
- 变换矩阵与RPY角(横滚-俯仰-偏航)相互转化:
T3=rpy2tr(90,60,30);
T4=trotz(30)*troty(60)*trotx(90);
2.3 位移与变换矩阵、旋转矩阵与变换矩阵
transl()
t2r()
r2t()
例子:
T=transl(1.5,1,0.5)*trotx(30)*trotz(60);
P=transl(T);
R=t2r(T);
//结果:
T =
0.5000 -0.8660 0 1.5000
0.7500 0.4330 -0.5000 1.0000
0.4330 0.2500 0.8660 0.5000
0 0 0 1.0000
P = //提取了T中的位移
1.5000
1.0000
0.5000
R = //提取了T中的旋转
0.5000 -0.8660 0
0.7500 0.4330 -0.5000
0.4330 0.2500 0.8660
2.4 SerialLink
- 关于SerialLink:
是一个类,用于表示串联手臂型的机器人。具体的函数可以通过在命令行输入doc SerialLink
来查找
函数 | 功能 |
---|---|
teach | 示教功能的GUI界面 |
plot | 1×n的向量,其中n为每个关节的位置(0表示初始位置);如果是m×n的矩阵则表示动画效果 |
plot3d | 三维模型展示 |
fkine | 正向运动学 |
ikine6 | 逆向运动学 —— 6轴机械臂的解析解 |
ikine | 逆向运动学 —— 在不考虑关节限制下的求数值解 |
ikunc | 逆向运动学 —— 不考虑关节限制下的求逆 |
例如:
q0 = [pi/2 pi/2 0 0 0];
T = five_dof.fkine(q0);
q1 = Five_dof.ikine(T,'mask',[1 1 1 1 1 0]);
//在不满6DOF下,使用mask掩膜向量,在不太重要的自由度置0
q2 = Five_dof.ikunc(T);
//没有mask的问题
结果:
T =
0 1 0 0
-1 0 0 -0.6449
0 0 1 1.181
0 0 0 1
q1 =
1.5708 1.5708 -0.0000 0.0000 0
q2 =
1.5708 1.5708 0.0000 0.0000 -0.0000