UR3机器人轨迹规划之关节空间轨迹规划

本文最后更新于:2024年3月29日 上午

UR3机器人系列文章是我以及同学做的大作业,在此分享出来。本文轨迹规划部分是我同学所做。

关节空间轨迹规划是直接对机器人的关节角进行规划,将关节角度描述成关于时间的函数。其不需要进行大量的矩阵计算,而且由于关节空间和直角坐标空间并不存在连续的对应关系,因而能够有效避免机构奇异性和机械臂冗余的问题。其主要的规划方法有多项式插值,样条插值和带抛物线过渡的线性函数等方法。

1 多项式插值

多项式插值常用的方法有三次多项式和五次多项式等。三次多项式插值存在角速度变化不平滑且加速度存在跳变的情况,因此不考虑采用三次多项式来进行轨迹规划。而采用五次多项式进行规划时,虽然可以确保不产生冲击,但当规划需要经过多个中间点时,其只能几个点几个点地规划,然后再把各段曲线拼接起来。这样会导致关节出现重复运动。因此在这里我们采用带抛物线过渡的线性函数来对轨迹进行规划,该方法也更加符合人们的直观思想。

2 带抛物线过渡的线性函数插值

带抛物线过渡的线性函数的轨迹规划方法整体思路为用直线连接路径上的各个中间点,然后用抛物线在各个路径点上进行平滑,从而避免机械臂在运动过程中出现冲击。该轨迹规划方法可以指定任意数量的区段和各个区段的持续时间以及加速度的大小和在某个点处停留的时间。其运动轨迹随时间的变化如下图所示:

为了确保解的存在,加速度需要满足。随着加速度的增大,过渡区段的长度将会越来越短,当加速度无限大时,路径又会回到简单的直线状态。可以理解为加速度越大,轨迹中间就越平缓;加速度越小,轨迹中间就越陡峭,当加速度刚好等于时,直线部分的长度缩减为0,整个路径由两个过渡区段组成。该方法存在的问题是机械臂在运动过程过实际上并不会经过中间点,见下图:

如果用户要求经过某一点并停留,则可以重复定义该点。如果要求精确经过某一点而不停留,则系统可以自动将机械臂经过的中间点替换为其两侧的两个伪中间点,原来的中间点位于连接两个伪中间点的直线上。

路径规划完成后,我们根据得到的四个数组(每个中间点的过渡抛物线加速度的大小,每个点抛物线持续的时间,每个直线段的运动速度和每个直线段的持续时间),根据这些数组我们可以准确的求出机械臂运动的轨迹方程。对于过渡段,如果该过渡段刚好是起点段,那么其函数直接为:

否则可假设其表达式为,然后根据加速度,左端点角度和右端点速度来求出其表达式,解算公式为:

对于直线运动段,其函数表达式为:

由此我们便可以得到机械臂运动轨迹的完整函数表达式。根据以上公式,我们可以写出相应的程序。该程序能够获取路径点和运行时间,并指定驻留点和驻留时长。同时也可以强制关节轨迹经过某点,程序会自动做出相应的规划。默认加速度为,可以人为规定加速度,程序会自行判断输入的加速度是否合适,不合适时会自动改变加速度的值。不妨假设关节的运动轨迹为,各段的运行时间分别为,希望在关节角为停留,令加速度为。通过如下语句调用程序:

1
tsPlanning (wayPoints, durationTimes, acceleration =20, stopPoints=[50], stopTime =[1])

运行程序得到如下结果:

从运行结果我们可以看出,程序自动插入了驻留点,并且检验出了加速度不符合要求,自动改变了加速度的值为。根据以上结果我们可以得到,起点过渡段的函数表达式为:

关节角由运行过程中直线段的函数表达式为:

在关节角出抛物线过渡段的函数表达式可以根据如下公式求解:

其余各段的函数表达式依次类推。可以看到虽然可以求出各段的表达式,但手动计算非常麻烦。因此对程序做出相应改进,使其能够自动输出对应多项式的系数,改进后的运行结果如下:

根据函数表达式我们可以画出关节运动曲线如下所示:

从曲线中,我们可以看出,其运动曲线平滑,且在关节角为处作了的停留。同时起始点和终止点的速度均为0,没有出现速度突变的点,符合我们设计轨迹的要求。

源码请前往MyShare/UR3 at master · TyroGzl/MyShare (github.com)

如无法访问,也可关注公众号【G的科研生活】,回复【UR3】


UR3机器人轨迹规划之关节空间轨迹规划
https://summersong.top/post/e98653f4.html
作者
SummerSong
发布于
2023年7月28日
更新于
2024年3月29日
许可协议