当前位置:   article > 正文

matlab机器人工具箱学习笔记——逆运动求解(更新)_initial joint configuration results in a (near-)si

initial joint configuration results in a (near-)singular configuration, this

逆运动学求解

(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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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


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

  • 1
  • 2
  • 3

得到变换矩阵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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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


q1=two_link.ikine(T)

  • 1
  • 2
  • 3

运行结果为:


警告: 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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

与设定一致。

此外我们可以使用


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

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

  • 1
  • 2
  • 3
  • 4
  • 5

模拟控制机械臂

显示预定关节角度的机械臂

总结:这个地方用了好几天的时间去研究,也是今天突然想到应该可以这样。虽然不知道这样加上两个伪关节角对后续的计算后有什么影响,但通过此方法可以顺利使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/96555
推荐阅读
相关标签
  

闽ICP备14008679号