matlab机器人工具箱学习笔记——逆运动求解(更新)

逆运动学求解

(1)不存在相应的解,包括:期望位姿离基坐标系太远,机械臂不够长,末端执行器无法达到该位姿;当机械臂的自由度少于6个自由度时,它将不能达到三维空间的所有位姿(使用ikine()函数会出现错误)

(2)存在唯一解

(3)存在多个解集

解法

1.封闭解法

使用ikine6s()求解,它只适用于关节数量为6,且腕部三个旋转关节的轴相较于一个点的情况

2.数值解法

使用ikine()求解,它可以适用于各种关节数目的机械臂,通过设定初始的关节角坐标对机械臂运动学进行隐式控制。对于少于6自由度的机械臂,我们可以加入伪连杆:

如建立一个二连杆:


L(1)=Link([0,0,0,pi/2])%%调节转向

L(2)=Link([0,0,1,0])

L(3)=Link([0,0,1,0])

L(4)=Link([0,0,0,pi/2])

L(5)=Link([0,0,0,0])%%伪连杆1

L(6)=Link([0,0,0,0])%%伪连杆2

two_link=SerialLink(L,'name','twolink')

在设置关节转角和变换矩阵:


qn=[0,-pi/4,-pi/2,0,0,0]

得到变换矩阵T:


T=two_link.fkine(qn)

T =

  -0.7071    0.0000  -0.7071    0.0000

  -0.0000  -1.0000  -0.0000  -0.0000

  -0.7071    0.0000    0.7071  -1.4142

        0        0        0    1.0000

未设定初始关节角坐标,使用ikine()进行求解,输入命令;


q1=two_link.ikine(T)

运行结果为:


警告: Initial joint configuration results in a (near-)singular configuration, this may slow convergence

> In SerialLink/ikine (line 156)

q1 =

    0.0000  -0.7854  -1.5708    0.0000    0.0000    0.0000

与设定一致。

此外我们可以使用


two_link.teach() %%%调出figure界面模拟控制关节角

two.link.plot(qn) %%%按照预定关节角度显示机械臂

matlab机器人工具箱学习笔记——逆运动求解(更新)_第1张图片

matlab机器人工具箱学习笔记——逆运动求解(更新)_第2张图片

总结:这个地方用了好几天的时间去研究,也是今天突然想到应该可以这样。虽然不知道这样加上两个伪关节角对后续的计算后有什么影响,但通过此方法可以顺利使用ikine()函数进行求解,总之不报错就好。

—————————————————————————
2019/1/31更新
补充知识
欠驱动机器人
对于操纵器具有少于6个DOF的情况,解空间向量具有比可以由操纵器关节坐标跨越的更多尺寸。
q=R.ikine(T,q0,m,options)
当使用3自由度机械手时,旋转方向可能不重要,在这种情况下 m m m=[1 1 1 0 0 0]。
但是依然会报错,情况未知

>>L(1)=Link([0,0,0,pi/2]);
>>L(2)=Link([0,0,1,0]);
>>L(3)=Link([0,0,1,0]);
>>two_link=SerialLink(L,'name','twolink'); 
>>qn=[0,-pi/4,-pi/2];
>>T=two_link.fkine(qn);
>>q=two_link.ikine(T,[1 1 1 0 0 0])
错误使用 SerialLink/ikine (line 138)
For a manipulator with fewer than 6DOF a mask matrix
argument must be specified

你可能感兴趣的:(matlab机器人工具箱)