倒立摆:Simulink建模
倒立摆:Simulink建模
内容
物理设置和系统方程式
用Simulink建立非线性模型
- 首先在MATLAB命令窗口中键入simulink以打开Simulink环境。然后,通过在打开的Simulink起始页窗口中选择“新建”>“ Simulink”>“空白模型”,或按Ctrl-N,在Simulink中打开一个新模型窗口。
- 更改每个Fcn块的标签以匹配其关联功能。
- 双击每个Integrator块以添加相关状态变量的State Name :。有关示例,请参见下图。还要将“初始条件”更改为: “钟摆角度”为“ pi”,以表示钟摆开始笔直指向上方。
- 从Simulink / Signal Routing库中插入四个多路复用器(Mux)块,每个Fcn块一个。
- 分别从Simulink / Sinks和Simulink / Sources库中插入两个Out1块和一个In1块。然后双击块的标签以更改其名称。两个输出用于手推车的“位置”和摆的“角度”,而一个输入用于应用于手推车的“力”。
- 将Mux块的每个输出连接到相应Fcn块的输入。
- 按照上一步中指定的顺序将这三个输入连接到此Mux块。
- 双击第一个Fcn块,然后输入xddot的方程式,如下所示。
- 将上面的方程式输入到Fcn块中,更改Mux块的输入数量,然后以正确的顺序将正确的信号连接到Mux块。
- 对下面重复的方程式(13)和(14)重复此过程。
用Simscape建立非线性模型
- 从Simscape / Multibody / First Generation(1G)/ Bodies库中插入一个Body块来表示购物车。遵循本页顶部给出的系统参数,双击块,然后将质量:设置为“ 0.5”,单位为kg。默认情况下,Body块包括两个端口。由于我们需要端口来定义摆锤与手推车的连接位置以及施加外力和摩擦力的位置,因此必须添加第三个端口。这可以通过“位置”选项卡右侧的按钮完成。由于手推车只能沿一个维度移动,因此两个力必须沿该维度并置(-方向)。由于我们实质上是将购物车建模为只能平移的点质量,因此您不必更改任何其他默认参数。但是,我们计划使用Simscape对系统的运动进行动画处理,因此将创建额外的端口以相对于其重心(CG)定义购物车的四个角(仅二维)。下图显示了推车主体的可能定义。
- 插入第二个Body块来代表摆锤。双击该块,然后将质量:设置为“ 0.2”,单位为kg。由于摆只能绕-轴旋转,因此唯一需要定义与该主方向相关的惯性。为简单起见,定义惯量:等于“ 0.006 * eye(3)”,单位为kg * m ^ 2。由于我们将摆锤建模为具有大小和质量的刚体,因此该本体可以旋转,因此正确定义摆锤在推车上的附着位置及其CG非常重要。具体来说,定义连接点 CS1位置为[[0 0 0]”,并且原点相邻并且将CG定义为与附件CS1(如上定义)相距0.3米。还定义摆的四个角。确保显示定义连接点的端口。在“可视化”选项卡下,您还可以更改摆锤的颜色以使其从购物车中脱颖而出。
- 接下来,从Simscape / Multibody / First Generation(1G)/ Jjoints库中添加一个Revolute块,以定义将摆锤连接到购物车的关节。默认情况下,关节将被定义为围绕-轴旋转,该轴与我们正在建模的情况相匹配。将与推车相对应的车身模块连接到关节的基础端口(B),将与摆锤相对应的车身模块连接到关节的从动端口(F)。双击“ Revolute”块,并将“传感器/执行器端口数: ”设置为“ 2”。
- 然后从Simscape / Multibody / First Generation(1G)/ Sensors&Actuators库中添加一个Joint Initial Condition块和一个Joint Sensor块,并将这些块连接到Revolute块。双击“联合初始条件”块,然后选中“启用”框。我们可以将默认值用于关节的初始位置和速度。采用0度的初始位置对应于根据上面的摆体的定义垂直向上指向的摆。这与的原始定义不一致,但是它将使响应结果与本示例其他页面中从线性化模型生成的结果一致。接下来,双击“关节传感器”块,然后将“角度”测量的单位更改为rad。角位置是此关节所需的唯一测量,其他框可能保持未选中状态。
- 从Simscape / Multibody / First Generation(1G)/ Joints库中添加两个Prismatic块,以定义手推车的平移自由度以及对手推车的作用力。由于手推车在技术上是点质量,因此我们只需要一个棱柱块,但是通过使用两个棱柱块,我们可以在不同的位置施加力。双击每个棱镜块,然后将“动作轴”更改为“ [1 0 0]”,以反映两个力沿-方向作用的事实。然后,将每个模块的从动端口(F)连接到代表手推车的车身模块上施加力(CS1)和摩擦力(CS2)的端口。
- 接下来,从Simscape / Multibody / First Generation(1G)/ Bodies库中添加两个Ground块,以定义推车运动的基础。具体来说,将每个接地块的输出连接到每个棱柱形块的基本端口(B)。
- 对于您刚刚创建的接地块之一,双击该块并选中“ Show Machine Environment”端口框。然后从Simscape / Multibody / First Generation(1G)/ Bodies库中添加一个Machine Environment模块,并将其连接到您刚刚为其添加端口的Ground模块。机器环境模块允许我们在仿真中定义重力。在这种情况下,m / s ^ 2单位的默认方向(负方向)和大小(“ 9.81”)是正确的。该块还允许我们定义可视化和数值求解器的参数。对于此示例,默认参数是合适的。
- 接下来,从Simscape / Multibody / First Generation(1G)/ Sensors&actuators库中添加两个关节执行器模块和一个关节传感器模块。关节致动器模块将用于生成外部作用力和摩擦力,而关节传感器模块将感测小车的运动。注意,还有一个平移摩擦块可用,但是由于我们仅采用简单的粘性模型,因此我们将自己计算摩擦力。双击“棱柱”块之一,并将“传感器/执行器端口数: ”设置为“ 1”(对于力执行器)。对于其他棱柱形块,设置传感器/执行器端口数:到“ 2”(一个用于力致动器,另一个用于手推车传感器)。然后按所述连接关节执行器和关节传感器模块。对于这种情况,关节执行器模块的默认值已足够,但是由于计算摩擦力需要速度,因此我们必须将关节传感器模块更改为输出位置和速度。双击“关节传感器”模块,然后选中“速度”框,同时选中“位置”框。无需更改默认指标单位。同时取消选中“将所选参数作为一个信号输出”复选框。
- 从Simulink / Math Operations库中添加一个增益块,以表示粘性摩擦系数。按照页面顶部的定义将“增益”设置为“ 0.1”,并将输入连接到小车的关节传感器模块的速度输出,并将增益的输出连接到摩擦力的关节执行器。
- 接下来,从Simulink / Ports&Subsystems库中添加两个Out1块和一个In1块。将Out1模块连接到其余的关节传感器模块输出,将In1模块连接到其余的关节执行器输入。
- 最后,如下图所示连接并标记组件。您可以按照与翻转块类似的方式旋转块,即,右键单击块,然后从“旋转和翻转”菜单中选择“旋转块” 。
产生开环响应
- 打开上面生成的倒立摆simscape模型。
- 从Simulink / Sources库中添加一个Pulse Generator模块。双击该块并更改参数,如下所示。特别是,将“期间: ”更改为“ 10”。由于我们将模拟运行10秒钟,因此可以确保仅生成一个“脉冲”。还要将幅度更改为“ 1000”,并将脉冲宽度(周期的百分比)更改为“ 0.01”。这些设置一起产生一个近似于单位脉冲的脉冲,因为输入的幅度在很短的时间内非常大,脉冲的面积等于1。
- 从Simulink / Sinks库中添加一个范围块。
- 为了在示波器上显示两个输入,请右键单击“示波器”块,选择“信号和端口”,然后将“输入端口数”更改为“ 2”。
从仿真中提取线性模型
- 首先,打开上面生成的Simulink模型之一Pend_Model.slx或Pend_Model_Simscape.slx。
- 如果使用变量生成了仿真模型,则必须在执行线性化之前在MATLAB工作区中定义物理常数。这可以通过在MATLAB命令窗口中输入以下命令来完成。
- 接下来,从模型窗口顶部的菜单中选择“分析”>“控制设计”>“线性分析”。这将导致线性分析工具窗口打开。
- 为了执行我们的线性化,我们首先需要确定模型的输入和输出以及我们希望对其进行线性化的工作点。首先,右键单击代表Simulink / Simscape模型中“力”输入的信号。然后从结果菜单中选择“线性分析点”>“开环输入”。同样,右键单击模型的两个输出信号(摆角和小车位置)中的每一个,然后在每种情况下从结果菜单中选择“线性分析点”>“开环输出”。现在,应该在模型上通过箭头符号标识最终的输入和输出,如下图所示。
- 接下来,我们需要确定要线性化的工作点。从“工作点:”菜单中,选择“修剪模型”,如下图所示。这将打开“修剪模型”窗口。在此窗口中,选择绿色三角形指示的开始修整按钮。这将创建操作点op_trim1。
- 由于我们希望检查该系统的脉冲响应,因此请返回“线性分析”选项卡并选择“脉冲”,如下图所示。
- 最后,从“操作点:”拖放到菜单中选择op_trim1,然后由绿色小三角形表示的“脉冲”按钮。这将自动生成脉冲响应图和线性化模型 linsys1。
- 为了将结果与“倒立摆:系统分析”页面中生成的图进行比较,有必要更改-轴比例缩放。这可以通过在快捷菜单中选择“属性”来实现。然后出现的窗口应如下所示,其中上图是摆角的响应,下图是手推车位置的响应。
倒立摆:Simulink建模相关推荐
- 二阶倒立摆matlab建模与仿真,二级倒立摆的建模与MATLAB仿真.pdf
二级倒立摆的建模与MATLAB仿真 MATLAB 二级倒立摆的建模与 仿真 刘文斌,等 二级倒立摆的建模与MATLAB仿真 刘文斌,千树川 3000) (四川理工学院电子与信息工程系 四川自贡,64 ...
- 直线一级倒立摆数学建模与控制仿真
学习目标: 1.推导直线型一级倒立摆的数学建模公式,得到状态空间表达式和传递函数,并分析系统的稳定性 2.采用控制算法将系统从不稳定调整到稳定状态,并用matlab和simulink仿真实现 学习内容 ...
- 单级倒立摆从建模到仿真
把很久以前的草稿整理一下搬到博客上 1.动力学模型 如图1所示,单级倒立摆由系统由水平导轨,平移支座和摆杆构成.平移支座与摆杆无阻尼铰接(摆杆可自由摆动).平移支座可以在导轨上受控平移.摆杆的质量是, ...
- 直线二阶倒立摆之数学建模
前言 本文是关于二阶倒立摆模型如何在平衡点处得到其的线性化模型的说明,介绍的比较详细,但是大部分内容参考于前人所写的论文,这些参考文献,我将列在本文的最后,但是我所建立的模型不同于论文中的模型,基本上 ...
- 倒立摆的simulink模型搭建
倒立摆的simulink模型搭建 1.倒立摆基本背景: 倒立摆,Inverted Pendulum ,是典型的多变量.高阶次 ,非线性.强耦合.自然不稳定系统.倒立摆系统的稳定控制是控制理论中的典型问 ...
- [LQR简要快速入门]+[一级倒立摆的LQR控制]
[LQR简要快速入门]+[一级倒立摆的LQR控制] 1. 什么是LQR 2. 公式含义 3. 倒立摆的建模 3.1 线性化 3.2 状态空间建立 4. LQR算法实现 5. MATLAB代码仿真 6. ...
- 使用python代替matlab仿真线性控制系统(倒立摆)
matlab可以仿真很多控制系统,其实python也有这种中功能.不仅是基础的自动控制原理所涉及的定理如伯德图,奈奎斯特曲线,pid之类的能够仿真,较为复杂的线性系统理论上面的一些原理也可以仿真. 这 ...
- 【基于Simulink+UG NX MCD 一级倒立摆控制系统仿真】建模和分析(一)
前言 倒立摆是比较典型的系统,可以看出火箭发射的简化模型,国内外学者常常通过在倒立摆上开发和测试控制算法. 对倒立摆的控制分为两大任务: 起摆 稳摆 所以本文想通过此项目对自动控制原理进行一个复习与学 ...
- MATLAB强化学习实战(七) 在Simulink中训练DDPG控制倒立摆系统
在Simulink中训练DDPG控制倒立摆系统 倒立摆的Simscape模型 创建环境接口 创建DDPG智能体 训练智能体 DDPG智能体仿真 此示例显示了如何训练深度确定性策略梯度(DDPG)智能体 ...
- 线性系统大作业——2.二阶倒立摆建模与控制系统设计(上)
文章目录 0.简介 1.建立数学模型 1.1.牛顿运动定律分析 欧拉-拉格朗日方程分析 2.Simulink仿真 3.使用SimMechancis仿真 4.在平衡点附近模型线性化 5.系统能控性.能观 ...
最新文章
- C# 线程无法开启窗口的原因
- input添加float样式后位置偏移的解决
- DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
- oracle质数怎么算,借花献佛之使用Oracle sql求质数(笔记)
- 转载:vs配置opencv教程
- [BZOJ 1076][SCOI2008]奖励关(期望+状压Dp)
- C++标准库 第七章 STL迭代器
- android开发板功能,Android中NFC模块PN532开发板应用/原理图/PCB等全部资料
- Java集合框架源码解读(1)——ArrayList、LinkedList和Vector
- 魔窗使用笔记(穿透微信)
- c语言密文加密解密问题注释,c语言通过openssl aes对称加解密和base64编解码将密码存储成密文...
- 【大数据】Hadoop 体系(五)
- 陈睿提供2009-06-19
- mysql 5.7 lbs_使用mysql来实现lbs(地理位置服务)功能
- 计算机课听课评议,一堂信息技术公开课点评
- vscode使用方法
- 从数学角度理解欧拉旋转中的万向节死锁
- 蚂蚁金服收购Kakao,完善移动金融布局
- python中seed的相关代码
- 浅析医院信息集成平台现状