使用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,很多员工,收到公司的通知。因为,登录公司…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
