倒立摆:Simulink建模[通俗易懂]

倒立摆:Simulink建模[通俗易懂]倒立摆:Simulink建模内容在此页面中,我们概述了如何建立倒立摆系统的模型,刹车使用Simulink及其附件进行仿真。然后可以使用非线性仿真来测试模型的线性化版本的有效性。仿真模型还可以用于评估基于线性化模型设计的控制方案的性能。物理设置和系统方程式在此示例中,我们将考虑带有手推车的倒立摆系统的二维版本,其中放置被约束为在下图所示的垂直平面中移动。对于该系统,控制输入是使推车水平移动的力,输出是摆的角位置和推车的水平位置。对于此示例…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

倒立摆:Simulink建模

内容

在此页面中,我们概述了如何建立倒立摆系统的模型,刹车使用Simulink及其附件进行仿真。然后可以使用非线性仿真来测试模型的线性化版本的有效性。仿真模型还可以用于评估基于线性化模型设计的控制方案的性能。

物理设置和系统方程式

在此示例中,我们将考虑带有手推车的倒立摆系统的二维版本,其中放置被约束为在下图所示的垂直平面中移动。对于该系统,控制输入是
倒立摆:Simulink建模[通俗易懂]
使推车水平移动的力,输出是摆的角位置
倒立摆:Simulink建模[通俗易懂]
和推车的水平位置
倒立摆:Simulink建模[通俗易懂]

倒立摆: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建模[通俗易懂]

由于手推车和摆锤之间的物理约束(销接头)会降低系统的自由度,因此该系统在Simulink中中进行建模具有挑战性。手推车和摆锤都具有一个自由度(为分别
倒立摆:Simulink建模[通俗易懂]
状语从句:
倒立摆:Simulink建模[通俗易懂]
)。我们修正牛顿第二定律(
倒立摆:Simulink建模[通俗易懂]
)的第一原理生成这些自由度的微分方程,如下所示。
(1)
倒立摆:Simulink建模[通俗易懂]
(2)
倒立摆:Simulink建模[通俗易懂]
但是,有必要包括相互作用力
倒立摆:Simulink建模[通俗易懂]
以及
倒立摆:Simulink建模[通俗易懂]
手推车和摆锤之间的相互作用力,以便对系统的动力学进行完全建模。这些力量的加入需要建模
倒立摆:Simulink建模[通俗易懂]
-和
倒立摆:Simulink建模[通俗易懂]
质量的钟摆中心的翻译-components除了其旋转动力性能。在“
倒立摆:系统建模”
教程中,相互作用力
倒立摆:Simulink建模[通俗易懂]

倒立摆:Simulink建模[通俗易懂]
进行了代数求解。
通常,我们想利用
Simulink的建模功能来为我们代数。因此,我们将为摆的附加
倒立摆:Simulink建模[通俗易懂]
-和-
倒立摆:Simulink建模[通俗易懂]
组分方程建模,如下所示。
(3)
倒立摆:Simulink建模[通俗易懂]
(4)
倒立摆:Simulink建模[通俗易懂]
(5)
倒立摆:Simulink建模[通俗易懂]
(6)
倒立摆:Simulink建模[通俗易懂]
但是,位置坐标
倒立摆:Simulink建模[通俗易懂]

倒立摆:Simulink建模[通俗易懂]
是的精确函数
倒立摆:Simulink建模[通俗易懂]
。因此,我们可以用的导数表示它们的导数
倒立摆:Simulink建模[通俗易懂]
。首先解决
倒立摆:Simulink建模[通俗易懂]
-component方程,我们得出以下结果。
(7)
倒立摆:Simulink建模[通俗易懂]
(8)
倒立摆:Simulink建模[通俗易懂]
(9)
倒立摆:Simulink建模[通俗易懂]
然后处理
倒立摆:Simulink建模[通俗易懂]
-component方程式,我们得到以下结果。
(10)
倒立摆:Simulink建模[通俗易懂]
(11)
倒立摆:Simulink建模[通俗易懂]
(12)
倒立摆:Simulink建模[通俗易懂]
然后,这些表达式可以代入表达式
倒立摆:Simulink建模[通俗易懂]

倒立摆:Simulink建模[通俗易懂]
从上方如下。
(13)
倒立摆:Simulink建模[通俗易懂]
(14)
倒立摆:Simulink建模[通俗易懂]
现在,我们可以在Simulink中表示这些方程式。Simulink可以直接与非线性方程式一起使用,因此没有必要像在“
倒立摆:系统建模”
页面中那样线性化这些方程式。

用Simulink建立非线性模型

我们可以按照下面给出的步骤,使用上面导出的公式在Simulink中建立倒立摆模型。
  • 首先在MATLAB命令窗口中键入
    simulink
    以打开Simulink环境。然后,通过在打开的
    Simulink起始页
    窗口中选择“
    新建”>“ Simulink”>“空白模型”
    ,或按
    Ctrl-N,
    在Simulink中打开一个新模型窗口。
  • 更改每个Fcn块的标签以匹配其关联功能。
  • 双击每个Integrator块以添加相关状态变量的
    State Name
    :。有关示例,请参见下图。还要将“
    初始条件”
    更改为


    倒立摆:Simulink建模[通俗易懂]
    钟摆角度”为“ pi”,以表示钟摆开始笔直指向上方。

倒立摆:Simulink建模[通俗易懂]

  • 从Simulink / Signal Routing库中插入四个多路复用器(Mux)块,每个Fcn块一个。
  • 分别从Simulink / Sinks和Simulink / Sources库中插入两个Out1块和一个In1块。然后双击块的标签以更改其名称。两个输出用于手推车的“位置”和摆的“角度”,而一个输入用于应用于手推车的“力”。
  • 将Mux块的每个输出连接到相应Fcn块的输入。

倒立摆:Simulink建模[通俗易懂]

现在我们将四个方程式(1),(2),(13)和(14)分别输入到Fcn块中。让我们从下面重复的等式(1)开始。
(15)
倒立摆:Simulink建模[通俗易懂]
  • 按照上一步中指定的顺序将这三个输入连接到此Mux块。
  • 双击第一个Fcn块,然后输入
    xddot
    的方程式,如下所示。

倒立摆:Simulink建模[通俗易懂]

现在,让我们输入方程式(2),下面将重复进行。
(16)
倒立摆:Simulink建模[通俗易懂]
  • 将上面的方程式输入到Fcn块中,更改Mux块的输入数量,然后以正确的顺序将正确的信号连接到Mux块。
  • 对下面重复的方程式(13)和(14)重复此过程。
(17)
倒立摆:Simulink建模[通俗易懂]
(18)
倒立摆:Simulink建模[通俗易懂]
完成所有这些步骤后,生成的模型应如下所示。

倒立摆:Simulink建模[通俗易懂]

为了将所有这些组件保存为单个子系统块,请首先选择所有块,然后右键单击所选部分,然后从菜单中
选择“
从选择中
创建子系统”
。您的模型应如下所示。您也可以通过右键单击
此处
,然后选择“
将链接另存为…”
来下载该系统的文件。

倒立摆:Simulink建模[通俗易懂]

用Simscape建立非线性模型

在本节中,我们还显示了如何使用Simulink的Simscape扩展的物理建模模块来构建倒立摆模型。Simscape库中的块代表实际的物理组件;因此,可以构建复杂的多体动力学模型,而无需像上面通过应用牛顿定律所做的那样,根据物理原理来构建数学方程。
打开一个新的Simulink模型,并按照以下步骤在Simscape中创建倒立摆模型。为了使自己定向,我们将假设一个坐标系统,其中小车沿-
倒立摆:Simulink建模[通俗易懂]
方向(向右正
倒立摆:Simulink建模[通俗易懂]
方向)移动,而正-方向朝上。按照标准惯例,
倒立摆:Simulink建模[通俗易懂]
然后将正方向指向运动平面。
  • 从Simscape / Multibody / First Generation(1G)/ Bodies库中插入一个Body块来表示购物车。遵循本页顶部给出的系统参数,双击块,然后将
    质量:
    设置为“ 0.5”,单位为
    kg
    。默认情况下,Body块包括两个端口。由于我们需要端口来定义摆锤与手推车的连接位置以及施加外力和摩擦力的位置,因此必须添加第三个端口。这可以通过“
    位置”选项卡右侧的按钮完成。由于手推车只能沿一个维度移动,因此两个力必须沿该维度并置(
    倒立摆:Simulink建模[通俗易懂]
    -方向)。由于我们实质上是将购物车建模为只能平移的点质量,因此您不必更改任何其他默认参数。但是,我们计划使用Simscape对系统的运动进行动画处理,因此将创建额外的端口以相对于其重心(CG
    )定义购物车的四个角(仅二维)。下图显示了推车主体的可能定义。

倒立摆:Simulink建模[通俗易懂]

  • 插入第二个Body块来代表摆锤。双击该块,然后将
    质量:
    设置为“ 0.2”,单位为
    kg。由于摆只能绕-
    倒立摆:Simulink建模[通俗易懂]
    轴旋转,因此唯一需要定义与该主方向相关的惯性。为简单起见,定义惯量:
    等于“ 0.006 * eye(3)”,单位为
    kg * m ^ 2
    。由于我们将摆锤建模为具有大小和质量的刚体,因此该本体可以旋转,因此正确定义摆锤在推车上的附着位置及其CG非常重要。具体来说,定义连接点
    CS1
    位置为[[0 0 0]”,并且原点
    相邻
    并且将
    CG
    定义为与附件
    CS1
    (如上定义)相距0.3米。还定义摆的四个角。确保显示定义连接点的端口。在“
    可视化”
    选项卡下,您还可以更改摆锤的颜色以使其从购物车中脱颖而出。

倒立摆:Simulink建模[通俗易懂]

  • 接下来,从Simscape / Multibody / First Generation(1G)/ Jjoints库中添加一个Revolute块,以定义将摆锤连接到购物车的关节。默认情况下,关节将被定义为围绕-
    倒立摆:Simulink建模[通俗易懂]
    轴旋转,该轴与我们正在建模的情况相匹配。将与推车相对应的车身模块连接到关节的基础端口(B
    ),将与摆锤相对应的车身模块连接到关节的从动端口(
    F
    )。双击“ Revolute”块,并将“
    传感器/执行器端口数:
    ”设置为“ 2”。
  • 然后从Simscape / Multibody / First Generation(1G)/ Sensors&Actuators库中添加一个Joint Initial Condition块和一个Joint Sensor块,并将这些块连接到Revolute块。双击“联合初始条件”块,然后选中“
    启用”框。我们可以将默认值用于关节的初始位置和速度。采用0度的初始位置对应于根据上面的摆体的定义垂直向上指向的摆。这与的原始定义不一致
    倒立摆:Simulink建模[通俗易懂]
    ,但是它将使响应结果与本示例其他页面中从线性化模型生成的结果一致。接下来,双击“关节传感器”块,然后将“角度”
    测量的单位更改为
    rad
    。角位置是此关节所需的唯一测量,其他框可能保持未选中状态。
  • 从Simscape / Multibody / First Generation(1G)/ Joints库中添加两个Prismatic块,以定义手推车的平移自由度以及对手推车的作用力。由于手推车在技术上是点质量,因此我们只需要一个棱柱块,但是通过使用两个棱柱块,我们可以在不同的位置施加力。双击每个棱镜块,然后将“
    动作轴”更改为“ [1 0 0]”,以反映两个力沿-
    倒立摆:Simulink建模[通俗易懂]
    方向作用的事实。然后,将每个模块的从动端口(F
    )连接到代表手推车的车身模块上施加力(
    CS1
    )和摩擦力(
    CS2
    )的端口。
  • 接下来,从Simscape / Multibody / First Generation(1G)/ Bodies库中添加两个Ground块,以定义推车运动的基础。具体来说,将每个接地块的输出连接到每个棱柱形块的基本端口(
    B
    )。
  • 对于您刚刚创建的接地块之一,双击该块并选中“
    Show Machine Environment”端口框。然后从Simscape / Multibody / First Generation(1G)/ Bodies库中添加一个Machine Environment模块,并将其连接到您刚刚为其添加端口的Ground模块。机器环境模块允许我们在仿真中定义重力。在这种情况下
    倒立摆:Simulink建模[通俗易懂]
    ,m / s ^ 2
    单位的默认方向(负方向)和大小(“ 9.81”)是正确的。该块还允许我们定义可视化和数值求解器的参数。对于此示例,默认参数是合适的。
  • 接下来,从Simscape / Multibody / First Generation(1G)/ Sensors&actuators库中添加两个关节执行器模块和一个关节传感器模块。关节致动器模块将用于生成外部作用力和摩擦力,而关节传感器模块将感测小车的运动。注意,还有一个平移摩擦块可用,但是由于我们仅采用简单的粘性模型,因此我们将自己计算摩擦力。双击“棱柱”块之一,并将“
    传感器/执行器端口数:
    ”设置为“ 1”(对于力执行器)。对于其他棱柱形块,设置
    传感器/执行器端口数:
    到“ 2”(一个用于力致动器,另一个用于手推车传感器)。然后按所述连接关节执行器和关节传感器模块。对于这种情况,关节执行器模块的默认值已足够,但是由于计算摩擦力需要速度,因此我们必须将关节传感器模块更改为输出位置和速度。双击“关节传感器”模块,然后选中“
    速度
    ”框,同时选中“
    位置
    ”框。无需更改默认指标单位。同时取消选中“将
    所选参数作为一个信号输出
    ”复选框。
  • 从Simulink / Math Operations库中添加一个增益块,以表示粘性摩擦系数
    倒立摆:Simulink建模[通俗易懂]
    。按照页面顶部的定义将“增益”设置为“ 0.1”,并将输入连接到小车的关节传感器模块的速度输出,并将增益的输出连接到摩擦力的关节执行器。
  • 接下来,从Simulink / Ports&Subsystems库中添加两个Out1块和一个In1块。将Out1模块连接到其余的关节传感器模块输出,将In1模块连接到其余的关节执行器输入。
  • 最后,如下图所示连接并标记组件。您可以按照与翻转块类似的方式旋转块,即,右键单击块,然后从“
    旋转和翻转”
    菜单中选择“
    旋转块
    ” 。

倒立摆:Simulink建模[通俗易懂]

您还可以将该模型另存为单个子系统块,如上一节所述。您可以通过右键单击块并从结果菜单中选择“
背景颜色”
来更改子系统的
颜色
。您可以通过右键单击
此处
下载完整的模型文件,但请注意,您需要Simulink的Simscape附加组件才能运行该文件。我们在“
倒立摆:Simulink控制器设计”
页面中使用此模型 。

产生开环响应

现在,我们将模拟倒立摆系统对施加到推车上的冲击力的响应。该仿真需要脉冲输入。由于Simulink库中没有这样的模块,因此我们将使用Pulse Generator模块来近似单位脉冲输入。我们可以使用上面生成的任何一个模型,但是,在这种情况下,我们将使用Simscape模型,因为它可以使我们可视化倒立摆系统的运动。请按照以下步骤进行操作。
  • 打开上面生成的倒立摆simscape模型。
  • 从Simulink / Sources库中添加一个Pulse Generator模块。双击该块并更改参数,如下所示。特别是,将“
    期间:
    ”更改为“ 10”。由于我们将模拟运行10秒钟,因此可以确保仅生成一个“脉冲”。还要将
    幅度
    更改为“ 1000”,并将
    脉冲宽度(周期的百分比)
    更改为“ 0.01”。这些设置一起产生一个近似于单位脉冲的脉冲,因为输入的幅度在很短的时间内非常大,脉冲的面积等于1。

倒立摆:Simulink建模[通俗易懂]

  • 从Simulink / Sinks库中添加一个范围块。
  • 为了在示波器上显示两个输入,请右键单击“示波器”块,选择“
    信号和端口”,
    然后将“
    输入端口数
    ”更改为“ 2”。
如图所示,连接模块并标记连接到示波器模块的信号。

倒立摆:Simulink建模[通俗易懂]

将该系统另存为Pend_Openloop.slx,或右键单击
此处
并选择“
将链接另存为…”进行下载
在开始仿真之前,我们要启用倒立摆系统的可视化。从模型窗口顶部的菜单中,选择“
仿真”>“模型配置参数”
。然后从窗口左侧的目录中选择
Simscape Multibody 1G
。然后选中
仿真过程

显示动画
的框,如下图所示。

倒立摆:Simulink建模[通俗易懂]

现在,开始模拟(从“
模拟”
菜单中选择
“运行”
或输入
Ctrl-T
)。在仿真过程中,倒立摆的动画(如下图所示)将可视化系统产生的运动。

倒立摆:Simulink建模[通俗易懂]

然后打开范围。您将看到以下有关摆角和手推车位置的输出。

倒立摆:Simulink建模[通俗易懂]

请注意,钟摆反复摆动完整的旋转,其中角度以
倒立摆:Simulink建模[通俗易懂]
弧度翻转。此外,手推车的位置不受限制地增长,但在摆动的摆锤的影响下会摆动。这些结果与“
倒立摆:系统分析”
页面中显示的开环仿真结果相差很大。当然,这是由于该模拟采用了完全非线性的模型,而先前的分析却依赖于倒立摆模型的线性逼近。为了更直接地将仿真模型的结果与先前的结果进行比较,我们将从仿真模型中提取一个线性模型。

从仿真中提取线性模型

除了将我们的仿真模型与先前的结果进行比较之外,出于分析和设计的目的,可能还需要提取一个线性模型。通常应用于动态系统分析及其关联控制设计的许多分析技术只能应用于线性模型。因此,可能期望从非线性仿真模型中提取近似线性模型。我们将在Simulink中完成此操作。
  • 首先,打开上面生成的Simulink模型之一Pend_Model.slx或Pend_Model_Simscape.slx。
  • 如果使用变量生成了仿真模型,则必须在执行线性化之前在MATLAB工作区中定义物理常数。这可以通过在MATLAB命令窗口中输入以下命令来完成。
M = 0.5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;

  • 接下来,从模型窗口顶部的菜单中选择“
    分析”>“控制设计”>“线性分析”
    。这将导致
    线性分析工具
    窗口打开。
  • 为了执行我们的线性化,我们首先需要确定模型的输入和输出以及我们希望对其进行线性化的工作点。首先,右键单击代表Simulink / Simscape模型中“力”输入的信号。然后从结果菜单中选择“
    线性分析点”>“开环输入
    ”。同样,右键单击模型的两个输出信号(摆角和小车位置)中的每一个,然后在每种情况下从结果菜单中选择“
    线性分析点”>“开环输出
    ”。现在,应该在模型上通过箭头符号标识最终的输入和输出,如下图所示。

倒立摆:Simulink建模[通俗易懂]

  • 接下来,我们需要确定要线性化的工作点。从“
    工作点:”
    菜单中,选择“
    修剪模型”
    ,如下图所示。这将打开“
    修剪模型”
    窗口。在此窗口中,选择绿色三角形指示的
    开始修整
    按钮。这将创建操作点
    op_trim1
  • 由于我们希望检查该系统的脉冲响应,因此请返回“
    线性分析”
    选项卡并选择“
    脉冲”
    ,如下图所示。

倒立摆:Simulink建模[通俗易懂]

  • 最后,从“
    操作点:”
    拖放到菜单中选择
    op_trim1
    ,然后由绿色小三角形表示的“
    脉冲”
    按钮。这将自动生成脉冲响应图和线性化模型
    linsys1
  • 为了将结果与“
    倒立摆:系统分析”
    页面中生成的图进行比较,有必要更改-
    倒立摆:Simulink建模[通俗易懂]
    轴比例缩放。这可以通过在快捷菜单中选择“
    属性”
    来实现。然后出现的窗口应如下所示,其中上图是摆角的响应,下图是手推车位置的响应。

倒立摆:Simulink建模[通俗易懂]

这些图与“
倒立摆:系统分析”
页面中生成的图非常相似,但不完全相同。
我们还可以将生成的线性化模型导出到
MATLAB工作区中,以进行进一步的分析和设计。只需在
线性分析工作区中

linsys1
对象上单击
鼠标
右键以复制该对象,即可完成此操作。然后在
MATLAB工作区中
单击以对象为对象。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171016.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别[通俗易懂]

    什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别[通俗易懂]指纹识别作为一种生物识别方案,在手机上的应用为用户日常使用带来了极大的便利,从解锁手机到应用加密再到支付等场景,原本需要输密码的繁琐场景如今按一下手指就行。随着手机的发展,指纹解锁也出现了不同的解决方案,比如OPPOK3所采用的目前主流的屏下指纹解锁,以及荣耀9X所采用侧面指纹解锁。那么在实际应用场景中,哪种指纹识别更实用呢?采用了屏幕指纹的OPPOK3与侧面指纹的荣耀9X都有着真全面屏的设计…

  • 2020idea安装教程_3dmax2020安装失败

    2020idea安装教程_3dmax2020安装失败IDEA安装教程1、下载IDEA首先在官网下载IDEA,官网下载地址为:IDEA下载地址我这里选择的是Ultimate版本2、安装IDEA双击刚才下载好的IDEA安装包进行安装。我把安装路径改为了我在D盘选择的路径点击Next,然后点击Install进行安装安装过程安装成功3、IDEA配置启动IDEA此时需要激活,我之前申请的教育账号还可以用就直接使用的教育账…

  • 深入了解mysql它BDB系列(1)—BDB基础知识

    深入了解mysql它BDB系列(1)—BDB基础知识

    2021年12月30日
  • 从开发者角度玩Windows 11

    从开发者角度玩Windows 11今天Windows11正式发布,有新的界面,有新的WindowsStore,也有新的交互,相信不少小伙伴都已经安装了Windows11或从各大媒体了解到相关的信息。作为开发者,或者你和我一样更关注Windows11给开发者带来了什么新的体验和提升。一.安装Windows11依赖于TPM2.0,什么是TPM呢?TPM技术旨在提供基于硬件的与安全性相关的功能。TPM芯片是一个安全的加密处理器,有助于执行生成、存储和限制加密密钥的使用等操作。TPM芯片包含多重物理安…

  • win10下pytorch-gpu安装以及CUDA详细安装过程

    win10下pytorch-gpu安装以及CUDA详细安装过程win10下pytorch-gpu安装以及CUDA详细安装过程1.Cuda的下载安装及配置首先我们要确定本机是否有独立显卡。在计算机-管理-设备管理器-显示适配器中,查看是否有独立显卡。可以看到本机有一个集成显卡和独立显卡NVIDIAGetForceGTX1050。接下来,测试本机独立显…

  • 机房搬迁遇到的问题[通俗易懂]

    机房搬迁遇到的问题[通俗易懂]春节之前,公司接到了项目,机房搬迁,一般的机房搬迁也无所谓,但是这次是工商行政管理局的机房搬迁,从9楼搬到一楼,现把遇到的问题记录如下。总共有3套系统运行在机房,重要的是全省的工商系统,硬件是2台小型机IBM570和一套磁盘阵列存储数据,这套系统已经运行10年之久,之前一直没有关机过,所以我们很是谨慎处理这套系统,在搬迁之前已经重启过机器,因为按照以往的经验计算机长时间的运行,重启后就就有可

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号