首先,申明下:1.这是原创,请不要转载;2.本人从事机器人技术的研究已有7年,基本上的大风大浪都见过;3.本文内容不一定面面俱到,不喜勿喷。
MATLAB中的Robotics Toolbox,也就是我们常见的机器人工具箱是学者Peter Corke(很幽默的一老头)为了方便他的教学而开发的一款自定义的机器人工具箱,里面的调用函数都是他及他的团队编写。
参考书:《Robotics, Vision and Control: Fundamental Algorithms In MATLAB》第二版
现在抛出问题:用过该工具箱的小伙伴按照参考书上的例子求解PUMA 560(6-DOF机器人)的正逆解,觉得没有任何问题。用fkine()正向运动学函数求解自定义的机械臂也没有问题。但是,
用ikine()求逆解时,却有问题了,要么无法求解,要么求解出来的关节角不对,这是为什么呢?
本
人当时用到这个工具箱时,也遇到过这个问题,请教了不少大牛。大牛的回答总结如下:1.该工具箱只能解决一类机器人(关节角、串联、构型等);2.可以根据matlab函数,深入研究ikine()逆解函数;3.如果该工具箱能解决任意自由度的串联型机器人的运动学求解问题,那么学习机器人技术就很简单。实际上,这是不可能的。
机器人逆解到底应该怎么解?
不同构型的机械臂解法不同。本人举个例子,一个6-DOF转动型串联机械臂,它的构型满足:1.三个连续的转动关节的轴相交于同一点;2.三个连续的转动关节的轴平行。满足上述条件的机器人,前3个关节与后3三个关节可以看作是解耦的,即前3个关节控制机器人的位置,后3个关节控制机器人的姿态。一旦末端执行器的位置和姿态由
和
Re=[ne se ae]
制定,就可以找到腕关节的位置:
1)Pw=Pe-d6*ae
2)求解逆运动学得到(q1,q2,q3)
3)计算R03(q1,q2,q3)
4)计算R36(q4,q5,q6)=R03’R
5)求解逆运动学得到方向(q4,q5,q6)
这样,便完成了机器人逆解。
我现在用的方法是迭代计算,即以能量法、关节变化最小为目标函数,通过优化算法来找出最合适的关节角组。目前,这种方法已经解决过很多类型的串联机器人,没有出现过什么问题。有兴趣的小伙伴,自己去找文献看看,千万不要留言问我(由于特殊原因),请见谅。