使用Simulink基于模型设计(三):建模并验证系统
- 可以对系统结构中的每个组件进行建模,以表示该组件的物理行为或功能行为。通过使用测试数据对组件进行仿真,以验证它们的基本行为。
打开系统布局
对各个组件进行建模时,需要从大局上把握整个系统布局。首先加载布局模型。这里以simulink自带的示例模型为例,在 MATLAB命令行中,输入:
open_system('system_layout.slx')
打开模型。
对组件进行建模
包含一个组件的 Simulink模型基于以下几点:
- 物理组件的输出和输入之间的显式数学关系 - 您可以根据组件的输入通过代数计算和微分方程积分,直接或间接计算出组件的输出。例如,按照给定的进水速率计算水箱中的水位就是一种显式关系。每个 Simulink 模块基于从输入到输出的计算定义来执行。
- 物理组件的模型变量之间的隐式数学关系 - 由于变量之间相互依赖,因此为组件指定输入和输出并不容易。例如,电路中连接的电机的
+极电压和-极电压之间就存在一种隐式关系。要在 Simulink 中对这种关系进行建模,您可以使用 Simscape 等物理建模工具,也可以将这些变量建模为允许定义输入/输出的更大组件的一部分。有时候,更仔细地审视建模目的和组件定义有助于定义输入/输出关系。 - 从实际系统获得的数据 - 您已经测得实际组件的输入/输出数据,但不存在完全定义的数学关系。许多设备具有符合此描述的未建模组件。例如,电视机散发的热量。
- 显式功能定义 - 您可以根据功能组件的输入通过代数计算和逻辑计算来定义功能组件的输出。例如,调温器的开关逻辑。您可以将大多数功能关系建模为 Simulink 模块和子系统。
对物理组件进行建模
描述组件之间的关系,例如数据、能量和力的传递。在 Simulink 中使用系统方程构建系统的图形化模型。
为组件建模之前,需要思考以下问题:
- 每个组件的常量是什么?什么值不会更改,除非您更改它们?
- 每个组件的变量是什么?什么值会随着时间而更改?
- 一个组件有多少个状态变量?
根据科学原理推导出每个组件的方程。许多系统方程不外乎以下三种类别:
- 对于连续系统,微分方程描述变量的变化率,为所有时间值都定义方程。例如,一阶微分方程给出车速:
dv(t)dt=−bmv(t)+u(t)
- 对于离散系统,差分方程描述变量的变化率,但只在特定时间定义方程。例如,来自离散比例微分控制器的控制信号:
pd[n]=(e[n]−e[n−1])Kd+e[n]Kp
- 没有导数的方程是代数方程。例如,用代数方程表示包含两个组件的并联电路中的总电流:
It=Ia+Ib
轮子和线性运动. 作用在轮子上的力有两个:
- 电机施加的力 - 此力 F 作用在速度变化的方向上,是轮子子系统的输入。
- 阻力 - 此力 Fdrag 作用在速度变化的相反方向上,是速度的函数。
Fdrag=kdragV∣V∣
加速度与这两个力之和成正比:
(m/2)˙V(m/2)˙V˙V=F−Fdrag=F−kdragV∣V∣=F−kdragV∣V∣(m/2)
其中 kdrag 是阻力系数,m 是机器人的质量。每个轮子承载机器人一半的质量。
构建轮子模型:
- 在
system_layout模型中,双击 Right Wheel 子系统以显示空子系统。 - 对速度和加速度进行建模。添加一个 Integrator 模块。将初始条件设置保留为
0。此模块的输入是加速度 Vdot,输出是速度 V。
- 对阻力进行建模。从 User-Defined Functions 库中添加一个 MATLAB Function 模块。MATLAB Function 模块提供一种在模型中实现数学表达式的快速方法。要编辑函数,请双击该模块以打开 MATLAB® Function 编辑器。
- 在函数编辑器中,输入以下内容:
function Fdrag=get_fdrag(V,k_drag)
Fdrag=k_drag*V*abs(V);
5. 定义 MATLAB Function 模块的参数。在 MATLAB Function 模块编辑器中,点击编辑数据
按钮。点击 k_drag,将作用域设置为参数并点击应用。
6. 用 Subtract 模块从电机的作用力中减去阻力。使用带有参数 1/(m/2) 的 Gain 模块完成力-加速度方程。
7. 要反转 MATLAB Function 模块的方向,请选择该模块。在工具条的格式选项卡上,点击左右翻转
。连接这些模块。

10. 这两个轮子的动态特性相同。复制您刚刚建模的 Right Wheel 子系统,并将其粘贴到 Left Wheel 子系统中。
11. 查看模型的顶层。点击向上导航到父级按钮
。
旋转运动. 当两个轮子沿相反方向转动时,它们沿半径为 r 的圆周运动,从而产生机器人的旋转运动。当这些轮子向相同方向转动时,没有旋转。假设轮子的速度大小始终相等,则可将旋转运动视为两个轮子速度 VR 与 VL 之差的因变量来对其进行建模:
˙θ=VR−VL2r
构建 Rotation Dynamics 模型:
- 在
system_layout模型的顶层,双击 Rotation 子系统以显示空子系统。删除 Inport 和 Outport 模块之间的连接。 - 对角速度和角度进行建模。添加一个 Integrator 模块。将初始条件设置保留为
0。此模块的输出是角度 theta,输入是角速度 theta_dot。 - 根据切向速度计算角速度。添加带有参数
1/(2*r)的 Gain 模块。 - 连接这些模块。

5. 查看模型的顶层。点击向上导航到父级按钮
。
对功能组件进行建模
通过一个函数从输入到输出的整个过程来描述功能。此描述可以包含代数方程和逻辑构造,您可以使用它们在 Simulink 中构建系统的图形化模型。
坐标变换. 机器人在 X 坐标和 Y 坐标上的速度 VX 和 VY 与线性速度 VN 和角度 theta 相关:
VX=VNcos(θ)VY=VNsin(θ)
构建坐标变换模型:
- 在
system_layout模型的顶层,双击 Coordinate Transform 子系统以显示空子系统。 - 对三角函数进行建模。从 Math Operations 库中添加一个 SinCos 模块。
- 对乘法进行建模。从 Math Operations 库中添加两个 Product 模块。
- 连接这些模块。

5. 查看模型的顶层。点击向上导航到父级按钮
。
设置模型参数
模型参数值的来源可以是:
- 书面规范,如标准属性表或制造商的数据表
- 直接测量现有系统所得的测量值
- 基于系统输入/输出的估计值
此模型使用以下参数:
| 参数 | 符号 | 值 |
| 质量 |
| 2.5 kg |
| 滚阻 |
| 30 Ns2/m |
| 机器人半径 |
| 0.15 m |
Simulink 使用 MATLAB 工作区来计算参数。可在 MATLAB 命令行窗口中设置这些参数:
m = 2.5;
k_drag = 30;
r = 0.15;
通过仿真来验证组件
通过提供输入并观察输出来验证组件。即使这样简单的验证也能指出改进模型的直接方法。此示例验证以下行为:
- 当向轮子连续施加力时,速度会增加,直到达到稳定状态的速度为止。
- 当两个轮子向相反方向转动时,旋转角度以恒定速率增加。
验证轮子组件
为轮子组件创建并运行测试模型:
- 创建一个新模型。在仿真选项卡中,点击新建
。将 Right Wheel 模块复制到新模型中。 - 创建一个测试输入。从 Sources 库中添加一个 Step 模块,并将其连接到 Right Wheel 模块的输入端口。将步长时间参数设置保留为
1。 - 在输出端口添加一个查看器。右键点击 Right Wheel 模块的输出端口,然后选择创建并连接查看器 > Simulink > Scope。

5. 运行仿真。在仿真选项卡中,点击运行
。
仿真结果表现出大致的预期行为。在步长时间处施加力之前,没有运动。施加力后,速度开始增加,当施加的力和阻力达到平衡后,速度将保持稳定。除验证外,此仿真还提供了在给定的作用力下轮子的最大速度信息。
验证旋转组件
为旋转组件创建并运行测试模型:
- 创建一个新模型。点击
,将 Rotation 模块复制到新模型中。 - 在新模型中创建测试输入。从 Sources 库中添加一个 Step 模块。将步长时间参数设置保留为
1。将其连接到 Rotation 模块的输入端口。此输入表示当两个轮子沿相反方向旋转时的轮子速度之差。 - 在输出端口添加一个查看器。右键点击 Rotation 模块的输出端口,然后选择创建并连接查看器 > Simulink > Scope。

4. 运行仿真。在仿真选项卡中,点击运行
。
此仿真显示,当两个轮子以相同速度向相反方向转动时,角度会稳定增加。您可以对模型进行一些改进,以便更容易解释角度输出,例如:
- 您可以将弧度输出转换为角度。添加增益为
180/pi的 Gain 模块。 - 您可以按 360 度为一圈显示角度输出。添加带有函数
mod的 Math Function 模块。
MATLAB 三角函数采用弧度输入。
验证模型
验证单个组件后,您可以对整个模型进行类似的验证。此示例验证以下行为:
- 当沿相同方向对两个轮子施加相同的力时,机器人沿直线运动。
- 当沿相反方向对两个轮子施加相同的力时,机器人原地旋转。
- 在
system_layout模型中,双击 Inputs 子系统以显示空子系统。 - 通过添加 Step 模块创建测试输入。将步长时间参数设置保留为
1。将其连接到两个 Outport 模块上。
3. 在模型的顶层,将两个输出信号连接到同一个波形查看器:

4. 运行模型。
在上图中,黄线是 X 方向,蓝线是 Y 方向。由于角度为零并且保持不变,因此机器人只在 X 方向上移动,跟预期一样。
5. 双击 Inputs 子系统,在信源和第二个输出之间添加具有参数 -1 的 Gain 模块。这将反转左轮的方向。

6. 为角度输出添加一个示波器。
7. 运行模型。

第一个视图显示 X-Y 平面上没有运动。第二个视图显示有稳定旋转。
相关文章:
使用Simulink基于模型设计(三):建模并验证系统
可以对系统结构中的每个组件进行建模,以表示该组件的物理行为或功能行为。通过使用测试数据对组件进行仿真,以验证它们的基本行为。 打开系统布局 对各个组件进行建模时,需要从大局上把握整个系统布局。首先加载布局模型。这里以simulink自…...
基于go 1.19的站点模板爬虫
好像就三步: 1 建立http连接 2 解析html内容 3 递归遍历 创建一个基于 Go 1.19 的网站模板爬虫主要涉及几个步骤,包括设置 HTTP 客户端来获取网页内容、解析 HTML 来提取所需的数据,以及处理可能的并发和错误。下面我会给出一个简单的例子来说明如何…...
0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)
小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了,如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…...
[PaddlePaddle飞桨] PaddleOCR图像小模型部署
PaddleOCR的GitHub项目地址 推荐环境: PaddlePaddle > 2.1.2 Python > 3.7 CUDA > 10.1 CUDNN > 7.6pip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr2.7…...
C语言 | Leetcode C语言题解之第227题基本计算题II
题目: 题解: int calculate(char* s) {int n strlen(s);int stk[n], top 0;char preSign ;int num 0;for (int i 0; i < n; i) {if (isdigit(s[i])) {num num * 10 (int)(s[i] - 0);}if (!isdigit(s[i]) && s[i] ! || i n - 1) {s…...
kafka.common.KafkaException: Socket server failed to bind to xx:9092
部署分布式集群的时候遇到的错误。 解决方案: 修改config下的server.properties,添加 listenersPLAINTEXT://:9092 advertised.listenersPLAINTEXT://自己的服务器ip:9092 然后重新启动,检查进程是否存在ps -aux | grep kafka。 成功启动。...
【JS+H5+CSS实现烟花特效】
话不多说直接上代码 注意:背景图路径是picture/star.jpg,自己在同级目录先创键picture目录再下载一张图片命名为star.jpg HTML: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vi…...
uniapp小程序使用webview 嵌套 vue 项目
uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…...
命令模式在金融业务中的应用及其框架实现
引言 命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,并且支持请求的排队和撤销操作。在金融业务中,命令模式可以用于实现交易请求、撤销操作等功能。本文将介绍命令模式在金融业务中的使用,并探讨…...
WordPress的性能优化有哪些方法?
WordPress的性能优化方法主要包括以下几个方面: 1. 使用缓存插件:缓存插件可以降低服务器负载,提高网站加载速度。常用的缓存插件有WP Rocket、WP Fastest Cache和Cache Enabler等。 2. 代码压缩和整合:通过压缩JavaScript、CSS…...
【Python基础】代码如何打包成exe可执行文件
本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、安装PyInstaller三、使用PyInstaller打包四、验证打包是否成功五、总结 一、前言 本文介绍如何…...
Golang | Leetcode Golang题解之第227题基本计算器II
题目: 题解: func calculate(s string) (ans int) {stack : []int{}preSign : num : 0for i, ch : range s {isDigit : 0 < ch && ch < 9if isDigit {num num*10 int(ch-0)}if !isDigit && ch ! || i len(s)-1 {switch preS…...
云端美味:iCloud中食谱与餐饮计划的智能存储方案
云端美味:iCloud中食谱与餐饮计划的智能存储方案 在数字化生活管理中,我们的食谱和餐饮计划是日常饮食健康与乐趣的重要部分。iCloud提供了一个无缝的解决方案,让我们可以在所有设备上存储、同步和访问这些珍贵的信息。本文将详细介绍如何在…...
leetcode:1332. 删除回文子序列(python3解法)
难度:简单 给你一个字符串 s,它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符(字符串为空)的最小删除次数。 「子序列」定义:如果一个字符串可以通过删除原字…...
智慧交通的神经中枢:Transformer模型在智能交通系统中的应用
智慧交通的神经中枢:Transformer模型在智能交通系统中的应用 随着城市化进程的加快,交通拥堵、事故频发、环境污染等问题日益严重。智能交通系统(ITS)作为解决这些问题的关键技术之一,受到了广泛关注。Transformer模型…...
PCIe驱动开发(1)— 开发环境搭建
PCIe驱动开发(1)— 开发环境搭建 一、前言 二、Ubuntu安装 参考: VMware下Ubuntu18.04虚拟机的安装 三、QEMU安装 参考文章:QEMU搭建X86_64 Ubuntu虚拟系统环境 四、安装Ubuntu 下载地址:https://old-releases.ubuntu.com…...
YOLOv10改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(解决低FLOPs陷阱)
一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制,这个论文中介绍了一个名为ParameterNet的新型设计原则,它旨在在大规模视觉预训练模型中增加参数数量,同时尽量不增加浮点运算&#x…...
变革设计领域:Transformer模型在智能辅助设计中的革命性应用
变革设计领域:Transformer模型在智能辅助设计中的革命性应用 在人工智能技术的推动下,智能辅助设计(Intelligent Assisted Design, IAD)正逐渐成为现实。Transformer模型,以其卓越的处理序列数据的能力,为…...
Spring——配置说明
1. 别名 别名:如果添加了别名,也可以使用别名获取这个对象 <alias name"user" alias"user2"/> 2. Bean的配置 id:bean 的唯一标识符,也就是相当于我们学的对象名class:bean 对象所对应的…...
禁用华为小米?微软中国免费送iPhone15
微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
