各位机器人技术爱好者们,大家好!很荣幸受古月老师邀请,成为古月居的签约作者。希望在这里可以同大家相互交流与学习。   始终觉得自己能力不足,但终于还是硬着头皮开始了在古月居的第一篇博客。由于我是机械专业出身,在接触机器人学时,选择了容易上手的MATLAB软件作为学习机器人学的主要工具。所以,今后分享的内容可能会更偏向使用MATLAB这一工具来演示说明。   不可否认仿真是机器人学习和研究过程中最重要的工具之一,在学习《机器人学导论》的时候,看得最多的就是一大堆矩阵变换的数学公式,很难知道这些公式是如何通过计算机编程实现对机器人的控制,也很难知道推导出来的机器人正逆运动学公式怎么用。我在MATLAB附加功能中找到一个demo,感觉有助于我们的学习和研究,因此在这里分享下。   这个demo是利用MATLAB环境设计的GUI(Graphical User Interface)图形用户界面,用于演示机器人正逆运动学简单控制。源码可以在MATLAB软件中的附加功能中找到。该demo的m源代码不仅能很好的帮助理解机器人正/逆运动学问题,在一定程度上还可以学习到如何使用m语言编程设计图形用户界面。   1584358901(1)   (1)先看看该demo设计的GUI主要部分:   逆运动学控制面板:通过文本编辑框控件滑块控件用户给定机器人的末端位姿[位置+姿态],并通过逆运动学按钮回调逆运动学函数使机器人末端运动到该位姿;   1584358932(1)   改变逆运动学面板中文本编辑框或滑块控件获得末端位姿,机器人末端运动到达图示位置   正运动学控制面板:通过文本编辑框控件滑块控件由用户给定机器人某一关节变量,当用户改变某一滑块时,回调正运动学函数使机器人某一关节运动到指定关节角度;   1584358971(1)   先改变正运动学面板中第二个滑块控件,机器人第一个关节运动,再改变第一个滑块控件,机器人第一个关节运动。(蓝色轨迹)   坐标区:显示PUMA762机器人三维可视化模型,根据逆运动学控制面板或正运动学控制面板显示由用户操作后的机器人运动状态(上述图右边所示);   矩阵转换结果表面板:用于显示PUMA762机器人运动过程中(由逆运动学控制面板或正运动学控制面板简单控制运动时),在笛卡尔坐标系下末端齐次矩阵计算结果;   1584359013(1)   D-H参数表面板:显示PUMA762机器人的DH参数;   1584359025(1)   其他控件只在后面做部分演示,这里不再说明。   用户通过该GUI界面可以完成的正逆运动学简单控制演示如下:   GIF   通过上面的演示,我们知道该GUI的演示内容,对机器人正逆运动学也有了感性的认识:针对串联机器人,正运动学即通过改变机器人的关节角度,得到机器人末端运动后的位姿【笛卡尔空间】逆运动学即通过设定机器人的末端位姿,以求解机器人各个关节的角度值【关节空间】,以保证机器人通过计算获得的关节角度运动到设定的末端位姿。   1584359040(1)   那么,机器人的建模与仿真是如何实现的呢?下面将给出答案。   (2)机器人建模仿真过程 我们先用流程图来了解demo的实现过程。   1584359090(1)   1.PUMA762机器人模型分析与DH参数确定 一般的,在进行机器人建模时需要分析机器人的结构特点。PUMA 762机器人是6R通用机器人,前三个旋转关节分别是腰关节(waist joint)、肩关节(shoulder joint)、肘关节(elbow joint)可以确定机器人的空间位置,后三个腕关节(wrist joint)确定末端执行器姿态。   1584359106(1)1584359125(1)   机器人学中的正/逆运动学是在研究机器人各关节与连杆所在空间几何描述与变换的基础上建立的。为了实现机器人的正逆运动学建模,需要对研究的机器人建立连杆坐标系。也就是需要在机械臂的每个连杆上分别固接一个连杆坐标系,根据固连坐标系所在连杆的编号对固连坐标系命名,再使用DH标准确定各坐标系之间的变换关系根据坐标系建立在连杆的近端或远端,DH可以分为改进DH或标准DH。以下将固连坐标系建立在连杆的近端。   1584359140(1)   建立机器人的连杆坐标系主要是确定关节轴(转动关节轴)/标出其延长线,找出相邻关节轴之间的公垂线,关节轴交点或公垂线与关节轴交点,并确定连杆坐标系的原点坐标系轴的方向。具体步骤在《机器人学导论》书里第三章中有介绍,要点既是Zi沿第i关节建立,Xi垂直于Zi+1并与之相交下面提到的限制。关于DH参数的介绍,古月居中有一篇文章【干货|机械臂的坐标系与数学模型:传说中的DH参数】。在里面提到了DH参数通过限制原点位置X轴的方向,人为减少了两个自由度,因此它只需要用四个参数即可表达关节之间原本是六自由度的坐标变换【三个方向的旋转和三个方向上的平移】。根据上面的图我们便知道固连在连杆i-1上的坐标系是这样通过四个DH参数变换到固连在连杆i上的坐标系的:   ①固连在连杆i-1上的坐标系Xi-1旋转αi-1角度后,使得新的坐标系的Z轴与固连在连杆i上的坐标系的Zi轴平行--->关节扭角。 ②然后将旋转后的坐标系沿Xi-1平移ai-1长度后,使得新的坐标系Z轴与Zi轴重合--->连杆长度。 ③接着将上一步得到的新坐标系绕Zi旋转θi角度后,使得新的坐标系X轴与Xi轴平行--->关节转角。 ④在第三步里得到的坐标系与固连在连杆i上的坐标系姿态已一致了,最后只需要将其沿Zi平移di长度之后便可以与固连在连杆i上的坐标系重合了--->连杆偏距。   这样则从坐标系i-1到坐标系i的转换关系,便可以针对i-1坐标系的X轴进行变换,再针对i坐标系的Z轴进行变换【XZ类变换】。只需上述的四个参数便可以确定了【将每个变换代入相应的平移或旋转算子中并连乘】: 根据改进DH的规定,可以得到PUMA762的DH参数。   1584359189(1)1584361230(1)   这里我们获得的DH参数表在D-H参数表面板显示。   1584359217(1)   2.PUMA762机器人正运动学 根据改进DH的相邻连杆坐标系转换关系i-1Ti,将DH参数代入计算,可以得到每一个连杆变换矩阵,最后将其连乘可以得到机器人末端法兰盘到基坐标的变换关系: 1584361419(1)   这部分获得的矩阵计算结果刚好用于显示矩阵转换结果表面板。如下所示是正运动学函数pumaANI中关键代码的截图:   1584359230(1) 1584359242(1) 1584359257(1) 1584359273(1) 1584359287(1)   3.PUMA762机器人逆运动学 由于PUMA762与PUMA560极为相似,所以具体的推导过程就不再赘述【参考机器人学导论Craig版】。在该demo中,通过逆运动学控制面板将末端位姿人为输入,代入到逆运动学函数中,将得到的关节值再代入正运动学中【逆运动学按钮回调】,使得关节运动到期望位姿。   1584359303(1)   4.其他仿真演示 有了以上基础,也就是说我们知道如何使机器人运动,那么我们可以尝试玩些新东西。如果我们设定好对机器人末端位姿的输入方式以实现对机器人末端的运动控制。如鼠标轨迹跟踪和运动重现、简单PTP示教重现,简单的基于视觉的目标跟踪,或手势交互等。如下为简单PTP示教重现和基于leap motion的简单手势跟踪。   GIF11 GIF2    总结: 由于作者能力有限,文中难免有描述不足和错误。希望是抛砖引玉,大家可以下载源码并结合《机器人学导论学习Craig版》学习,相信会有更好的收获! (1)机器人学是一门高度交叉的前沿学科方向,也是自动化和机电工程等相关专业的一门重要专业基础课。在学习过程中利用MATLAB对机器人运动学进行仿真实验是很好方法之一。Mathworks在机器人学方面分享有很多可供大家学习的资源,感兴趣的可以看看https://ww2.mathworks.cn/solutions/robotics.html。 (2)demo的更多细节【PUMA762如何可视化在GUI坐标区,并通过滑块控件或文本编辑框空间实现运动的。该机器人的运动学逆解不唯一又是怎样处理的】可以从上述提到的MATLAB附加功能中下载源码学习,也可以参考: https://github.com/PascPeli/Puma-Robot-Simulation  (3)关于DH的参考链接:https://www.bilibili.com/video/av83245052/?redirectFrom=h5 https://www.bilibili.com/video/av70454946 https://www.bilibili.com/video/av68720694 https://www.zhihu.com/question/22365926