来源知乎文章Dynamic Movement Primitives介绍及Python实现与UR5机械臂仿真

1、DMP用处

DMP是一种用于轨迹模仿学习的方法,以其高度的非线性特性和高实时性,被应用到机器人的各个领域。

  • 在机器人的规划控制中,我们需要事先规划参考轨迹,例如关节角度曲线,通过编程来规划参考轨迹就比较复杂示教是一种比较简单直观的方法。
  • DMP使用少量的参数来建模示教的轨迹,通过这些参数能够快速地复现示教轨迹。
  • 复现示教轨迹的时候能够增加一些任务参数来泛化和改变原始轨迹,例如改变关节角度曲线的幅值和频率。

2、DMP公式

到达目标点:具有自稳定性的二阶动态系统,最常用的二阶系统就是弹簧阻尼系统(PD控制器)
y¨=αy(βy(g−y)−y˙)(1)\ddot y = \alpha_y(\beta_y(g-y)-\dot y) \tag{1}y¨​=αy​(βy​(g−y)−y˙​)(1)

  • yyy:系统状态(例如关节角度 [θ\thetaθ] )
  • ggg:目标状态
  • αy\alpha_yαy​ 、βy\beta_yβy​ 是常数,相当于PD控制器中的P参数和D参数。

弹簧阻尼系统虽然能够让系统收敛到目标状态 ,却无法控制收敛的过程量,比如轨迹的形状。
DMP作者在这个PD控制器上叠加一个非线性项来控制收敛过程量。在直观上,可以把DMP看作是一个PD控制器与一个轨迹形状学习器的叠加
y¨=αy(βy(g−y)−y˙)+f(2)\ddot y = \alpha_y(\beta_y(g-y)-\dot y) + f \tag{2}y¨​=αy​(βy​(g−y)−y˙​)+f(2)

  • 右边的第一项就是PD控制器
  • 第二项fff就是轨迹形状学习器,是一个非线性函数

1)可以通过改变目标状态 [ggg] 和非线性项 [fff] 来调整我们的轨迹终点和轨迹形状,这可以称之为空间上的改变。
2)如果还需要改变轨迹的速度,从而获得不同收敛速度的轨迹,这个可以通过在速度曲线 [y˙\dot yy˙​] 上增加一个放缩项 [τ\tauτ] 来实现:
τ2y¨=αy(βy(g−y)−τy˙)+f(3)\tau^2\ddot y = \alpha_y(\beta_y(g-y)-\tau\dot y) + f \tag{3} τ2y¨​=αy​(βy​(g−y)−τy˙​)+f(3)
上式即为DMP的基本公式。这个公式表明在这个动态的控制过程中,系统最后会收敛到状态 [ggg] ,并且非线性项 [fff] 的参与会直接影响 [y˙\dot yy˙​] ,也就是直接影响到收敛的过程。通过给定不同的 [τ\tauτ] 和 [ggg] ,我们就可以在示教曲线的基础上得到不同目标状态、不同速度的轨迹了。

  • 叠加 [fff] 的目的就是为了改变轨迹的形状为我们期望的形状
  • [τ\tauτ]改变轨迹的速度

3、非线性函数fff的选择

什么样的非线性函数可以很容易的拟合各种形状的轨迹,而且方便进行参数调整呢?

  • 大佬作者的考虑,通过多个非线性基函数的归一化线性叠加来实现
    f(t)=∑i=1NΨi(t)ωi∑i=1NΨi(t)(4)f(t) ={{\sum_{i=1}^N}\Psi_i(t)\omega_i\over {\sum_{i=1}^N\Psi_i(t)}} \tag{4}f(t)=∑i=1N​Ψi​(t)∑i=1N​Ψi​(t)ωi​​(4)
  • 在原论文中,作者把 [fff] 称之为forcing term,意为给PD控制系统增加的一个“外力”(为什么是力?因为 [fff] 直接影响到轨迹的加速度项 [y¨\ddot yy¨​] ,相当于是一个外力的作用),用这个力去改变轨迹的形状
  • [Ψi\Psi_iΨi​] 基函数,一般使用的就是高斯基函数(径向基函数)
  • [ωi\omega_iωi​] 每个基函数对应的权重
  • [NNN] 基函数的个数
  • 通过给定不同的基函数对应权重就可加权得到复杂的轨迹了。

为了保证系统收敛到目标状态 [ggg] 的时候, [fff] 也收敛到 [000] ,从而不再对系统的控制过程产生影响, [fff] 需要被重新定义。

4、fff的叠加问题

非线性项 [fff] 与时间 [ttt] 是高度相关的,无法与其他的动态系统直接叠加,也无法同时建模多个自由度的轨迹并让它们在时间上与控制系统保持同步。

  • 离散型DMP(Discrete DMP)是解决空间轨迹规划的问题的
  • 节律型DMP(Rhythmic DMP)是解决连续周期的节律型轨迹规划问题的
  • 离散型DMP,论文使用了一个与时间无关的量 [xxx] 来替代时间 [ttt]
  • 节律型DMP,论文使用了一个与时间无关的相位量 [ϕ\phiϕ] 来替代时间 [ttt]

5、离散型DMP

离散型DMP(Discrete DMP)是解决空间轨迹规划的问题的,主要的目的是为了解决笛卡尔空间的轨迹规划问题
离散型DMP,论文使用了一个与时间无关的量 [xxx] 来替代时间 [ttt],[xxx] 来自一个一阶系统(正则系统),满足以下关系:
τx˙=−αxx(6){\tau\dot x}=-\alpha_xx \tag{6}τx˙=−αx​x(6)

  • [αx\alpha_xαx​]是一个常数
  • [τ\tauτ] 是一个常数与DMP公式的 [τ\tauτ] 保持一致
  • 在此系统中,不论给定的初值 [x0x_0x0​] 是多少,该系统最终(当时间区域无穷的时候)都会单调地收敛到 [x=0x=0x=0] 状态。因此 [xxx] 可以看成一个相位变量,例如,当 [x=1x=1x=1] 的时候表示系统处于初始状态,当 [x=0x=0x=0] 的时候表示系统收敛到了目标状态。
  • 实际编写程序的时候,常常将常数 [τ\tauτ] 移动到右侧来实现,以方便直接表示和计算 [x˙\dot xx˙] ,也与DMP公式中的 [τ\tauτ] 起同样的速度调制作用,即
    τx˙=−αxx\tau\dot x =-\alpha_xxτx˙=−αx​x变成
    x˙=−ταxx(7)\dot x =-\tau\alpha_xx \tag{7}x˙=−ταx​x(7)
  • 系统的两个参数[αx\alpha_xαx​] 和 [τ\tauτ] 将会影响到系统的收敛速度

为了保证系统收敛到目标状态 [ggg] 的时候, [fff] 也收敛到 [000] ,从而不再对系统的控制过程产生影响, [fff] 被重新定义:
f(t)=∑i=1NΨi(t)ωi∑i=1NΨi(t)x(g−y0)(8)f(t) ={{\sum_{i=1}^N}\Psi_i(t)\omega_i\over {\sum_{i=1}^N\Psi_i(t)}} x(g-y_0)\tag{8}f(t)=∑i=1N​Ψi​(t)∑i=1N​Ψi​(t)ωi​​x(g−y0​)(8)

  • y0y_0y0​表示起始状态 y0=y(t=0){y_0=y(t=0)}y0​=y(t=0)
  • xxx可以保证fff会随着xxx的收敛而消失
  • g−y0g-y_0g−y0​决定了fff的“幅值”,用于后续对轨迹的形状进行“放缩”。
  • 实际放缩的大小为gnew−y0g0−y0{{g_{new}-y_0}\over {g_0-y_0}}g0​−y0​gnew​−y0​​

基函数Ψi(x)\Psi_i(x)Ψi​(x)为径向基函数
Ψi(x)=exp(−hi(x−ci)2)=exp(−12σi2(x−ci)2)(9)\Psi_i(x) =exp(-h_i(x-c_i)^2)=exp(-{1\over{2\sigma_i^2}}(x-c_i)^2) \tag{9}Ψi​(x)=exp(−hi​(x−ci​)2)=exp(−2σi2​1​(x−ci​)2)(9)

  • σi\sigma_iσi​ 基函数Ψi\Psi_iΨi​的宽度
  • cic_ici​ 基函数Ψi\Psi_iΨi​的中心位置
  • 这些参数都需要在模型的学习阶段通过示教轨迹得到的
  • 这些高斯基函数是随着正则系统的xxx分布的,如上图的第一张图所示,假设正则系统是线性收敛的,则 xxx的递减速度为恒定速度,那么高斯基函数的分布要覆盖从x=1x=1x=1开始到x=0x=0x=0的全部位置,其中心值应该尽可能覆盖均匀一点,这样可以在尽量广的空间上都能有足够的基函数用于拟合复杂的曲线。
  • 第二张图中展示了给不同的高斯基函数分配的权值ωi\omega_iωi​,这些权值与基函数Ψi\Psi_iΨi​ 的乘积之和就是我们要的非线性项。而由于正则系统最终都能收敛到000,从而保证了随着时间的流逝,非线性项起的作用越来越小,系统最终会趋于稳定,而不会发散失控。
  • 实际上,正则系统并不是线性收敛的给定不同的αx\alpha_xαx​和τ\tauτ,可以得到不同收敛速度的正则系统,而且收敛速度都是由快到慢,在初始位置附近收敛速度非常快,而在目标位置附近收敛速度逐渐趋于平缓。如果我们仅仅是按照正则系统xxx的分布来均匀布置高斯基函数,那么从时间的维度上来看,我们就会得到类似如下的基函数分布:
  • 时间的维度上,大部分的高斯基函数都集中在初始时刻附近,而随着时间的进行,基函数所起的作用越来越小,这样会导致在曲线拟合的初始阶段效果很好,而在趋于目标位置的末段曲线的拟合效果变差,甚至是无法拟合。因此,我们需要改变一下策略,使得高斯基函数能够在时间的维度上也尽量分布均匀,保证整条曲线的拟合效果。
  • 正则系统的收敛过程
  • 如果要在时间上分布均匀,例如按照图中所示的红点分布,那么我们就应该选择这些时刻的 xxx 值作为高斯基函数的中心位置 cic_ici​,从而保证在时间的维度上高斯基函数是均匀分布的
  • 中心值确定了以后,接下来就是基函数的宽度(方差 σi\sigma_iσi​ )了,正则系统xxx的收敛速度是越来越慢的,那么如果我们把每个基函数的宽度在xxx的维度上设定为一样的,就会导致早期的基函数持续时间短,而后期的基函数持续时间长。因为时间越往后,经过同样宽度的xxx所需的时间越多,从而导致在时间的维度上出现基函数的宽度不一致的问题,时间约靠后的宽度越大。因此,基函数的宽度应该随着时间的递增而递减,从而保证在时间的维度上,每个基函数的宽度也是均匀的

    hi=BFsci(10)h_i={{BF_s}\over c_i} \tag{10}hi​=ci​BFs​​(10)

其中, [BFsBF_sBFs​] 表示基函数的数量, [cic_ici​] 表示那个基函数的中心值。

注意:这里其实是有点问题的,例如对于轨迹的目标位置与起始位置都在同一个位置的情况来说g−y0=0g-y_0=0g−y0​=0,那fff就没有存在的意义了,因此,对于示教轨迹的起始点和目标点一致的情况这里不再适用,注意,对于三维空间中的轨迹来说,不是每个维度都要一致才叫一致,只要其中有任何一个维度是一致的,那么这个维度的 就会失效,我们就无法学习得到轨迹的形状,在使用的时候要注意这一点。经典DMP的问题及其解决办法

6、节律型DMP

  • 节律型DMP(Rhythmic DMP)是解决连续周期的节律型轨迹规划问题的。例如关节空间的周期性关节角度规划问题。周期性曲线我们需要进行改变和泛化的往往是曲线的幅值与频率,从而获取不同的曲线来满足不同的任务需求。
  • 节律型DMP的计算过程与周期型DMP一致。

6.1 不同点

  • 所采用的正则系统(CS)不一样
  • 所使用的基函数构造方法不一样
  • 非线性项 fff的构造方法稍有不同
    节律型DMP的x(ϕ)x(\phi)x(ϕ)来自另一个正则系统,该系统收敛于一个极限环(Limit cycle),公式定义为
    KaTeX parse error: Undefined control sequence: \t at position 1: \̲t̲

DMP (Dynamic Movement Primitives) 动态运动基元相关推荐

  1. Dynamic Movement Primitives与UR5机械臂仿真

    Dynamic Movement Primitives (DMP),中文译名为动态运动基元.动态运动原语等,最初是由南加州大学的Stefan Schaal教授团队在2002年提出来的,是一种用于轨迹模 ...

  2. DYNAMIC MOVEMENT PRIMITIVES PART 1: THE BASICS

    参考资料链接: DMP:DYNAMIC MOVEMENT PRIMITIVES. 长期以来,复杂的动作一直被认为是由一系列按顺序或并行执行的原始动作构建块组成的,而DMPs是这些原始动作的一种拟议的数 ...

  3. 机械臂示教轨迹参数化方法 DMP, Dynamic Movement Primitive (一)

    机械臂示教轨迹参数化方法 DMP 1. 关于DMP 2. 香草味的DMP 3. 改进型DMP 4. 考虑Orientation的DMP 总结 很早之前就想写一栏关于DMP的博客笔记了,拖到现在一来是对 ...

  4. 运动基元_开发人员的新分布式基元

    运动基元 面向对象的基元(进程内基元) 作为Java开发人员,我非常熟悉面向对象的概念,例如类,对象,继承,封装,多态性等.除了面向对象的概念之外,我还非常熟悉Java运行时.它提供的功能,如何调整它 ...

  5. 运动基元_Java更快地对基元数组进行排序?

    运动基元 看来,在不久的将来,Java中的原语排序数组可能会提高性能. 弗拉基米尔·雅罗斯拉夫斯基(Vladimir Yaroslavskiy)已在core-libs-dev邮件列表中发布了一条消息 ...

  6. 运动基元_发现大量Java基元集合处理

    运动基元 在阅读博客文章5减少Java垃圾收集开销的技巧时 ,我想起了一个名为Trove的小型Java收集库,该库"为Java提供了高速的常规和原始收集". 我对将Trove应用到 ...

  7. 运动基元(二):贝塞尔曲线

    贝塞尔曲线是我第一个深入接触并使用于路径规划的运动基元.N阶贝塞尔曲线具有很多优良的特性,例如端点性.N阶可导性.对称性.曲率连续性.凸包性.几何不变性.仿射不变性以及变差缩减性.本章主要介绍贝塞尔曲 ...

  8. 运动基元(一):Dubin‘s曲线【part1】

    在机器人/自动驾驶系统中,规划模块是控制模块的上游.规划的结果里包含指导车辆行驶的信息,这些信息可以是车辆未来的期望位姿.速度.曲率.甚至是加速度.规划算法会用轨迹曲线.速度曲线来存储这些信息,我们一 ...

  9. 运动基元(三):多项式曲线

    我们在前面的基于连续优化的规划算法:以二次规划为例中用于规划的曲线就是一个五阶的多项式曲线.本章将更加详细介绍多项式曲线,先介绍最原始的多项式曲线形式 y ( x ) y(x) y(x),也即曲线的自 ...

最新文章

  1. Moment矩计算公式
  2. nginx 0.8.x + PHP 5.2.13 胜过apache十倍的web服务器
  3. c语言五子棋卡死,五子棋程序出错了
  4. 通信控件MSComm使用详解
  5. springmvc jpa_使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
  6. ztree 指定节点清空_节点操作
  7. java 日历工具_java中强大的时间处理工具:Calendar类(日历类)
  8. mysql5.7.12安装_mysql 5.7.12 winx64手动安装教程
  9. 2018-4-18 Linux学习笔记
  10. python中不包不包括_Python文件部分(不包括数据)
  11. 分数加减法混合计算机,1649.新人教版五年级数学下册第三课 分数加减混合运算(教案)(教学设计)(国家级一等奖、适合公开课).doc...
  12. 如何在线将mov格式转换成mp4视频
  13. 量化交易策略五_PEG策略
  14. java简述什么是事务_java什么是事务意思概念
  15. ssms管理linux数据库,SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置(图文教程详解)...
  16. 【burpsuite安全练兵场-服务端8】文件上传漏洞-7个实验(全)
  17. C#获取汉字拼音或首字母
  18. a-table的数据内容特定处换行处理
  19. wazuh-monitord agent连接监控
  20. Word插入希腊字母及特殊符号 分类整

热门文章

  1. 云平台的几个概念和典型平台关系对比
  2. linux网络接口是什么,网络接口是什么?What Is A Network Interface?--用Enki学Linux系列(1)...
  3. 鲲鹏服务器gpu型号,GPU服务器服务
  4. 国企计算机技术岗都干什么,大家听说的国企技术岗都是什么样子的?
  5. python爬虫可视化excel_Python爬虫以及数据可视化分析!
  6. PAT | 算法笔记 | 简单模拟
  7. html、css、vue、js在VsCode中代码格式化(代码自动调准为标准格式)
  8. 教你快速将多个TXT文档合并成一个多方法 手工方法无需软件
  9. 二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#
  10. MFC应用程序“生死因果”内幕