前言
项目上最近需要实现机械臂坐标求位姿,设计到了机器人运动学范畴,实际上本科是学过这方面的课程,但是由于那会儿准备考研几乎一节都没听,现在想起来那门课是真的很重要。就初步了解来看,过程中应该有很多公式推导环节,需要细细学习和记录。
基本概念
控制方式:
机器人有两种控制方式:开环以及闭环控制,开环控制中感知部分(传感器、相机等)能够得到的是物体坐标,由此可以控制机械臂末端执行器到达坐标。闭环控制方面,感知部分可以同时得到物体坐标和机械臂末端执行器坐标,由此使末端坐标与物体坐标重合。区别在于:开环控制的末端坐标是通过正逆解计算得到的,而闭环则是由感知部分所得到的。我们目前需要了解的,是开环控制中的正逆解计算。
整体流程:
对于上图来说,整体抓取流程就是识别、相机坐标与机器人坐标的转换、抓取姿势确定、位姿转换以及运动学规划,分别涉及到算法识别、手眼标定和正逆运动学。
机械臂的基本结构是机架、动力源、末端执行器以及控制器,机械臂机架上有 N 个电机,就是 N 自由度的机械臂。
识别、坐标转换这些内容暂且不做,先解决抓取姿势、位姿调整这一部分的内容,这也是机器人运动学的核心内容。
机器人运动学
机器人学(此处单研究机械臂型机器人)有很多不同的分支,但是不同关节数的机器人就有多种运动规划,此处结合项目以六轴机器人进行学习探讨。调研所得,机器人学的大致路径是位置、速度、加速度、路径规划、轨迹规划以及运动规划。整个流程中,位姿和 T 矩阵是核心内容。
位姿就是位置和姿态,位置就是三维空间内的 x、y、z,姿态则是表示关节点按照 x 轴、y 轴、z 轴旋转 roll(翻滚角)、pitch(俯仰角)、yaw(偏航角)个角度。在固定的基座标系{B}下,转动关节的末端坐标系位姿可描述为:相对于{B}的位姿为(X,Y,Z,roll,pitch,yaw)。有了一个关节的位姿之后还不够,我们还需要了解每个关节位姿之间的几何关系,目前已经有很多种成熟的机器人的几何关系描述方法,T 矩阵描述法、D-H 法、MDH 法、MCPC 法、旋量法等。
此处使用 D-H 法进行机器人建模,过程中需要使用 MATLAB 及第三方作者 petercorke 的 Toolbox 工具箱,可以直接在其附加功能页面进行搜索下载,另外 MATLAB 有学生认证使用方式,比较方便。
D-H 参数
T 矩阵:
前面提到,转换矩阵 T 矩阵是流程的核心,其内容如下所示:
上式表示坐标系之间的变换矩阵,也可认为是一关节点在前一个关节点坐标系下的坐标。其中 P 为由三个量表示的位移矩阵,表示目标坐标;R 表示方向信息,分别是法线、指向以及接近向量,分别对应的是自身运动坐标系的 x、y、z 轴,由位姿信息求解得出。T 矩阵法为机械臂最基本的建系方法,是通过关节的6个自由度的位姿信息来表示两个坐标系之间的齐次变换矩阵,通过矩阵相乘的形式表示各个坐标系间的映射关系。关于这种关系的理解,我在一个视频里面了解过一个说法,大致意思是指和向量的概念差不多,既可以表示为坐标到原点的距离,也可以表示为相对于原点的坐标点信息。含义上是相同的,重点在于变换矩阵的含义理解。由上述公式了解到关节两两之间的变换关系后,就可以通过串串的方式求出从头到尾或者过程之间任意两个关节之间的关系了。
上式表示基坐标系{B}到末端坐标系{E}的变换关系。
D-H 法:
由公式可以看出来,T 矩阵中共有12个有效参数,但只需要6个量获取位姿,过程中有些参数就是不必要的,因此就有人提出了 D-H 法。一种是标准型 DH 法(Standard DH),另一种是改进型 DH 法(Modified DH),两种方法需要同时对比进行说明。
D-H 法的简化方式很明确,就是将 y 轴位移和旋转的2个自由度去掉了,仅考虑 x 和 z 轴的位移与旋转。这样,6个自由度的位姿变成由4个参数来表示了。其中参数采用关节角
- 列表:
建模:
确定初始位置并给连杆和关节标号,一般机械臂初始位置被认为是整体伸直朝上,横向关节朝向为x轴。下图右边是连杆结构图:
确认各关节轴线和 z 轴,轴线为各关节旋转或移动的轴线。z轴为当前轴线,方向任意(此处选择电机旋转反方向)。此处两种方法将有不同,要注意下角标的符号,z轴的下标代表着第几坐标系。
建立各关节坐标系:首先找第 i 个坐标系 {i} 的原点,再确定
轴。
在 SDH 中,{i} 的轴线和 {i-1} 的轴线,如果相交,则交点为原点,轴在两轴线所在平面的垂线上,方向任意;如果不相交,两轴线公垂线和当前关节 i 轴线的交点为原点, 为在公垂线上,方向任意。
在 MDH 中,{i} 的轴线和 {i+1} 的轴线,如果相交,则交点为原点,轴在两轴线所在平面的垂线上,方向任意;如果不相交,两轴线公垂线和当前关节 i 轴线的交点为原点, 为在公垂线上,方向任意。
由于会有两轴线平行,公垂线有无数条;x 轴 z 轴方向可任意设置,所以会导致参数模型会有很多版本。
这一部分内容比较抽象,可以参考本视频从三维空间的角度去理解。
添加首尾坐标系:SDH 中已经标注好 {0} 了,所以在尾端添加 {6};MDH中已经标注好 {6} 了,所以在首端添加 {0}。首尾端的坐标系设置是要根据实际情况和个人喜好的。以下为建系过程:由于选择z轴,x轴和原点有很大的自由性,所以以上只是建系的一种选择,怎么建系需要根据自身情况来判断
确定 D-H 的四个参数:
拿出第一步列的表,挨个进行填写。先不要在意参数下角标,因为会混淆。SDH 和 MDH 两种方法的坐标变换都是从前面的坐标系往下一个坐标系变换,写第 i 行时只要关注 {i-1} 和 {i} 之间的关系就好。但是参数顺序是有差别的。(在这里,SDH 是从前往后,从开始的轴线建立坐标系;而 MDH 是从后往前,从末端轴线建立坐标系。)以表的第二行进行举例,利用{1}的坐标系变换到{2}:
SDH 的顺序是:- 先将坐标系{i-1}的
轴绕 轴转到与坐标系{i}的 轴平行,转过的角度为 ,右手准则拇指指向为 z 正方向为正。 - 再将
轴沿 轴平移到 轴,平移的距离为 。 - 接着刚才变换的结果,将坐标系{i-1}的
轴绕 轴转到和坐标系的 轴平行,转过的角度为 ,右手准则拇指指向为 x 正方向为正。 再将
轴沿 轴平移到 轴,平移的距离为 ,直到两坐标系重合。
以上流程建议通过右手定则逐个判断体会,流程如下图所示:
根据 SDH 的规则可以得出下表。在上图,但由于是可变参数 设为q2。 MDH 的顺序是:
- 先将坐标系{i-1}的
轴绕 轴转到与坐标系{i}的 轴平行,转过的角度为 ,右手准则拇指指向为 z 正方向为正。 - 再将
轴沿 轴平移到 轴,平移的距离为 。 - 接着刚才变换的结果,将坐标系{i-1}的
轴绕 轴转到和坐标系的 轴平行,转过的角度为 ,右手准则拇指指向为 x 正方向为正。 再将
轴沿 轴平移到 轴,平移的距离为 ,直到两坐标系重合。
流程如下图所示:根据 MDH 的规则可以得出下表。在上图
,但由于是可变参数 设为q2。 由以上内容,按照流程对表格进行填写,即可得出完整的 dh 参数表。
- 先将坐标系{i-1}的
- 对比分析:
根据以上信息,得出 SDH 与 MDH 的异同点如下所示:
Link 函数与 SerialLink 函数
Link函数包含与机器人关节和链接相关的所有信息,例如运动学参数,刚体惯性参数,电机和传输参数。
Link函数的各类参数如下:
对于只需要把机器人模型建立出来,不考虑机器人的动力学参数的情况,那么只需要用到 theta、d、a、alpha 和 offset 等几个参数即可。
接下来使用 Link 函数对 D-H 参数表进行模型的建立,并通过使用 SerialLink 函数来将 L1 L2 L3 L4 L5 L6 连杆连接起来。对于 Link 函数来说,无论是标准型还是改进型,参数的顺序都为:关节转角
使用标准型 D-H 参数建立机器人模型
1 | %% STD-DH参数 |
使用改进型 D-H 参数建立机器人模型
1 | %% MOD-DH参数 |
小结
通过 DH 法建模的过程重在理解,尤其是坐标系及四个参数的确定过程,必须自己根据一个机械臂反复去算才能体会到过程中的很多难点。我在求解的过程中看了很多方法,但是对于我的机械臂来说,只有 SDH 方法能够建模成功,MDH 法总是不对。之后我针对这种情况交给了 New bing 来解决,大致意思应该是 SDH 和 MDH 的坐标不同,厂家给的坐标系应该是在 SDH 的方法下建立的,如果要用 MDH 方法,需要重新确立坐标系。另外,还了解到判别 SDH 和 MDH 坐标系的方法,如果你不确定厂家坐标系是什么的话可以根据以下图片来进行判断。需要注意的是,一般的厂家都会把零位和坐标系确定好,你要做的只是判断坐标系以及根据坐标系判断参数。
之后建模成功后发现模型位姿完全一致,但是 Rx、Ry、Rz 这几个量总是和模型界面(如下图)中的 R、P、Y 对应不上,调研后才发现两者好像不是一回事,具体情况还需要后续进行详细说明。