赞
踩
(1)不存在相应的解,包括:期望位姿离基坐标系太远,机械臂不够长,末端执行器无法达到该位姿;当机械臂的自由度少于6个自由度时,它将不能达到三维空间的所有位姿(使用ikine()函数会出现错误)
(2)存在唯一解
(3)存在多个解集
使用ikine6s()求解,它只适用于关节数量为6,且腕部三个旋转关节的轴相较于一个点的情况
使用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) %%%按照预定关节角度显示机械臂
总结:这个地方用了好几天的时间去研究,也是今天突然想到应该可以这样。虽然不知道这样加上两个伪关节角对后续的计算后有什么影响,但通过此方法可以顺利使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。