最近刚开始了一个机器人的建模与控制方面的课题。其中要求机器人末端到达目标点后对其残留振动做一个抑制。按师兄的建议,去小学了一手工业中常用的输入整形(Input Shaping)的控制方法。

  我们在抑制振动之前,首先要明确振动到底是什么。如果对控制原理有一定了解的话,我们知道,对于一个需要精确定位的系统,比如机械臂、塔吊、码头集装箱等,一般由于模型中存在着振荡模态,所以当其到达期望的位置时,并不能立刻停下来,而是会进行一段时间逐渐衰减的摆动,也就是我们所说的残留振动
  抑制振动的方法有很多,有通过增大零部件刚度、阻尼等通过改变系统模型而达到减小振动的被动控制的方法;有通过引入传感器形成闭环的反馈控制的方法;当然也有开环控制方法,我们这里重点探究的输入整形的方法便是开环控制的一种。

  而提高零部件的刚度、阻尼势必会增大机构的重量,也会提高成本,而引入传感器不仅增加了系统的复杂性,还使控制难度也增大了。

什么是输入整形?

  输入整形从字面意思就能够大致的理解了,就是把原本你期望的输入信号进行一步整形变换后再丢给后面的控制器。一个简单的控制系统是这样的:

而加入输入整形器后系统变成了这样:

  显然,相当于只是在控制系统中加入了一个前馈环节。

  输入整形器里面其实就是一系列的脉冲,它的作用就是把输入的信号与这一系列脉冲信号进行卷积后输出出来,成为整形信号再发给后面的系统。

输入整形的基本思想

  试想有一辆小车放在桌上,车上用绳子挂了一个小球。我现在想让小车往前走1m,假如我直接给小车发的命令是走1m,那么根据常识我们很容易知道小车到1m停下来之后,小球并不会停下来,而是会来回摆动。

  那么如果现在我换一种做法,我分两段走,先让小车走0.7m,看到小球摆到车前面时,再发命令让它走剩下的0.3m,这样一来,当小车停在1m的位置时,小球很有可能也就定住了。

  其实从这个小例子可以看出输入整形的基本思想,就是一个输入信号不管怎么样都会在系统中产生一个振动,那么我就把原本的输入信号分几次给(最少两次),只要时间间隔合适,他们产生的振动通过线性叠加后,便可以实现相互抵消。比如下图,在0时刻处给一个A1脉冲信号,它产生的振动是红色线所示的衰减振荡,再在0.5s的时刻给一个A2的信号,它也会产生一个蓝色线所示的衰减震荡。然而当把它们俩产生的振动相加后,发现完美的抵消了。

输入整形器的实现

  根据前面的介绍,输入整形器的关键就是计算出每一个脉冲信号的幅值以及它们各自的时滞。输入整形器的数学表示为
C(s)=∑Aie−tisC(s)=\sum A_ie^{-t_is} C(s)=∑Ai​e−ti​s
  输入整形器的计算方法有好几种,这里只介绍一种可以计算任意个脉冲的整形器的计算方法——脉冲响应法。

  以二阶系统为例,下面是一个典型的二阶系统的传递函数
G(s)=ωn2s2+2ξωns+ωn2(1)G(s)=\frac{\omega_n^2}{s^2+2\xi \omega_ns+\omega_n^2} \tag 1 G(s)=s2+2ξωn​s+ωn2​ωn2​​(1)
它的单位脉冲响应为
g(t)=ωn1−ξ2e−ξωntsin⁡ωdt(2)g(t)=\frac{\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_nt}\sin\omega_dt \tag 2 g(t)=1−ξ2​ωn​​e−ξωn​tsinωd​t(2)
  其中ωn\omega_nωn​为系统的自然频率,ωd\omega_dωd​为系统的阻尼振荡频率,二者关系为ωd=ωn1−ξ2\omega_d=\omega_n\sqrt{1-\xi^2}ωd​=ωn​1−ξ2​。

  上文中提到的,整形器里面含有一系列的不同幅值和时滞的脉冲。假如一个脉冲的幅值和时滞分别为AiA_iAi​和tit_iti​,那么它引起的响应为
yi(t)=Aiωn1−ξ2e−ξωn(t−ti)sin⁡ωd(t−ti)(3)y_i(t)=\frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}\sin\omega_d(t-t_i) \tag 3 yi​(t)=1−ξ2​Ai​ωn​​e−ξωn​(t−ti​)sinωd​(t−ti​)(3)
系统总的响应为所有脉冲引起的响应之和:
y(t)=∑yi(t)=∑Aiωn1−ξ2e−ξωn(t−ti)sin⁡ωd(t−ti)(4)y(t)=\sum y_i(t)=\sum \frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}\sin\omega_d(t-t_i) \tag 4 y(t)=∑yi​(t)=∑1−ξ2​Ai​ωn​​e−ξωn​(t−ti​)sinωd​(t−ti​)(4)
用三角函数差角公式展开
y(t)=∑Aiωn1−ξ2e−ξωn(t−ti)(sin⁡ωdtcos⁡ωdti−cos⁡ωdtsin⁡ωdti)(5)y(t)=\sum \frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}(\sin\omega_dt\cos \omega_dt_i-\cos \omega_dt\sin \omega_dt_i) \tag 5 y(t)=∑1−ξ2​Ai​ωn​​e−ξωn​(t−ti​)(sinωd​tcosωd​ti​−cosωd​tsinωd​ti​)(5)
稍作变形
y(t)=sin⁡ωdt⋅∑Aiωn1−ξ2e−ξωn(t−ti)cos⁡ωdti−cos⁡ωdt⋅∑Aiωn1−ξ2sin⁡ωdti)=ωn1−ξ2e−ξωnt⋅(sin⁡ωdt⋅∑Aieξωnticos⁡ωdti−cos⁡ωdt⋅∑Aieξωntisin⁡ωdti)(6)y(t)=\sin\omega_dt \cdot \sum \frac{A_i\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_n(t-t_i)}\cos \omega_dt_i-\cos\omega_dt\cdot\sum\frac{A_i\omega_n}{\sqrt{1-\xi^2}}\sin \omega_dt_i)\\ =\frac{\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_nt}\cdot (\sin\omega_dt \cdot \sum A_ie^{\xi\omega_nt_i}\cos \omega_dt_i-\cos\omega_dt \cdot \sum A_ie^{\xi\omega_nt_i}\sin \omega_dt_i) \tag 6 y(t)=sinωd​t⋅∑1−ξ2​Ai​ωn​​e−ξωn​(t−ti​)cosωd​ti​−cosωd​t⋅∑1−ξ2​Ai​ωn​​sinωd​ti​)=1−ξ2​ωn​​e−ξωn​t⋅(sinωd​t⋅∑Ai​eξωn​ti​cosωd​ti​−cosωd​t⋅∑Ai​eξωn​ti​sinωd​ti​)(6)
使用三角函数辅助角公式
y(t)=ωn1−ξ2e−ξωnt(∑Aieξωnticos⁡ωdti)2+(∑Aieξωntisin⁡ωdti)2⋅sin⁡(ωdt−ϕ)(7)y(t)=\frac{\omega_n}{\sqrt{1-\xi^2}}e^{-\xi\omega_nt}\sqrt{(\sum A_ie^{\xi\omega_nt_i}\cos \omega_dt_i)^2+(\sum A_ie^{\xi\omega_nt_i}\sin \omega_dt_i)^2}\cdot \sin(\omega_dt-\phi) \tag 7 y(t)=1−ξ2​ωn​​e−ξωn​t(∑Ai​eξωn​ti​cosωd​ti​)2+(∑Ai​eξωn​ti​sinωd​ti​)2​⋅sin(ωd​t−ϕ)(7)
其中ϕ=arctan⁡∑Aieξωntisin⁡ωdti∑Aieξωnticos⁡ωdti\phi=\arctan \frac{\sum A_ie^{\xi\omega_nt_i}\sin \omega_dt_i}{\sum A_ie^{\xi\omega_nt_i}\cos \omega_dt_i}ϕ=arctan∑Ai​eξωn​ti​cosωd​ti​∑Ai​eξωn​ti​sinωd​ti​​

很多文献里面都定义了一个叫做残留振荡百分比的东西:
V(ξ,ωn)=e−ξωntn(∑Aieξωnticos⁡ωdti)2+(∑Aieξωntisin⁡ωdti)2(8)V(\xi,\omega_n)=e^{-\xi\omega_nt_n}\sqrt{(\sum A_ie^{\xi\omega_nt_i}\cos \omega_dt_i)^2+(\sum A_ie^{\xi\omega_nt_i}\sin \omega_dt_i)^2} \tag 8 V(ξ,ωn​)=e−ξωn​tn​(∑Ai​eξωn​ti​cosωd​ti​)2+(∑Ai​eξωn​ti​sinωd​ti​)2​(8)
  (其实这里我并没有完全理解这个VVV的定义方式,我大概能猜到应该是把(7)式与(3)式作比,从而体现总响应与最后一次脉冲产生的振动的比较,然而里面的AnA_nAn​去哪了就是我没相通的地方。如果有懂哥能够帮忙解释一下就再好不过了。不过这个倒不影响大局,人家这么定义的就这么拿来用就行了。)

  我们的目标当然是消除残留振动,所以就要让这个VVV等于0。显然要达到这样一个目的,只能是根号等于0。也就是
{∑Aieξωnticos⁡ωdti=0∑Aieξωntisin⁡ωdti=0(9)\begin{cases} \sum A_ie^{\xi\omega_nt_i}\cos \omega_dt_i=0 \tag 9\\ \sum A_ie^{\xi\omega_nt_i}\sin \omega_dt_i=0 \end{cases} {∑Ai​eξωn​ti​cosωd​ti​=0∑Ai​eξωn​ti​sinωd​ti​=0​(9)

ZV整形器

  ZV整形器是输入整形最简单的实现方法了。它只有两个脉冲,且为了计算方便,让第一个脉冲从0时刻就开始作用。且为了使系统达到目标点,两次脉冲的幅值之和应该为1。

即约束条件如下:
t1=0A1+A2=1t_1=0\\ A_1+A_2=1 t1​=0A1​+A2​=1
将条件带入(9)式
{A1+A2eξωnt2cos⁡ωdt2=0A2eξωnt2sin⁡ωdt2=0\begin{cases} A_1+A_2e^{\xi\omega_nt_2}\cos \omega_dt_2=0\\ A_2e^{\xi\omega_nt_2}\sin \omega_dt_2=0 \end{cases} {A1​+A2​eξωn​t2​cosωd​t2​=0A2​eξωn​t2​sinωd​t2​=0​
由第二行可知ωdt2=π\omega_dt_2=\piωd​t2​=π,即t2=πωdt_2=\frac{\pi}{\omega_d}t2​=ωd​π​

  再将ωdt2=π\omega_dt_2=\piωd​t2​=π带入第一行得A1−A2eξωnt2=0A_1-A_2e^{\xi\omega_nt_2}=0A1​−A2​eξωn​t2​=0,再结合A1+A2=1A_1+A_2=1A1​+A2​=1可解出两个脉冲的幅值
A1=eξωnt21+eξωnt2,A2=11+eξωnt2A_1=\frac{e^{\xi\omega_nt_2}}{1+e^{\xi\omega_nt_2}},A_2=\frac{1}{1+e^{\xi\omega_nt_2}} A1​=1+eξωn​t2​eξωn​t2​​,A2​=1+eξωn​t2​1​
这样一来ZV整形器也就设计完成了。

仿真的效果如下:

未整形:

模型准确时振动抑制效果:

模型有10%的误差时振动抑制效果:

  可以看出,ZV整形器在模型准确时对振动的抑制效果非常好,且收敛的也非常快;然而一旦模型不准确,则还是会出现很多个周期的残留振动。

ZVD整形器

  当模型参数不准确时,ZV整形器的零点不能有效的对消系统的零点,从而不能有效的消除残留振动。为了提高整形器的鲁棒性,对式V(ξ,ωn)V(\xi,\omega_n)V(ξ,ωn​)的微分方程进行约束,为系统配置多重零点,这种整形器称为ZVD整形器,也就新引入了一个约束:
∂∂ωV(ξ,ω)=0\frac{\partial}{\partial \omega}V(\xi,\omega)=0 ∂ω∂​V(ξ,ω)=0
  那么要实现这个约束条件,就要增加一个脉冲,即3个脉冲实现输入整形。计算过程不在赘述了,直接给出计算结果:
A1=11+2e−ξπ1−ξ2+e−2ξπ1−ξ2A2=2e−ξπ1−ξ21+2e−ξπ1−ξ2+e−2ξπ1−ξ2A3=e−2ξπ1−ξ21+2e−ξπ1−ξ2+e−2ξπ1−ξ2t1=0t2=πω1−ξ2t3=2πω1−ξ2A_1=\frac{1}{1+2e^{\frac{-\xi\pi}{\sqrt{1-\xi^2}}}+e^{\frac{-2\xi\pi}{\sqrt{1-\xi^2}}}}\\ A_2=\frac{2e^{\frac{-\xi\pi}{\sqrt{1-\xi^2}}}}{1+2e^{\frac{-\xi\pi}{\sqrt{1-\xi^2}}}+e^{\frac{-2\xi\pi}{\sqrt{1-\xi^2}}}}\\ A_3=\frac{e^{\frac{-2\xi\pi}{\sqrt{1-\xi^2}}}}{1+2e^{\frac{-\xi\pi}{\sqrt{1-\xi^2}}}+e^{\frac{-2\xi\pi}{\sqrt{1-\xi^2}}}}\\ t_1=0\\ t_2=\frac{\pi}{\omega\sqrt{1-\xi^2}}\\ t_3=\frac{2\pi}{\omega\sqrt{1-\xi^2}} A1​=1+2e1−ξ2​−ξπ​+e1−ξ2​−2ξπ​1​A2​=1+2e1−ξ2​−ξπ​+e1−ξ2​−2ξπ​2e1−ξ2​−ξπ​​A3​=1+2e1−ξ2​−ξπ​+e1−ξ2​−2ξπ​e1−ξ2​−2ξπ​​t1​=0t2​=ω1−ξ2​π​t3​=ω1−ξ2​2π​
仿真效果如下:

系统模型准确时振动抑制效果

模型有10%的误差时振动抑制效果:

  和ZV整形器比较而言,当模型准确时,ZV整形器的快速性显然要优于ZVD整形器,二者的整形效果当然都是非常好的;而一旦当我们拿到的系统模型不准确时,ZVD的振动抑制效果就优于ZV了

其他整形器

  在文献里面还看到了一些其他的整形器,如极不灵敏整形器、最优整形器等,就有待进一步的探究了

参考文献
[1]陈俊恒. 输入整形减振算法的研究与实现[D].哈尔滨工业大学,2010.
[2]秦望舒. 基于输入整形技术的运动控制算法的研究[D].哈尔滨工业大学,2010.

输入整形(Input Shaping)——一种振动抑制方法相关推荐

  1. error: expected ‘}’ at end of input的一种可能解决方法

    1.排除正常的括号对应 2.直接再函数实现前面加个}看是否会报错.如果不是,则必定是头文件的问题,检查包含头文件 3.如果上一步无错误则检查每个函数具体实现 网上有些方法比较笨,之前跳过第二步直接来第 ...

  2. 输入整形的matlab代码实现【新】

    文章目录 说明 程序 仿真结果 说明 输入整形算法自己研究过一段时间,之前也在此平台分享过,不过写得比较抽象.有很多朋友询问输入整形的实现细节,这里用一种简单的方式分享下对于ZV输入整形的理解与实现, ...

  3. 密集假目标 Matlab,一种雷达密集假目标干扰抑制方法

    一种雷达密集假目标干扰抑制方法 [技术领域] [0001] 本专利涉及一种雷达干扰抑制方法,特别涉及一种雷达密集假目标干扰抑制方 法. [背景技术] [0002] 现代军事电子技术的一个重要特点,就是 ...

  4. 爆炸波matlab,MATLAB爆炸场冲击波压力测试寄生效应抑制方法研究

    摘要摘要:爆炸产生的冲击波表征着武器的威力和工作状态,对毁伤武器的设计有重要意义.文中针对冲击波压力测试时出现的寄生效应,对其的抑制方法进行研究.从理论上分析热冲击,振动,机械冲击等寄生效应的产生原因 ...

  5. 电磁兼容问题的抑制方法

    电磁兼容性(EMC)是指设备或系统在其电磁环境中符合要求运行并不对其环境中的任何设备产生无法忍受的电磁干扰的能力. EMC包括EMI(电磁干扰)及EMS(电磁耐受性)两部分,所谓EMI电磁干扰,乃为机 ...

  6. 概率整形 Peobabilistic Shaping PS 第一节

    概率整形概述 概率整形(Peobabilistic Shaping, PS)是一种针对于调制格式的优化技术,它为光通信通信提供了非常高的灵活性,但不会增加系统复杂性.尤其是光通信中的非线性问题会限制功 ...

  7. python命令行模式怎么输入_python获得命令行输入的参数的两种方式

    外部直接执行python文件时,我们有时需要获得命令行的参数6ok免费资源网 获得命令行参数的两种方式6ok免费资源网 1.通过sys.argv6ok免费资源网 sys.argv:获得一个参数列表,第 ...

  8. input的23种type类型

    目录 概述 全部类型 传统类型 新增类型 概述 随着html5的出现,input标签新增了多种类型,用以接收各种类型的用户输入.其中传统输入控件有10种,新增输入控件有13种. 全部类型 text 定 ...

  9. 思科SPCCIE必考QOS流量整形traffic shaping原理及配置方法-ielab网络实验室

    思科SPCCIE必考QOS流量整形traffic shaping原理及配置方法-ielab网络实验室 流量整形(traffic shaping)典型作用是限制流出某一网络的某一连接的流量与突发,使这类 ...

最新文章

  1. XAMPP维基百科,自由的百科全书
  2. 第十一章:集合(一)
  3. jenkins运行日志时间与linux,持续集成之Jenkins结合脚本实现代码自动化部署及一键回滚至上一版本...
  4. 好程序员Web前端分享程序的三大结构(二)while循环
  5. mysql 自增列坏处_MySQL--更新自增列的潜在风险
  6. Android之RxJava(一)
  7. spring cloud bus_Spring Cloud学习笔记--消息总线(Bus)
  8. lvm 的用法和小案例
  9. Python使用hashlib模块生成给定文本数据的签名摘要信息(包括各种哈希函数)
  10. Redis五大数据类型以及操作---散列表
  11. Android音频系统之AudioFlinger(一)
  12. Android根据经纬度计算距离
  13. 一份来自前端开发工程师的规范简历
  14. 仿古建筑为什么那么丑
  15. 梦幻星空html,HTML5特效展示,梦幻星空
  16. 用户体验五要素_【产品经理】如何理解“用户体验要素”5层模型?
  17. html 图片repeat,html中repeat技术分享
  18. 【OAI】部署5GSA独立组网网络切片例程及例程解析
  19. bm22 bm23 bm1
  20. Ubuntu防火墙ufw规则配置

热门文章

  1. 限量级预告!劳动合同电子化,这样做最合法
  2. 斐波拉契数列前100项求和c语言,C++斐波那契数列前100项详细数据
  3. JS 数字 、中文、 英文、判断
  4. UnityMesh 博文收藏
  5. grep(模式匹配器)详解
  6. 微信开发自带版本管理的使用(图文)---推送,抓取,拉取,贮藏
  7. 基于51单片机及PCF8591芯片的ADC电压检测
  8. image_thumb
  9. 从学会用橡皮鸭 debug 的那天,我,走上一条不归之路
  10. C++程序设计:原理与实践(进阶篇)16.3 通用搜索算法f?ind_if()