您的位置:首页 > 编程语言 > MATLAB

Matlab Robotics Toolbox系列—使用篇(4)

2016-12-01 17:16 253 查看
Chapter 4 Inverse Kinematics

% 逆运动学方法适合笛卡尔坐标系下的关节角解算,这里仍以puma560为例。

>> mdl_puma560

 

% 在正式计算之前,先验证下正运动学方法计算出来的齐次变换矩阵,并以此为例,求解逆运动学的关节角

% 输入关节角

>> q = [0 -pi/4 -pi/4 0 pi/8 0]

 

% 正运动学计算

>>T = p560.fkine(q)

T =

 

    0.3827    0.0000    0.9239    0.7371

   -0.0000    1.0000   -0.0000   -0.1501

   -0.9239   -0.0000    0.3827   -0.3256

         0         0         0    1.0000

 

% 求解逆运动学参数

>> qi = p560.ikine(T);

>> qi

qi =

   -0.0000   -0.7854   -0.7854   -0.0000    0.3927    0.0000

 

% pinv指采用伪逆方法求解

>> qi = p560.ikine(T, 'pinv');

qi =

   -0.0000   -0.7854   -0.7854   -0.0000    0.3927    0.0000 

 

% 通常情况下,对于特定的末端位姿,不止有一组解,对于6自由度机械臂而言,通常采用解析式法求解各组关节角,在RTB中,该函数为ikine6s(),除上述情况以外,还应该注意奇异解

 

>> qi = p560.ikine6s(T)

qi =

2.7400   -3.0950   -0.7854    2.7547    1.2768    0.2787

 

% 逆运动学还可以用于求解路径,下面将以笛卡尔坐标系下的直线路径举例说明

% 定义初始坐标点

>> T1 = transl(0.6, -0.5, 0.0);

% 定义末端坐标点

>> T2 = transl(0.4, 0.5, 0.2) ;

 

% 采用ctraj方法计算笛卡尔坐标下的路径,ctraj方法使用的是梯形速度控制方法计算路径,使用方法与jtraj类似(jtraj用于计算关节空间轨迹,ctraj用于计算笛卡尔坐标系下的路径)

>> T = ctraj(T1, T2, 50);

 

% 求解逆运动学

>> q = p560.ikine6s(T);

 

% 检验结果

>> subplot(3,1,1); plot(q(:,1)); xlabel('Time (s)'); ylabel('Joint 1 (rad)');

>> subplot(3,1,2); plot(q(:,2)); xlabel('Time (s)'); ylabel('Joint 2 (rad)');

>> subplot(3,1,3); plot(q(:,3)); xlabel('Time (s)'); ylabel('Joint 3 (rad)');

 

% 清空表格&动画演示

>> clf

>> p560.plot(q)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: