主要内容gydF4y2Ba

模型和验证一个系统gydF4y2Ba

您对系统结构中的每个组件建模,以表示该组件的物理或功能行为。您可以通过使用测试数据模拟基本组件行为来验证它们。gydF4y2Ba

打开系统布局gydF4y2Ba

当建模单个组件时,整个系统布局的大图非常有用。首先加载布局模型。在MATLAB命令行,输入:gydF4y2Ba

open_system (gydF4y2Ba“system_layout.slx”gydF4y2Ba)gydF4y2Ba

模型组件gydF4y2Ba

一个金宝app仿真软件gydF4y2Ba®gydF4y2Ba组件的模型基于以下几个起点:gydF4y2Ba

  • 一个物理部件的输出和输入之间的显式数学关系-您可以通过代数计算和微分方程的积分直接或间接地从输入计算出该部件的输出。例如,计算一个水箱的水位给定流入率是一个显式的关系。每个Sim金宝appulink块基于从输入到输出的计算的定义执行。gydF4y2Ba

  • 一个物理部件的模型变量之间的隐式数学关系-因为变量是相互依赖的,分配一个输入和一个输出到该部件不是直接的。例如,在gydF4y2Ba+gydF4y2Ba电机的一端连接在电路上,电压在其上gydF4y2Ba-gydF4y2Ba结束有一种隐性的关系。要在Simulink中建模这样的关系,您可以使用Simscape金宝app™等物理建模工具,也可以将这些变量建模为允许输入/输出定义的更大组件的一部分。有时,更仔细地检查建模目标和组件定义有助于定义输入/输出关系。gydF4y2Ba

  • 从实际系统获得的数据——您已经测量了来自实际组件的输入/输出数据,但不存在完全定义的数学关系。许多设备都有符合此描述的未建模组件。例如,电视散发的热量。您可以使用System Identification Toolbox™来定义此类系统的输入/输出关系。gydF4y2Ba

  • 显式函数定义——通过代数和逻辑计算,从输入定义函数组件的输出。例如,恒温器的开关逻辑。您可以将大多数函数关系建模为Simulink块和子系统。金宝appgydF4y2Ba

本教程使用显式的输入/输出关系建模物理和功能组件。在本教程中,你将:gydF4y2Ba

  1. 利用系统方程建立Simulink模型。金宝appgydF4y2Ba

  2. 在Simulink编辑器中添加并金宝app连接Simulink块。块表示来自方程的系数和变量。gydF4y2Ba

  3. 分别为每个组件构建模型。构建系统模型最有效的方法是首先独立地考虑组件。gydF4y2Ba

  4. 首先使用系统的近似值建立简单的模型。确定可能影响模型准确性的假设。迭代地添加细节,直到复杂度满足建模和精度要求。gydF4y2Ba

为物理组件建模gydF4y2Ba

描述组件之间的关系,如数据、能量和力的传递。利用系统方程在Simulink中建立系统的图形化模型。金宝appgydF4y2Ba

在开始对组件建模之前需要问的一些问题:gydF4y2Ba

  • 每个分量的常数是什么?什么值不会改变,除非你改变它们?gydF4y2Ba

  • 每个组件的变量是什么?什么价值观会随着时间而改变?gydF4y2Ba

  • 一个分量有多少个状态变量?gydF4y2Ba

利用科学原理推导出每个部件的方程式。许多系统方程可分为三类:gydF4y2Ba

  • 对于连续系统,微分方程用定义所有时间值的方程来描述变量的变化率。例如,一个一阶微分方程给出了汽车的速度:gydF4y2Ba

    dgydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba dgydF4y2Ba tgydF4y2Ba =gydF4y2Ba −gydF4y2Ba bgydF4y2Ba 米gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ugydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba

  • 对于离散系统,差分方程描述变量的变化率,但方程只在特定时刻定义。例如,来自离散比例-导数控制器的控制信号:gydF4y2Ba

    pgydF4y2Ba dgydF4y2Ba [gydF4y2Ba ngydF4y2Ba ]gydF4y2Ba =gydF4y2Ba (gydF4y2Ba egydF4y2Ba [gydF4y2Ba ngydF4y2Ba ]gydF4y2Ba −gydF4y2Ba egydF4y2Ba [gydF4y2Ba ngydF4y2Ba −gydF4y2Ba 1gydF4y2Ba ]gydF4y2Ba )gydF4y2Ba KgydF4y2Ba dgydF4y2Ba +gydF4y2Ba egydF4y2Ba [gydF4y2Ba ngydF4y2Ba ]gydF4y2Ba KgydF4y2Ba pgydF4y2Ba

  • 没有导数的方程是代数方程。例如,一个代数方程给出了一个由两个元件组成的并联电路的总电流:gydF4y2Ba

    我gydF4y2Ba tgydF4y2Ba =gydF4y2Ba 我gydF4y2Ba 一个gydF4y2Ba +gydF4y2Ba 我gydF4y2Ba bgydF4y2Ba

车轮和直线运动。gydF4y2Ba有两种力作用在轮子上:gydF4y2Ba

  • 电机施加的力-力gydF4y2BaFgydF4y2Ba在速度变化的方向起作用,是车轮子系统的输入。gydF4y2Ba

  • 阻力-力gydF4y2BaFgydF4y2Ba拖gydF4y2Ba与速度变化方向相反,是速度的函数。gydF4y2Ba

    FgydF4y2Ba dgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba ggydF4y2Ba =gydF4y2Ba kgydF4y2Ba dgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba ggydF4y2Ba VgydF4y2Ba |gydF4y2Ba VgydF4y2Ba |gydF4y2Ba

加速度正比于这些力的总和:gydF4y2Ba

(gydF4y2Ba 米gydF4y2Ba /gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba VgydF4y2Ba ̇gydF4y2Ba =gydF4y2Ba FgydF4y2Ba −gydF4y2Ba FgydF4y2Ba dgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba ggydF4y2Ba (gydF4y2Ba 米gydF4y2Ba /gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba VgydF4y2Ba ̇gydF4y2Ba =gydF4y2Ba FgydF4y2Ba −gydF4y2Ba kgydF4y2Ba dgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba ggydF4y2Ba VgydF4y2Ba |gydF4y2Ba VgydF4y2Ba |gydF4y2Ba VgydF4y2Ba ̇gydF4y2Ba =gydF4y2Ba FgydF4y2Ba −gydF4y2Ba kgydF4y2Ba dgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba ggydF4y2Ba VgydF4y2Ba |gydF4y2Ba VgydF4y2Ba |gydF4y2Ba (gydF4y2Ba 米gydF4y2Ba /gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba

在哪里gydF4y2BakgydF4y2Ba拖gydF4y2Ba阻力系数和gydF4y2Ba米gydF4y2Ba是机器人的质量。每个轮子承载一半的重量。gydF4y2Ba

建立车轮模型:gydF4y2Ba

  1. 在gydF4y2Basystem_layoutgydF4y2Ba模型中,双击gydF4y2Ba右轮gydF4y2Ba子系统显示空子系统。gydF4y2Ba

  2. 模拟速度和加速度。添加一个gydF4y2Ba积分器gydF4y2Ba块。将初始条件设置为gydF4y2Ba0gydF4y2Ba.这个物体的输入是加速度gydF4y2BaVdotgydF4y2Ba输出是速度gydF4y2BaVgydF4y2Ba.gydF4y2Ba

  3. 模拟阻力。添加一个gydF4y2BaMATLAB函数gydF4y2Ba块。的gydF4y2BaMATLAB函数gydF4y2Ba块提供了一种在模型中实现数学表达式的快速方法。要编辑函数,双击模块打开MATLAB函数编辑器。gydF4y2Ba

  4. 为MATLAB函数块定义参数。在gydF4y2BaMATLAB函数gydF4y2Ba块编辑器,单击gydF4y2Ba编辑数据gydF4y2Ba按钮。点击gydF4y2Bak_draggydF4y2Ba,设置gydF4y2Ba范围gydF4y2Ba来gydF4y2Ba参数gydF4y2Ba,然后单击gydF4y2Ba应用gydF4y2Ba.gydF4y2Ba

  5. 用。减去电机的阻力gydF4y2Ba减去gydF4y2Ba块。用a完成力-加速度方程gydF4y2Ba获得gydF4y2Ba块与参数gydF4y2Ba1 / (m / 2)gydF4y2Ba.gydF4y2Ba

  6. 向相反的方向gydF4y2BaMATLAB函数gydF4y2Ba块,右键单击块并选择gydF4y2Ba旋转和翻转>翻转块gydF4y2Ba.连接块。gydF4y2Ba

  7. 两个轮子的动力学是一样的。复制刚刚建模的右轮子系统,并将其粘贴到左轮子系统中。gydF4y2Ba

  8. 查看模型的顶层。单击gydF4y2Ba导航到父母gydF4y2Ba按钮gydF4y2Ba.gydF4y2Ba

旋转运动。gydF4y2Ba当两个轮子向相反的方向转动时,它们就在一个半径的圆周上运动gydF4y2BargydF4y2Ba,使机器人作旋转运动。当轮子朝同一个方向转动时,就没有转动。假设车轮速度总是相等的大小,它是实用的模型旋转运动依赖于两个车轮速度的差异gydF4y2BaVgydF4y2BaRgydF4y2Ba和gydF4y2BaVgydF4y2BalgydF4y2Ba:gydF4y2Ba

θgydF4y2Ba ̇gydF4y2Ba =gydF4y2Ba VgydF4y2Ba RgydF4y2Ba −gydF4y2Ba VgydF4y2Ba lgydF4y2Ba 2gydF4y2Ba rgydF4y2Ba

建立旋转动力学模型:gydF4y2Ba

  1. 在顶层gydF4y2Basystem_layoutgydF4y2Ba模型中,双击Rotation子系统显示空的子系统。删除连接gydF4y2Ba轮廓尺寸gydF4y2Ba和gydF4y2Ba外港gydF4y2Ba块。gydF4y2Ba

  2. 模型角速度和角度。添加一个gydF4y2Ba积分器gydF4y2Ba块。将初始条件设置为gydF4y2Ba0gydF4y2Ba.这个块的输出就是角度gydF4y2BaθgydF4y2Ba输入是角速度gydF4y2Batheta_dotgydF4y2Ba.gydF4y2Ba

  3. 从切向速度计算角速度。添加一个gydF4y2Ba获得gydF4y2Ba与参数gydF4y2Ba1 / (2 * r)gydF4y2Ba.gydF4y2Ba

  4. 连接块。gydF4y2Ba

  5. 查看模型的顶层。单击gydF4y2Ba导航到父母gydF4y2Ba按钮gydF4y2Ba.gydF4y2Ba

为功能组件建模gydF4y2Ba

从函数的输入到输出描述函数。此描述可以包括代数方程和逻辑结构,您可以使用它们在Simulink中构建系统的图形化模型。金宝appgydF4y2Ba

坐标变换。gydF4y2Ba机器人在X和Y坐标系下的速度,gydF4y2BaVgydF4y2BaXgydF4y2Ba和gydF4y2BaVgydF4y2BaYgydF4y2Ba,与线速度有关gydF4y2BaVgydF4y2BaNgydF4y2Ba和角gydF4y2BaθgydF4y2Ba:gydF4y2Ba

VgydF4y2Ba XgydF4y2Ba =gydF4y2Ba VgydF4y2Ba NgydF4y2Ba 因为gydF4y2Ba (gydF4y2Ba θgydF4y2Ba )gydF4y2Ba VgydF4y2Ba YgydF4y2Ba =gydF4y2Ba VgydF4y2Ba NgydF4y2Ba 罪gydF4y2Ba (gydF4y2Ba θgydF4y2Ba )gydF4y2Ba

建立坐标转换模型:gydF4y2Ba

  1. 在顶层gydF4y2Basystem_layoutgydF4y2Ba模型,双击坐标转换子系统以显示空的子系统。gydF4y2Ba

  2. 三角函数模型。添加一个gydF4y2Ba要求gydF4y2Ba块从Math Operations库。gydF4y2Ba

  3. 乘法模型。添加两个gydF4y2Ba产品gydF4y2BaMath Operations库中的块。gydF4y2Ba

  4. 连接块。gydF4y2Ba

  5. 查看模型的顶层。单击gydF4y2Ba导航到父母gydF4y2Ba按钮gydF4y2Ba.gydF4y2Ba

设置模型参数gydF4y2Ba

模型参数值的来源可以是:gydF4y2Ba

  • 书面规范,如标准性能表或制造商数据表gydF4y2Ba

  • 对现有系统的直接测量gydF4y2Ba

  • 使用系统输入/输出的估计gydF4y2Ba

该模型使用以下参数:gydF4y2Ba

参数gydF4y2Ba 象征gydF4y2Ba 价值gydF4y2Ba
质量gydF4y2Ba 米gydF4y2Ba 2.5公斤gydF4y2Ba
滚动阻力gydF4y2Ba k_draggydF4y2Ba 30 NsgydF4y2Ba2gydF4y2Ba/ mgydF4y2Ba
机器人半径gydF4y2Ba rgydF4y2Ba 0.15米gydF4y2Ba

金宝appSimulink使用的是MATLABgydF4y2Ba®gydF4y2Ba评估参数的工作空间。在MATLAB命令窗口中设置以下参数:gydF4y2Ba

m = 2.5;k_drag = 30;r = 0.15;gydF4y2Ba

使用仿真验证组件gydF4y2Ba

通过提供输入和观察输出来验证组件。即使是这样一个简单的验证也可以立即指出改进模型的方法。这个例子验证了这些行为:gydF4y2Ba

  • 当一个力连续地作用在车轮上时,速度增加,直到达到一个稳定的速度。gydF4y2Ba

  • 当车轮向相反的方向转动时,旋转角度以恒定的速率增加。gydF4y2Ba

验证车轮组件gydF4y2Ba

为轮子组件创建并运行一个测试模型:gydF4y2Ba

  1. 创建一个新模型。在gydF4y2Ba模拟gydF4y2Ba选项卡上,单击gydF4y2Ba新gydF4y2Ba.复制右车轮块到新模型。gydF4y2Ba

  2. 创建一个测试输入。添加一个gydF4y2Ba一步gydF4y2Ba块,并将其连接到右轮块的输入。请将步长参数设置为gydF4y2Ba1gydF4y2Ba.gydF4y2Ba

  3. 向输出添加一个查看器。右键单击Right Wheel块的输出端口并选择gydF4y2Ba创建和连接查看器> Simulink >范围金宝appgydF4y2Ba.gydF4y2Ba

  4. 运行仿真。在gydF4y2Ba模拟gydF4y2Ba选项卡上,单击gydF4y2Ba运行gydF4y2Ba.gydF4y2Ba

仿真结果显示了一般的预期行为。在阶跃时间施加力之前,没有任何运动。当施加力时,速度开始增加,然后当施加的力和阻力达到平衡时,速度稳定在一个常数。除了验证,这个模拟也提供了信息的最大速度的车轮给定的力量。gydF4y2Ba

验证旋转组件gydF4y2Ba

为旋转模型创建并运行一个测试模型:gydF4y2Ba

  1. 创建一个新模型。点击gydF4y2Ba并将Rotation块复制到新模型中。gydF4y2Ba

  2. 在新模型中创建一个测试输入。添加一个gydF4y2Ba一步gydF4y2Ba块。请将步长参数设置为gydF4y2Ba1gydF4y2Ba.将其连接到旋转块的输入端。这个输入表示轮子在相反方向旋转时轮子速度的差值。gydF4y2Ba

  3. 向输出添加一个查看器。右键单击Rotation块的输出端口并选择gydF4y2Ba创建和连接查看器> Simulink >范围金宝appgydF4y2Ba.gydF4y2Ba

  4. 运行仿真。在gydF4y2Ba模拟gydF4y2Ba选项卡上,单击gydF4y2Ba运行gydF4y2Ba.gydF4y2Ba

仿真结果表明,当车轮以相同的速度向相反的方向转动时,角度稳定增加。你可以做一些模型改进,使其更容易解释角度输出,例如:gydF4y2Ba

  • 您可以将输出的弧度转换为角度。添加一个gydF4y2Ba获得gydF4y2Ba以增益为的阻塞gydF4y2Ba180 /πgydF4y2Ba.gydF4y2Ba

  • 你可以显示360度循环输出的角度。添加一个gydF4y2Ba数学函数gydF4y2Ba块的功能gydF4y2Ba国防部gydF4y2Ba.gydF4y2Ba

MATLAB三角函数以弧度作为输入。gydF4y2Ba

验证模型gydF4y2Ba

在验证单个组件之后,您可以对完整的模型执行类似的验证。这个例子验证了以下行为:gydF4y2Ba

  • 当相同的力作用在相同方向的两个轮子上时,机器人在一条直线上运动。gydF4y2Ba

  • 当相同的力以相反的方向作用于两个轮子时,机器人就原地旋转。gydF4y2Ba

  1. 在gydF4y2Basystem_layoutgydF4y2Ba模型,双击input子系统以显示空的子系统。gydF4y2Ba

  2. 通过添加gydF4y2Ba一步gydF4y2Ba块。请将步长参数设置为gydF4y2Ba1gydF4y2Ba.把它连接到两者gydF4y2Ba外港gydF4y2Ba块。gydF4y2Ba

  3. 在模型的顶层,将两个输出信号连接到同一个范围查看器:gydF4y2Ba

  4. 运行模型。gydF4y2Ba

    在这个图中,黄色的线是X方向,蓝色的线是Y方向。因为角度是0,没有变化,车辆只在X方向上运动,正如预期的那样。gydF4y2Ba

  5. 双击输入子系统并添加gydF4y2Ba获得gydF4y2Ba与参数gydF4y2Ba-1gydF4y2Ba在源和第二个输出之间。这就改变了左轮的方向。gydF4y2Ba

  6. 给角度输出添加一个作用域。gydF4y2Ba

  7. 运行模型。gydF4y2Ba

    第一个视图显示X-Y平面没有运动。第二种观点显示有稳定的旋转。gydF4y2Ba

通过更改输入,您可以使用最终的模型来回答关于模型的许多问题。一些例子:gydF4y2Ba

  • 当初始角不为0时会怎样?gydF4y2Ba

  • 当力降到0时,运动停止需要多长时间?gydF4y2Ba

  • 当机器人变重时会发生什么?gydF4y2Ba

  • 当机器人在一个更光滑的表面上运动,也就是阻力系数更小的时候,会发生什么?gydF4y2Ba

相关的话题gydF4y2Ba