当前位置: 首页 > news >正文

使用Simulink基于模型设计(三):建模并验证系统

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

打开系统布局

对各个组件进行建模时,需要从大局上把握整个系统布局。首先加载布局模型。这里以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=kdragVV

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

(m/2)˙V(m/2)˙V˙V=FFdrag=FkdragVV∣=FkdragVV∣(m/2)

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

构建轮子模型:

  1. 在 system_layout 模型中,双击 Right Wheel 子系统以显示空子系统。
  2. 对速度和加速度进行建模。添加一个 Integrator 模块。将初始条件设置保留为 0。此模块的输入是加速度 Vdot,输出是速度 V。
  3. 对阻力进行建模。从 User-Defined Functions 库中添加一个 MATLAB Function 模块。MATLAB Function 模块提供一种在模型中实现数学表达式的快速方法。要编辑函数,请双击该模块以打开 MATLAB® Function 编辑器。
  4. 在函数编辑器中,输入以下内容:

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 之差的因变量来对其进行建模:

˙θ=VRVL2r

构建 Rotation Dynamics 模型:

  1. 在 system_layout 模型的顶层,双击 Rotation 子系统以显示空子系统。删除 Inport 和 Outport 模块之间的连接。
  2. 对角速度和角度进行建模。添加一个 Integrator 模块。将初始条件设置保留为 0。此模块的输出是角度 theta,输入是角速度 theta_dot。
  3. 根据切向速度计算角速度。添加带有参数 1/(2*r) 的 Gain 模块。
  4. 连接这些模块。

   5. 查看模型的顶层。点击向上导航到父级按钮 

对功能组件进行建模

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

坐标变换.  机器人在 X 坐标和 Y 坐标上的速度 VX 和 VY 与线性速度 VN 和角度 theta 相关:

VX=VNcos(θ)VY=VNsin(θ)

构建坐标变换模型:

  1. 在 system_layout 模型的顶层,双击 Coordinate Transform 子系统以显示空子系统。
  2. 对三角函数进行建模。从 Math Operations 库中添加一个 SinCos 模块。
  3. 对乘法进行建模。从 Math Operations 库中添加两个 Product 模块。
  4. 连接这些模块。

5. 查看模型的顶层。点击向上导航到父级按钮 

设置模型参数

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

  • 书面规范,如标准属性表或制造商的数据表
  • 直接测量现有系统所得的测量值
  • 基于系统输入/输出的估计值

此模型使用以下参数:

参数

符号

质量

m

2.5 kg

滚阻

k_drag

30 Ns2/m

机器人半径

r

0.15 m

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

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

通过仿真来验证组件

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

  • 当向轮子连续施加力时,速度会增加,直到达到稳定状态的速度为止。
  • 当两个轮子向相反方向转动时,旋转角度以恒定速率增加。
验证轮子组件

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

  1. 创建一个新模型。在仿真选项卡中,点击新建 ​​​​​​​。将 Right Wheel 模块复制到新模型中。
  2. 创建一个测试输入。从 Sources 库中添加一个 Step 模块,并将其连接到 Right Wheel 模块的输入端口。将步长时间参数设置保留为 1
  3. 在输出端口添加一个查看器。右键点击 Right Wheel 模块的输出端口,然后选择创建并连接查看器 > Simulink > Scope

5. 运行仿真。在仿真选项卡中,点击运行 ​​​​​​​

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

验证旋转组件

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

  1. 创建一个新模型。点击 ​​​​​​​,将 Rotation 模块复制到新模型中。
  2. 在新模型中创建测试输入。从 Sources 库中添加一个 Step 模块。将步长时间参数设置保留为 1。将其连接到 Rotation 模块的输入端口。此输入表示当两个轮子沿相反方向旋转时的轮子速度之差。
  3. 在输出端口添加一个查看器。右键点击 Rotation 模块的输出端口,然后选择创建并连接查看器 > Simulink > Scope

4. 运行仿真。在仿真选项卡中,点击运行 ​​​​​​​

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

  • 您可以将弧度输出转换为角度。添加增益为 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基于模型设计(三):建模并验证系统

可以对系统结构中的每个组件进行建模,以表示该组件的物理行为或功能行为。通过使用测试数据对组件进行仿真,以验证它们的基本行为。 打开系统布局 对各个组件进行建模时,需要从大局上把握整个系统布局。首先加载布局模型。这里以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

题目&#xff1a; 题解&#xff1a; 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 然后重新启动&#xff0c;检查进程是否存在ps -aux | grep kafka。 成功启动。...

【JS+H5+CSS实现烟花特效】

话不多说直接上代码 注意:背景图路径是picture/star.jpg&#xff0c;自己在同级目录先创键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的性能优化方法主要包括以下几个方面&#xff1a; 1. 使用缓存插件&#xff1a;缓存插件可以降低服务器负载&#xff0c;提高网站加载速度。常用的缓存插件有WP Rocket、WP Fastest Cache和Cache Enabler等。 2. 代码压缩和整合&#xff1a;通过压缩JavaScript、CSS…...

【Python基础】代码如何打包成exe可执行文件

本文收录于 《一起学Python趣味编程》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、安装PyInstaller三、使用PyInstaller打包四、验证打包是否成功五、总结 一、前言 本文介绍如何…...

Golang | Leetcode Golang题解之第227题基本计算器II

题目&#xff1a; 题解&#xff1a; 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中食谱与餐饮计划的智能存储方案

云端美味&#xff1a;iCloud中食谱与餐饮计划的智能存储方案 在数字化生活管理中&#xff0c;我们的食谱和餐饮计划是日常饮食健康与乐趣的重要部分。iCloud提供了一个无缝的解决方案&#xff0c;让我们可以在所有设备上存储、同步和访问这些珍贵的信息。本文将详细介绍如何在…...

leetcode:1332. 删除回文子序列(python3解法)

难度&#xff1a;简单 给你一个字符串 s&#xff0c;它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符&#xff08;字符串为空&#xff09;的最小删除次数。 「子序列」定义&#xff1a;如果一个字符串可以通过删除原字…...

智慧交通的神经中枢:Transformer模型在智能交通系统中的应用

智慧交通的神经中枢&#xff1a;Transformer模型在智能交通系统中的应用 随着城市化进程的加快&#xff0c;交通拥堵、事故频发、环境污染等问题日益严重。智能交通系统&#xff08;ITS&#xff09;作为解决这些问题的关键技术之一&#xff0c;受到了广泛关注。Transformer模型…...

PCIe驱动开发(1)— 开发环境搭建

PCIe驱动开发&#xff08;1&#xff09;— 开发环境搭建 一、前言 二、Ubuntu安装 参考: VMware下Ubuntu18.04虚拟机的安装 三、QEMU安装 参考文章&#xff1a;QEMU搭建X86_64 Ubuntu虚拟系统环境 四、安装Ubuntu 下载地址&#xff1a;https://old-releases.ubuntu.com…...

YOLOv10改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(解决低FLOPs陷阱)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…...

变革设计领域:Transformer模型在智能辅助设计中的革命性应用

变革设计领域&#xff1a;Transformer模型在智能辅助设计中的革命性应用 在人工智能技术的推动下&#xff0c;智能辅助设计&#xff08;Intelligent Assisted Design, IAD&#xff09;正逐渐成为现实。Transformer模型&#xff0c;以其卓越的处理序列数据的能力&#xff0c;为…...

Spring——配置说明

1. 别名 别名&#xff1a;如果添加了别名&#xff0c;也可以使用别名获取这个对象 <alias name"user" alias"user2"/> 2. Bean的配置 id&#xff1a;bean 的唯一标识符&#xff0c;也就是相当于我们学的对象名class&#xff1a;bean 对象所对应的…...

禁用华为小米?微软中国免费送iPhone15

微软中国将禁用华为和小米手机&#xff0c;要求员工必须使用iPhone。如果还没有iPhone&#xff0c;公司直接免费送你全新的iPhone 15&#xff01; 、 这几天在微软热度最高的话题就是这个免费发iPhone&#xff0c;很多员工&#xff0c;收到公司的通知。因为&#xff0c;登录公司…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...