什么是 trajectory(路径)规划

中文路径在英语中可能有两种翻译:

1. path

2. trajectory

首先告诉大家,我们所说的“路径”的是后者——trajectory。我们看一下这两种“路径”在机械臂的世界里有什么区别。

设想机械臂的 end-effector 要从 A 点运动到 B 点:

从 A 到 B 叫 path:

如果我们规定从 A 到 B 这个 path,必须在特定的时间(t0 – t6),经过这 7 个点。

那么这 7 个点叫 waypoints。路径(trajectory)指的是通过这 7 个点的具体计划(例如什么时间,以什么速度等等)。规划我们如何经过这 7 个点的算法,叫做路径规划(trajectory planning)算法。

上面这 7 个点,如果机械臂的 end-effector 在通过的时候,位置连续、速度连续、甚至加速度也是连续的,那么我们说这个 trajectory 是平滑的(smooth)。

机械臂中有几种比较常见的 trajectory:

Trapezoidal Trajectories(梯形路径)

梯形路径指的是:

end-effector 在相邻 waypoints 之间的速度是象梯形一样,先线性加速,然后速度保持不变,在接近目标后线性减速。梯形路径的优点是比较简单实用,但是在每个 waypoint 会有停顿。下图是一个机械臂走梯形路径的样例:在过 waypoints 的时候,会完全停止,所以走的是直线,速度和加速度肯定不连续。

Polynomial Trajectories(多项式路径)

其中又分三次多项式和五次多项式。分别写作:

三次多项式可以记录 end-effector 的速度、位置的信息。五次多项式可以记录 end-effector 的位置、速度、加速度的信息。下图是一个五次多项式的例子,可以看到速度、加速度都是连续的。三次或者五次多项式的 trajectory 在通过 waypoints 的时候速度都是连续的,这和梯形路径是不一样的。

下图是一个机械臂走五次多项式路径的样例:为了保证过 waypoints 的时候速度不停顿,走的是曲线。

B-splines(B样条曲线)

B 样条曲线将除了起始点和终点外,将其他的 waypoints 看成是控制点(control points)。机械臂的 end-effector 并不会真正通过这些 control points,而在他们之间找一条平滑的曲线。这样做的目的是在平滑加速度和曲线拟合的准确性之间找一个折衷方法。

(图片来自于Wikipedia)

如果一个 trajectory 只有这 7 个点,无论机械臂控制器的运动控制模块如何强大,都无法保证做到“平滑”的运行。我们必须对路径点进行插值(interpolation)。

下图的橙色点为插值点示意:

在了解插值后,我们来看一下路径规划出来的信息如何和传递到反向运动学(inverse kinematics)。反向运动学模块将确保end-effector按照规划出来的路径运行,即路径跟随(trajectory following)。

这里,我们按插值类型情况分两种模式:

1. Trajectory interpolated in task space

在这种模式下,中间插值的点是在 task space(即 XYZ 坐标系,或者叫笛卡尔坐标系)进行插值。下图表明了这一过程,这时候 trajectory generation 只需要做一次,产生所有的 waypoints 和 interpolation points (插值点)。然后运动控制系统在每个控制周期都必须调用 inverse kinematics 算法去做路径跟随(trajectory following)。

2.Trajectory interpolated in joint space

在这种模式下,中间插值点的点是在 joint space(即对关节角度插值)。下图表明了这一过程。这时候 trajectory generation 也只需要做一次,但做的过程和 task space 的做法不同。即在每一个 waypoint 调用一次 inverse kinematics,然后对关节角度的进行插值。Trajectory following 模块只需执行插值后的角度指令。

角度方向插值 (orientation interpolation)

我们刚才谈到的插值,都是针对 end-effector 的位置(position,即 XYZ 的坐标)。我们不应该忽略 end-effector 的角度方向(orientation)插值。我们看一段动画来了解一下,什么是 orientation 的插值:

可以看到,随着 end-effector 的移动,它的方向也在不断做出平滑的调整,在 end-effector 运行到目标位置后,它的方向也调整到位。当然,有很多场合角度方向是不需要调整的。例如:喷漆机械臂,永远将 end-effector 指向喷漆作业面。

MATLAB 中的机械臂路径规划算法

在 R2019a 发布后 Robotics System Toolbox (RST) 中多了几个机械臂路径规划的 MATLAB 函数和 Simulink 模块。

MATLAB 函数:

Simulink 模块:

不管是 MATLAB 函数还是类似 Simulink block,大概这么几项功能:

生成梯形或者多项式的位置 trajectory

生成角度方向的 trajectory

将上两者合二为一的生成既包含位置,也包含角度方向(合称 pose)的 trajectory——即基于 homogeneous transforms 的 pose trajectory。

让我们写几行代码,来产生一个三次多项式的 trajectory:

可以看到,位置是连续的。如果我们将速度 (qd)、加速度 (qdd) 画出来,可以看到 qdd 是不连续的。

Simulink示例

在 MATLAB file exchange 里搜索 “Trajectory Planning for Robot Manipulators”,会找到一个用多种方式产生 trajectory 的例子。

用一张表格总结如下:

这里有两点值得注意:

1. 无论是 MATLAB 函数还是 Simulink block,所有角度方向的插值都是基于 SLERP (spherical linear interpolation)。这是一种基于四元数(quaternions)的插值法。不会造成下图所示的“不走近路,绕远路”的问题。例如,角度要从 0 度转到 30 度。因为圆周是 360 度,错误的方式是从 0 度转到 330 度 – 虽然也能到达指定位置或者角度,但它是错误的。在manipJointTrajectory 模型中,因为用到了基于 joint space(关节角度)的插值,读者可以注意一下如何处理这个问题。

2. Time-scaling。在 manipTransformTrajectoryTimeScaling 模型中,如果不加 time scaling 这个模块,那么所有的角度变化和位置变化都是基于线性插值。如果加入了 “想要的” 速度、加速度信息 ---即 time scaling。我们可以使角度变化和位置变化按照我们想要的梯形或者多项式形式去调整。例如,我想让角度一开始不变,然后快速变化,最后速度为0。

打开APP精彩内容

点击阅读全文

matlab 并联机械臂_MATLAB机械臂的两种路径规划相关推荐

  1. 无迹卡尔曼滤波UKF和容积卡尔曼滤波CKF进行锂电池SOC估计的C语言版本实现,和matlab版本一样包含定参和FFRLS两种情况

    (C语言版)无迹卡尔曼滤波UKF和容积卡尔曼滤波CKF进行锂电池SOC估计的C语言版本实现,和matlab版本一样包含定参和FFRLS两种情况,已在VS2019和Ubuntu 20.04.4版本中运行 ...

  2. 研究比较机械通气患者液体反应性的两种无创指标,发现MasimoPVi(R)有效且具有优势

    研究人员青睐PVi,因为它"连续.独立于操作员.更可靠" 瑞士纳沙泰尔--(美国商业资讯)--Masimo (NASDAQ: MASI)今天发布<艾因夏姆斯麻醉学杂志> ...

  3. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  4. MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例

    MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例 问题实例描述: 现有一个配送中心需要向20个客户点进行送货.每个客户点有不同货物需求量和卸货服务时间.配送中心和客户点的 ...

  5. matlab中给信号添加高斯白噪声的两种方法,awgn计算过程,randn函数

    y=awgn(x,snr,px_dBW) 给信号x添加噪声功率为某个值的高斯白噪声. snr为信噪比,单位dB. px_dBW为信号x的指定功率(注意,是指定功率,而不是x本身的功率),单位dBW. ...

  6. matlab 求矩阵秩,求矩阵秩的两种方法及MATLAB的应用

    摘    要: 高等代数是一门逻辑思维比较强和理论知识比较深的学科, 它具有丰富的数学知识, 涉及许多重要的数学思想, 其在数学领域的应用很广泛, 如行列式.矩阵的相关计算和求解线性方程组的解方面的应 ...

  7. MATLAB写的三维魔方解算GUI 两种算法(Thistlethwaite算法和Kociemba算法)

    大二的时候,没什么事情,打算用MATLAB做一个三阶魔方机器人,所以使用GUI做了个上位机,使用MATLAB编写的3阶魔方GUI,可以实现魔方状态设置(始末状态都可以设置),使用 patch 实现的魔 ...

  8. 【TWVRP】基于matlab遗传算法求解带时间窗且车辆速度车辆路径规划问题【含Matlab源码 2094期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  9. m基于PSO粒子群优化的第四方物流的作业整合算法matlab仿真,对比有代理人和无代理人两种模式下最低运输费用、代理人转换费用、运输方式转化费用和时间惩罚费用

    目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 粒子群优化 (PSO)算法是通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局 ...

  10. 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

最新文章

  1. Linux系统状态查看命令2
  2. Linux之文件管理命令
  3. js前面代码出错继续运行_Node.JS实战41:让命令行变的五颜六色
  4. 为什么不用量子计算机挖比特币,Pieter Wuille:如果你有一台足够强的量子计算机,你能偷取多少比特币?...
  5. android studio升级时提示 Connection failed. Please check your network connection and try again
  6. Linux下的CUDA多版本管理
  7. 面试官 | 如何优雅的设计Java 异常?
  8. Request 部分功能
  9. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
  10. 关于jquery的$(document).on()事件多次执行的问题
  11. react-navigation使用介绍及UI组件外实现统一跳转
  12. 西门子ug通用后处理_五轴UG(NX)后处理
  13. jacket for matlab,打印本页 - 在联想系统上使用Jacket For Matlab
  14. 动态代理的两种方式_一文帮你掌握Java中的动态代理
  15. 基于ssm的仿微博系统的设计与实现
  16. ASPICE过程开发
  17. 爬虫笔记——urllib实战之淘宝零食板块爬取
  18. win10开启热点后电脑无法打开网页
  19. 基于微信小程序在线电子书阅读系统 电子书小程序毕业设计 毕业论文 开题报告和效果图参考
  20. Synergy 使用

热门文章

  1. c语言延时函数的理解
  2. B站 郝斌C语言 课件+笔记 (全)
  3. PMP的含金量价值主要表现在哪些方面?
  4. 计算机硬件安装装置,一种计算机硬件教学装置制造方法及图纸
  5. 29-地理空间数据云下载【进阶】
  6. 地理空间数据云 Landsat 8 OLI_TIRS 影像数据下载详解
  7. 弹窗php整人,bat整人代码,超级弹窗代码
  8. YOLOv5训练自己的数据集(超详细完整版)
  9. bcrypt加密工具
  10. 软件测试的功能测试和性能测试,大型软件的功能测试流程及性能测试流程