大家好,又见面了,我是你们的朋友全栈君。
在此页面中,我们概述了如何建立倒立摆系统的模型,刹车使用Simulink及其附件进行仿真。然后可以使用非线性仿真来测试模型的线性化版本的有效性。仿真模型还可以用于评估基于线性化模型设计的控制方案的性能。
在此示例中,我们将考虑带有手推车的倒立摆系统的二维版本,其中放置被约束为在下图所示的垂直平面中移动。对于该系统,控制输入是
使推车水平移动的力,输出是摆的角位置
和推车的水平位置
。
对于此示例,我们假设以下数量:
(M)推车质量0.5公斤
(m)摆质量0.2公斤
(b)推车的摩擦系数为0.1 N / m / sec
(l)到摆质量中心的长度0.3 m
(I)摆的质量惯性矩0.006 kg.m ^ 2
(F)施加在推车上的力
(x)推车位置坐标
垂直(向下)的(θ)摆角
下面是该系统的两个自由图。
由于手推车和摆锤之间的物理约束(销接头)会降低系统的自由度,因此该系统在Simulink中中进行建模具有挑战性。手推车和摆锤都具有一个自由度(为分别
状语从句:
)。我们修正牛顿第二定律(
)的第一原理生成这些自由度的微分方程,如下所示。
(1)
(2)
但是,有必要包括相互作用力
以及
手推车和摆锤之间的相互作用力,以便对系统的动力学进行完全建模。这些力量的加入需要建模
-和
质量的钟摆中心的翻译-components除了其旋转动力性能。在“ 倒立摆:系统建模” 教程中,相互作用力
和
进行了代数求解。
通常,我们想利用 Simulink的建模功能来为我们代数。因此,我们将为摆的附加
-和-
组分方程建模,如下所示。
(3)
(4)
(5)
(6)
但是,位置坐标
和
是的精确函数
。因此,我们可以用的导数表示它们的导数
。首先解决
-component方程,我们得出以下结果。
(7)
(8)
(9)
然后处理
-component方程式,我们得到以下结果。
(10)
(11)
(12)
然后,这些表达式可以代入表达式
和
从上方如下。
(13)
(14)
现在,我们可以在Simulink中表示这些方程式。Simulink可以直接与非线性方程式一起使用,因此没有必要像在“ 倒立摆:系统建模” 页面中那样线性化这些方程式。
我们可以按照下面给出的步骤,使用上面导出的公式在Simulink中建立倒立摆模型。
钟摆角度”为“ pi”,以表示钟摆开始笔直指向上方。
现在我们将四个方程式(1),(2),(13)和(14)分别输入到Fcn块中。让我们从下面重复的等式(1)开始。
(15)
现在,让我们输入方程式(2),下面将重复进行。
(16)
(17)
(18)
完成所有这些步骤后,生成的模型应如下所示。
为了将所有这些组件保存为单个子系统块,请首先选择所有块,然后右键单击所选部分,然后从菜单中 选择“ 从选择中 创建子系统” 。您的模型应如下所示。您也可以通过右键单击 此处 ,然后选择“ 将链接另存为…” 来下载该系统的文件。
在本节中,我们还显示了如何使用Simulink的Simscape扩展的物理建模模块来构建倒立摆模型。Simscape库中的块代表实际的物理组件;因此,可以构建复杂的多体动力学模型,而无需像上面通过应用牛顿定律所做的那样,根据物理原理来构建数学方程。
打开一个新的Simulink模型,并按照以下步骤在Simscape中创建倒立摆模型。为了使自己定向,我们将假设一个坐标系统,其中小车沿-
方向(向右正
方向)移动,而正-方向朝上。按照标准惯例,
然后将正方向指向运动平面。
-方向)。由于我们实质上是将购物车建模为只能平移的点质量,因此您不必更改任何其他默认参数。但是,我们计划使用Simscape对系统的运动进行动画处理,因此将创建额外的端口以相对于其重心(CG )定义购物车的四个角(仅二维)。下图显示了推车主体的可能定义。
轴旋转,因此唯一需要定义与该主方向相关的惯性。为简单起见,定义惯量: 等于“ 0.006 * eye(3)”,单位为 kg * m ^ 2 。由于我们将摆锤建模为具有大小和质量的刚体,因此该本体可以旋转,因此正确定义摆锤在推车上的附着位置及其CG非常重要。具体来说,定义连接点 CS1 位置为[[0 0 0]”,并且原点 相邻 并且将 CG 定义为与附件 CS1 (如上定义)相距0.3米。还定义摆的四个角。确保显示定义连接点的端口。在“ 可视化” 选项卡下,您还可以更改摆锤的颜色以使其从购物车中脱颖而出。
轴旋转,该轴与我们正在建模的情况相匹配。将与推车相对应的车身模块连接到关节的基础端口(B ),将与摆锤相对应的车身模块连接到关节的从动端口( F )。双击“ Revolute”块,并将“ 传感器/执行器端口数: ”设置为“ 2”。
,但是它将使响应结果与本示例其他页面中从线性化模型生成的结果一致。接下来,双击“关节传感器”块,然后将“角度” 测量的单位更改为 rad 。角位置是此关节所需的唯一测量,其他框可能保持未选中状态。
方向作用的事实。然后,将每个模块的从动端口(F )连接到代表手推车的车身模块上施加力( CS1 )和摩擦力( CS2 )的端口。
,m / s ^ 2 单位的默认方向(负方向)和大小(“ 9.81”)是正确的。该块还允许我们定义可视化和数值求解器的参数。对于此示例,默认参数是合适的。
。按照页面顶部的定义将“增益”设置为“ 0.1”,并将输入连接到小车的关节传感器模块的速度输出,并将增益的输出连接到摩擦力的关节执行器。
您还可以将该模型另存为单个子系统块,如上一节所述。您可以通过右键单击块并从结果菜单中选择“ 背景颜色” 来更改子系统的 颜色 。您可以通过右键单击 此处 下载完整的模型文件,但请注意,您需要Simulink的Simscape附加组件才能运行该文件。我们在“ 倒立摆:Simulink控制器设计” 页面中使用此模型 。
现在,我们将模拟倒立摆系统对施加到推车上的冲击力的响应。该仿真需要脉冲输入。由于Simulink库中没有这样的模块,因此我们将使用Pulse Generator模块来近似单位脉冲输入。我们可以使用上面生成的任何一个模型,但是,在这种情况下,我们将使用Simscape模型,因为它可以使我们可视化倒立摆系统的运动。请按照以下步骤进行操作。
如图所示,连接模块并标记连接到示波器模块的信号。
将该系统另存为Pend_Openloop.slx,或右键单击 此处 并选择“ 将链接另存为…”进行下载 。
在开始仿真之前,我们要启用倒立摆系统的可视化。从模型窗口顶部的菜单中,选择“ 仿真”>“模型配置参数” 。然后从窗口左侧的目录中选择 Simscape Multibody 1G 。然后选中 仿真过程 中 显示动画 的框,如下图所示。
现在,开始模拟(从“ 模拟” 菜单中选择 “运行” 或输入 Ctrl-T )。在仿真过程中,倒立摆的动画(如下图所示)将可视化系统产生的运动。
然后打开范围。您将看到以下有关摆角和手推车位置的输出。
请注意,钟摆反复摆动完整的旋转,其中角度以
弧度翻转。此外,手推车的位置不受限制地增长,但在摆动的摆锤的影响下会摆动。这些结果与“ 倒立摆:系统分析” 页面中显示的开环仿真结果相差很大。当然,这是由于该模拟采用了完全非线性的模型,而先前的分析却依赖于倒立摆模型的线性逼近。为了更直接地将仿真模型的结果与先前的结果进行比较,我们将从仿真模型中提取一个线性模型。
除了将我们的仿真模型与先前的结果进行比较之外,出于分析和设计的目的,可能还需要提取一个线性模型。通常应用于动态系统分析及其关联控制设计的许多分析技术只能应用于线性模型。因此,可能期望从非线性仿真模型中提取近似线性模型。我们将在Simulink中完成此操作。
M = 0.5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;
轴比例缩放。这可以通过在快捷菜单中选择“ 属性” 来实现。然后出现的窗口应如下所示,其中上图是摆角的响应,下图是手推车位置的响应。
这些图与“ 倒立摆:系统分析” 页面中生成的图非常相似,但不完全相同。
我们还可以将生成的线性化模型导出到 MATLAB工作区中,以进行进一步的分析和设计。只需在 线性分析工作区中 的 linsys1 对象上单击 鼠标 右键以复制该对象,即可完成此操作。然后在 MATLAB工作区中 单击以对象为对象。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171016.html原文链接:https://javaforall.cn