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

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

% 在正式计算之前,先验证下正运动学方法计算出来的齐次变换矩阵,并以此为例,求解逆运动学的关节角
% 输入关节角
>> q = [0 -pi/4 -pi/4 0 pi/8 0]

% 正运动学计算
>>T = p560.fkine(q)
T =

0.38270.00000.92390.7371
-0.00001.0000-0.0000-0.1501
-0.9239-0.00000.3827-0.3256
0001.0000

% 求解逆运动学参数
>> qi = p560.ikine(T);
>> qi
qi =
-0.0000-0.7854-0.7854-0.00000.39270.0000

% pinv指采用伪逆方法求解
>> qi = p560.ikine(T, 'pinv');
qi =
-0.0000-0.7854-0.7854-0.00000.39270.0000

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

>> qi = p560.ikine6s(T)
qi =
2.7400-3.0950-0.78542.75471.27680.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
【Matlab|Matlab Robotics Toolbox系列—使用篇(4)】>> p560.plot(q)

    推荐阅读