Simulink中的三阶速率限制器?如何生成平滑的触发信号?

时间:2013-11-27 10:53:20

标签: matlab simulink

首先,对于那些不熟悉Simulink的人来说,有一个可以想象的外部Simulink部分解决方案:

我需要创建一个满足以下条件的向量:

  • 已知初始值a1
  • 已知最终价值a2
  • 它具有预定义的步长,但长度不是预先确定的
  • 整个范围内的一阶导数限制为v_max-v_max
  • 整个范围内的二阶导数限制为a_max-a_max
  • 整个范围内的三阶导数限制为j_max-j_max
  • 在第一点和最后一点,所有衍生品都

在你问“你到目前为止尝试了什么”之前,我只是想在Simulink之外解决它,我尝试了下面的所有内容;) 但也许你们有个好主意,而我一直致力于自己的解决方案。


我想基于Simulink中的触发信号生成平滑的斜坡信号(三阶导数限制)。

要获得触发步骤,我创建了一个触发子系统来传播触发输出。它看起来像是:

enter image description here

但我实际上并不想要一步,我需要一个非常平滑的斜坡,有限的衍生产品直到第三顺序。背后的数学是:

displacement: x
speed: v = x'
acceleration: a = v' = x''
jerk: j = a' = v'' = x'''

(如果这看起来很熟悉,我曾经有一个非常similar question。我想到了它的赏金,但在对问题进行必要的编辑之后,两个答案都将无效)

由于只有1阶速率限制器,我使用了两个导数和一个双重积分来解决我的问题。但是有一个市长的缺点,我不能再忽视了。为了便于说明,我选择了相对较大的步长0.1。

完整的最小示例(固定步骤,步长:0.1,ode4): Download here

enter image description here

可以看出,信号甚至没有达到10的预期步高,而且最后也不是恒定的。

在整个模型的开发过程中,这种方法对于小步长来说足够令人满意。但是我达到了我真正需要平滑坡道的程度。这意味着我需要一个最终恒定的信号,其值恰好是由步高增益指定的值。

我已经花了好几天时间来解决这个问题,并希望现在能够提供一些帮助。

我的一些想法:

  • 动态增加步长超过实际所需值并使最终输出饱和。如果速率限制,步长和模拟步长不灵活,则可能找到令人满意的解决方案。但由于一切都必须灵活,因此有太多情况会违反加速度和加加速度限制。
  • 我尝试使用Matlab function块并编写我自己的3阶速率限制器。虽然我觉得触发时刻似乎是可能的,但我没有解决方法如何平滑斜坡末端的“减速”。此外,我需要C编译器,这将使我很难在其他系统上使用我的模型没有问题。 (至少我是这么认为的。)

求解器不能显着改变(ode3或ode4),固定步长是强制性的(0.00001到0.01)。


目前使用的,不是非常有用的方法:

enter image description here

对于{{1>} 1.07 ,我得到以下输出(所有值都按其限制标准化): enter image description here 虽然位移看起来不错,但违反加速度极限是非常有害的。

对于{{1>} 1.05 ,我得到以下输出(所有值都按其限制标准化): enter image description here 加速度保持在其边界,但位移未达到预期值。 (图中并不是很清楚)混蛋仍然很大。 (我可以忍受,但这并不好)


所以在我看来,内部的Simulink解决方案远非现实。任何想法如何创建一个良好的自定义功能块?


模拟步长,步长和速率限制在模拟开始之前是已知的。 (但是我有很多这些触发了连续平滑的斜坡,它应该提供事件离散控制)。因此,我可以想象在simulink外部创建整个平滑斜坡并将其保存为dynamic amplification对象,并在激活触发器时将其附加到当前信号上。

3 个答案:

答案 0 :(得分:1)

你看到的问题是因为差异不是很好。 取差异会放大模拟中存在的数值。

如果您尝试应用实际步骤,那么混蛋总是很大。 我想对于你的方法,以相反的方式工作会更好: 即使你的步伐达到一个挺举,加速度和速度。

我认为你在找像ref3这样的东西: http://www.dct.tue.nl/home_of_ref3.htm 请注意网站上的免责声明,并且使用起来有点麻烦。

答案 1 :(得分:0)

一种简单(尚未改进)的方法是使用速率限制器,然后使用带过滤器的状态空间模型。从过滤器中获得速度,然后您可以应用速率限制器。继续使用速率限制器和过滤器,直到获得所需的曲线。

否则,您可以使用runge kutta公式或有限差分来得出更高阶的数值限制器。然而有人指出,他们可能会受到不良条件的影响。

我通常做的是使用一个速率限制器和三阶滤波器,然后调整时间常数(1个三极),以满足我的需求。这很有效,特别是

答案 2 :(得分:0)

长度的积分链> 1不稳定!

有一个涉及轨迹规划的大量研究领域。最简单的方法可能是使用FIR滤波器(Biagotti等)或实施在线轨迹规划器(Ezair等2014 / Knierim等2012)。