关于 robotics toolbox中ikine()求解≤6维机械臂的问题
描述
按照 help ikine中的使用方法。首先自己建立一个3R机械臂,使用ikine()求解逆动力学(使用方法见help ikine)。
%首先给出三个角度,前向动力学。
q=[0.2,0.6,0.3];
Tq=arm.fkine(q);%T是末段连杆上的坐标系的位置和姿态
qi=arm.ikine(Tq);
问题报错:
因为一般来说只有6DOF的机械臂在有可能到达空间中的任意姿态和位置,ikine不能直接求解低于6DOF的机械臂。
处理
纠正网络上两种常见的回答:
必须设置初值q0
经验证与q0无关
mask=[1,1,1,0,0,0]
这里的mask的确是问题的关键所在只不过mask矩阵的理解有误
解释
mask描述的是末端连杆(Wrist)坐标系是否能够进行6DOF(在Wrist坐标系下)的运动。
顺序是[Tx,Ty,Tz,Rx,Ry,Rz]。显然在这个例子中,末端的连杆能够沿着XY轴进行运动,能够绕着Z轴运动,其他自由度均丢失。因此mask=[1,1,0,0,0,1]
qi=arm.ikine(Tq,'mask',m);%声明mask矩阵
参考toolbox mannual 10.0 release - SerialLink.ikine - underactuated robots