目录

打开系统布局

对组件进行建模

对物理组件进行建模

轮子和线性运动

构建轮子模型

旋转运动

构建 Rotation Dynamics 模型

对功能组件进行建模

坐标变换

构建坐标变换模型

设置模型参数

通过仿真来验证组件

验证轮子组件

验证旋转组件

验证模型


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

打开系统布局

对各个组件进行建模时,需要从大局上把握整个系统布局。首先加载布局模型。在 MATLAB 命令行中,输入:

open_system('xxx.slx')

如图所示:

对组件进行建模

包含一个组件的 Simulink® 模型基于以下几点:

  • 物理组件的输出和输入之间的显式数学关系 --- 可以根据组件的输入通过代数计算和微分方程积分,直接或间接计算出组件的输出。例如,按照给定的进水速率计算水箱中的水位就是一种显式关系。每个 Simulink 模块基于从输入到输出的计算定义来执行。

  • 物理组件的模型变量之间的隐式数学关系 --- 由于变量之间相互依赖,因此为组件指定输入和输出并不容易。例如,电路中连接的电机的 + 极电压和 - 极电压之间就存在一种隐式关系。要在 Simulink 中对这种关系进行建模,可以使用 Simscape™ 等物理建模工具,也可以将这些变量建模为允许定义输入/输出的更大组件的一部分。有时候,更仔细地审视建模目的和组件定义有助于定义输入/输出关系。

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

  • 显式功能定义 --- 可以根据功能组件的输入通过代数计算和逻辑计算来定义功能组件的输出。例如,调温器的开关逻辑。可以将大多数功能关系建模为 Simulink 模块和子系统。

该教程对具有显式输入/输出关系的物理组件和功能组件进行建模。在本教程中将:

(1)使用系统方程创建一个 Simulink 模型。

(2)在 Simulink Editor 中添加并连接 Simulink 模块。模块代表方程中的系数和变量。

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

(4)首先,使用接近于系统的模型构建简单的模型。找出可能会影响模型准确性的假设条件。以迭代方式添加细节,直到复杂度满足建模和准确性要求。

对物理组件进行建模

描述组件之间的关系,例如数据、能量和力的传递。在 Simulink 中使用系统方程构建系统的图形化模型。在组件建模之前,需要思考以下问题:

  • 每个组件的常量是什么?什么值不会更改,除非您更改它们?

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

  • 一个组件有多少个状态变量?

根据科学原理推导出每个组件的方程。许多系统方程不外乎以下三种类别:

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

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

  • 没有导数的方程是代数方程。例如,用代数方程表示包含两个组件的并联电路中的总电流:

轮子和线性运动

作用在轮子上的力有两个:

  • 电机施加的力 - 此力 F 作用在速度变化的方向上,是轮子子系统的输入。

  • 阻力 - 此力 Fdrag 作用在速度变化的相反方向上,是速度的函数。

加速度与这两个力之和成正比:

其中 kdrag 是阻力系数,m 是机器人的质量。每个轮子承载机器人一半的质量。

构建轮子模型

(1)在system_layout模型中,双击Right Wheel子系统以显示空子系统。

(2)对速度和加速度进行建模。添加一个Integrator模块。将初始条件设置保留为0。此模块的输入是加速度Vdot,输出是速度V。如图所示:

(3)对阻力进行建模。从 User-Defined Functions 库中添加一个 MATLAB Function 模块。MATLAB Function 模块提供一种在模型中实现数学表达式的快速方法。要编辑函数,请双击该模块以打开 MATLAB Function 编辑器。

(4)定义 MATLAB Function 模块的参数。在 MATLAB Function 模块编辑器中,点击 Edit Data  按钮。点击 k_drag,将 Scope 设置为 Parameter 并点击 Apply

如图所示:      

(5)用 Subtract 模块从电机的作用力中减去阻力。使用带有参数 1/(m/2) 的 Gain 模块完成力-加速度方程。

(6)要反转 MATLAB Function 模块的方向,请右键点击该模块并选择 Rotate & Flip > Flip Block,连接这些模块。

如图所示:

(7)这两个轮子的动态特性相同。复制刚刚建模的 Right Wheel 子系统,并将其粘贴到 Left Wheel 子系统中。

(8)查看模型的顶层。点击 Navigate Up To Parent 按钮 

旋转运动

当两个轮子沿相反方向转动时,它们沿半径为 r 的圆周运动,从而产生机器人的旋转运动。当这些轮子向相同方向转动时,没有旋转。假设轮子的速度大小始终相等,则可将旋转运动视为两个轮子速度 VR 与 VL 之差的因变量来对其进行建模:

构建 Rotation Dynamics 模型

(1)在 system_layout 模型的顶层,双击 Rotation 子系统以显示空子系统。删除 Inport 和 Outport 模块之间的连接。

(2)对角速度和角度进行建模。添加一个 Integrator 模块。将初始条件设置保留为 0。此模块的输出是角度 theta,输入是角速度 theta_dot。

(3)根据切向速度计算角速度。添加带有参数 1/(2*r) 的 Gain 模块。

(4)连接这些模块。

如图所示:      

(5)查看模型的顶层。点击 Navigate Up To Parent 按钮 

对功能组件进行建模

通过一个函数从输入到输出的整个过程来描述功能。此描述可以包含代数方程和逻辑构造,可以使用它们在 Simulink 中构建系统的图形化模型。

坐标变换

机器人在 X 坐标和 Y 坐标上的速度 VX 和 VY 与线性速度 VN 和角度 theta 相关,表达式为:

构建坐标变换模型

(1)在 system_layout 模型的顶层,双击 Coordinate Transform 子系统以显示空子系统。

(2)对三角函数进行建模。从 Math Operations 库中添加一个 SinCos 模块。

(3)对乘法进行建模。从 Math Operations 库中添加两个 Product 模块。

(4)连接这些模块。

如图所示:

(5)查看模型的顶层。点击 Navigate Up To Parent 按钮 

设置模型参数

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

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

  • 直接测量现有系统所得的测量值

  • 基于系统输入/输出的估计值

此模型使用以下参数:

参数 符号
质量 m 2.5 kg
滚阻 k_drag 30Ns2/m
机器人半径 r 0.15 m

Simulink 使用 MATLAB® 工作区来计算参数。可在 MATLAB 命令行窗口中设置这些参数:

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

通过仿真来验证组件

通过提供输入并观察输出来验证组件。即使这样简单的验证也能指出改进模型的直接方法。此示例验证以下行为:

  • 当向轮子连续施加力时,速度会增加,直到达到稳定状态的速度为止。

  • 当两个轮子向相反方向转动时,旋转角度以恒定速率增加。

验证轮子组件

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

(1)创建一个新模型。在 Simulation 选项卡中,点击 New 。将 Right Wheel 模块复制到新模型中。

(2)创建一个测试输入。从 Sources 库中添加一个 Step 模块,并将其连接到 Right Wheel 模块的输入端口。将步长时间参数设置保留为 1

(3)在输出端口添加一个查看器。右键点击 Right Wheel 模块的输出端口,然后选择 Create & Connect Viewer > Simulink > Scope

如图所示:

(4)运行仿真。在 Simulation 选项卡中,点击 Run 

如图所示:                         

仿真结果表现出大致的预期行为。在步长时间处施加力之前,没有运动。施加力后,速度开始增加,当施加的力和阻力达到平衡后,速度将保持稳定。除验证外,此仿真还提供了在给定的作用力下轮子的最大速度信息。

验证旋转组件

为旋转组件创建并运行测试模型:

(1)创建一个新模型。点击 ,将 Rotation 模块复制到新模型中。

(2)在新模型中创建测试输入。从 Sources 库中添加一个 Step 模块。将步长时间参数设置保留为 1。将其连接到 Rotation 模块的输入端口。此输入表示当两个轮子沿相反方向旋转时的轮子速度之差。

(3)在输出端口添加一个查看器。右键点击 Rotation 模块的输出端口,然后选择 Create & Connect Viewer > Simulink > Scope

如图所示:

(4)运行仿真。在 Simulation 选项卡中,点击 Run 

如图所示:                          

此仿真显示,当两个轮子以相同速度向相反方向转动时,角度会稳定增加。可以对模型进行一些改进,以便更容易解释角度输出,例如:

  • 可以将弧度输出转换为角度。添加增益为 180/pi 的 Gain 模块。

  • 可以按 360 度为一圈显示角度输出。添加带有函数 mod 的 Math Function 模块。

MATLAB 三角函数采用弧度输入。

验证模型

验证单个组件后,可以对整个模型进行类似的验证。此示例验证以下行为:

  • 当沿相同方向对两个轮子施加相同的力时,机器人沿直线运动。

  • 当沿相反方向对两个轮子施加相同的力时,机器人原地旋转。

(1)在 system_layout 模型中,双击 Inputs 子系统以显示空子系统。

(2)通过添加 Step 模块创建测试输入。将步长时间参数设置保留为 1。将其连接到两个 Outport 模块上。

如图所示:               

(3)在模型的顶层,将两个输出信号连接到同一个波形查看器。

(4)运行模型。

如图所示:

在上图中,黄线是 X 方向,蓝线是 Y 方向。由于角度为零并且保持不变,因此机器人只在 X 方向上移动,跟预期一样。

(5)双击 Inputs 子系统,在信源和第二个输出之间添加具有参数 -1 的 Gain 模块。这将反转左轮的方向。

如图所示                     

(6)为角度输出添加一个示波器。

(7)运行模型。

如图所示:                      

第一个视图显示 X-Y 平面上没有运动。第二个视图显示有稳定旋转。

通过更改输入,可以使用这个最终模型来回答有关模型的许多问题。下面是一些示例:

  • 当初始角度非零时会发生什么?

  • 当作用力下降到零时,运动需要多长时间才能停止?

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

  • 当机器人在更光滑的平面上移动时(即阻力系数更低时)会发生什么?

待续......

Simulink 快速入门(六)-- 建模并验证系统相关推荐

  1. 学习记录《Simulink 快速入门 —— 官方Help文档》

    Simulink 快速入门 -- 官方Help文档 1. Simulink 模块图 2 创建简单模型 2.1 打开新模型 2.2 打开 Simulink库浏览器 2.2.1将模块添加到模型 2.2.2 ...

  2. 3小时快速入门数学建模竞赛-建模技巧2:追根溯源,站在巨人的肩膀上

    我们要检索哪些信息?和怎样获得快速.准确的信息?这两个问题. 首先回答第一个问题,我们需要检索哪些信息?我们从我们需要求解的内容入手,请看思维导图和系统框图,我们需要求解35年寿命期内的发电总量.经济 ...

  3. 【加文老师】快速入门数学建模竞赛系列课程问答帖

    最近正在录制3小时快速入门数学建模竞赛系列课程,这个帖子用于占位.大家可以可以在评论区提出对课程的看法,对数学建模的提问,加文老师和助教将会及时回复大家! 网课已经开发完毕:网易云课堂 适合人群: 1 ...

  4. 小白怎么快速入门游戏建模软件C4D?

    在建模类设计软件中,大家比较熟知的是建模软件Rhino,渲染则是3Dmax,但是近几年来,C4D这款软件开始越来越火.由于其操作简便,易于上手,同时它的建模以及渲染效果又很好,在工业设计.平面设计.服 ...

  5. Simulink 快速入门(一)--Simulink 模块图

    Simulink 模块图 Simulink® 是一个模块图环境,用于多域仿真以及基于模型的设计.它支持系统级设计.仿真.自动代码生成以及嵌入式系统的连续测试和验证.Simulink 提供图形编辑器.可 ...

  6. Simulink快速入门:如何搭建仿真模型——以双向直流变换器为例(附模型)

    最近给别人做这方面的培训,根据自己以往的经验,搭建了一个简单的双向Buck-Boost电路.本文把建模的过程详细梳理了一遍,希望对有需要的人提供参考.附件为模型文件. 软件版本:MATLAB R201 ...

  7. 新手如何快速入门3D建模师,你必须要知道的几款软件

    如何学习游戏建模?对于有兴趣且有时间的小伙伴,相信都是选择自学,也许你会在网上寻找大量的资料.教程,然后开始你的探索之旅,当然,在我看来,自学是比科班教学更加有效和更深刻的过程,在其中你收获到的相信不 ...

  8. 一分钟,simulink快速入门

    目录 小目标: 实现方法: 基本功能实现 第一步,开启simulink 第二步,新建一个仿真工程 第三步,添加模块并连接 第四步,运行 扩展功能一,调用m.function 扩展功能二,导出数据 1] ...

  9. micropython stm32f030_STM32F0单片机快速入门六 用库操作串口(UART)原来如此简单

    1.从 GPIO 到 UART 前面几节我们讲了MCU如何启动,如何用翻转IO引脚,以及用按键去触发中断.接下来我们介绍的也是最常用的一个模块,串口(UART). 串口可以说是最古老,而且生命力最强的 ...

  10. IM开发快速入门(一):什么是IM系统?

    本文在编写时参考了博客作者"鹿呦呦"和在线课程"即时消息技术剖析与实战"的相关资料,一并表示感谢. 1.系列文章引言 IM系统看似简单(没错,很多土老板认为开发 ...

最新文章

  1. Python知识:实用程序模块基础——OS模块
  2. BCH与BCE共享比特币之名
  3. linux串口拼接,Linux下串口操作之數據拼接
  4. JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()
  5. Airflow 中文文档:概念
  6. 单片机关于RAM的作用
  7. Linux查看哪些进程占用较多的cpu、内存和磁盘IO的方法
  8. 和情商高的人聊天是什么样的体验?
  9. 从“判断力”到“创造力”:GAN 在图像生成上的应用
  10. Python基础知识 D9
  11. Android 中关于Cursor类的介绍
  12. jQuery中浏览器版本判断的一个BUG,此BUG已影响到jqModal,thickbox等多个jQuery插件的应用...
  13. mysql导出成execl
  14. 让Apache日志不记录图片等指定扩展名文件的设置方法
  15. qt制作串口调试工具
  16. 《基础微积分教材中译版》--目录
  17. android studio ADT+SDK \appium下载与安装
  18. networkx绘制人物关系网络图
  19. [Apache Kafka 3.2源码解析系列]-2-Kaka高性能高可用设计原理
  20. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)

热门文章

  1. 联想G480黑苹果安装成功
  2. BlackBerry 黑莓 7230 7290 快捷键
  3. AQM-8125空气质量监测系统
  4. 对不起,免费午餐现在只提供稀饭了-- MSN停止支持对第三方软件的登录请求
  5. balabala视频格式转换器
  6. java大嘴鱼游戏代码_Java小游戏吃豆豆源代码
  7. php测试宽带速度慢,别被运营商骗了! 手把手教你学会测自家网速
  8. 三线压力传感器原理_空调压力传感器三线原理图 压力传感器内部原理
  9. lamp兄弟连 mysql_LAMP兄弟连原创视频教程(笔记五--文件上传下载,mysqli对象,session,cookie,date函数)...
  10. 免费学plc的手机app_PLC学吧APP