当前位置: 首页 > 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;登录公司…...

nginx初理解

没有ngix时&#xff0c;有两台服务器&#xff0c;供访问 1. 现在有两台服务器上同样的路径下都放了一个&#xff0c; 都能通过ip加端口访问到页面 后端项目 &#xff08;查看tomcat中的配置中的 server.xml&#xff0c;能找到项目路径&#xff09; tomacat 也都有 两个…...

FreeCAD源码分析:属性系统

按照面向对象设计(Object-Oriented Design, OOD)的信条&#xff0c;OOD大体上包括两方面的内涵&#xff1a;一方面&#xff0c;需要将业务数据抽象成(树状/层状)数据对象&#xff0c;这就是所谓的数据对象模型(Data Object Model)&#xff1b;另一方面就是职责的分摊与聚合&…...

C++入门 模仿mysql控制台输出表格

一、 说明 控制台输出表格&#xff0c;自适应宽度 二、 源码 #include <iostream> #include <map> #include <string> #include <vector>using namespace std;void printTable(vector<vector<string>> *pTableData) {int row pTableDa…...

SpringBoot新手快速入门系列教程五:基于JPA的一个Mysql简单读写例子

现在我们来做一个简单的读写Mysql的项目 1&#xff0c;先新建一个项目&#xff0c;我们叫它“HelloJPA”并且添加依赖 2&#xff0c;引入以下依赖&#xff1a; Spring Boot DevTools (可选&#xff0c;但推荐&#xff0c;用于开发时热部署)Lombok&#xff08;可选&#xff0c…...

开源大势所趋

一、开源项目的发展趋势 技术栈多样化与专业化&#xff1a;随着技术的不断进步&#xff0c;开源项目涵盖了从云计算、大数据、人工智能到区块链、物联网等各个领域&#xff0c;技术栈日益丰富和专业化。这种趋势使得开发者能够根据自己的需求选择最适合的技术工具&#xff0c;促…...

智能无人机飞行控制系统:基于STM32的设计与实现(内附资料)

摘要 智能无人机的飞行控制系统是确保无人机安全、高效运行的核心。本文将探讨基于STM32微控制器的智能无人机飞行控制系统的设计与实现&#xff0c;包括系统架构、关键组件选择、控制算法开发以及代码实现。 1. 引言 智能无人机在军事侦察、物流配送、环境监测等多个领域展…...

centos磁盘空间满了-问题解决

报错问题解释&#xff1a; CentOS系统在运行过程中可能会出现磁盘空间不足的错误。这通常发生在以下几种情况&#xff1a; 系统日志文件或临时文件过大导致磁盘空间不足。 安装了大量软件或文件而没有清理无用文件。 有可能是某个进程占用了大量磁盘空间。 问题解决方法&a…...

宝塔:如何开启面板ssl并更新过期ssl

1、登录宝塔面板 > 前往面板设置 > 最上方的安全设置 > 面板SSL > 面板SSL配置 打开后先查看自签证书的时间&#xff0c;如果时间是已经过期的&#xff0c;就前往这个目录&#xff0c;将该目录下所有文件都删掉 重新回到面板SSL配置的位置&#xff0c;打开后会看到…...

大白话讲解AI大模型

大白话讲解大模型 大模型的发展重要大模型发展时间线 大模型的简单原理-训练⼤模型是如何训练并应⽤到场景中的&#xff1f;如果训练私有化模型 模型&#xff1a;model 语料库&#xff1a;用于训练模型的数据 大模型的发展 详细信息来源&#xff1a;DataLearner 2022年11月底…...

pandas+pywin32操作excel办公自动化

import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名&#xff08;A端…...

华为云怎么做网站/百度公司推广电话

1.查看Centos当前ip地址(局域网内)&#xff0c;命令&#xff1a;ip addr 2.进入网络配置目录&#xff1a;cd /etc/sysconfig/network-scripts 3.查看所有配置文件&#xff1a;ls #列出文件 4.辨别使用的网卡文件&#xff0c;一般文件名以ifcfg-开头&#xff0c;末尾有(随机)数字…...

网页设计与网站建设项目教程/成都百度推广开户公司

网络通信、文件存储中经常需要交换数据&#xff0c;为了减少网络通信流量、文件存储大小以及加密通信规则&#xff0c;经常需要对数据进行双向加解密以保证数据的安全。PHP中实现此功能主要需要使用的函数主要是pack及unpack函数pack压缩资料到位字符串之中。语法: string pack…...

北京专业的网站建设/网站开发用什么软件

使用DOM节点操作1、周期性创建雪花setInterval()2、雪花出现的位置随机function rand(m,n){return Math.floor(Math.random() * (n-m1)) m}document.documentElement.clientWidth || document.body.clientWidth3、控制雪花向下飘&#xff08;移动的步径&#xff09;var step …...

档案网站建设网页/企业网站建设需求分析

在iOS 开发中 使用html 中的input 标签调起工程里面的相机&#xff0c;手机无反应 1.先看看info.plist 加没加相机的权限&#xff0c;添加Privacy - Camera Usage Description权限 2.看看控制台的日志 是警告还是什么 如果是whose view is not in the window hierarchy造成的视…...

wordpress需要会php吗/百度推广图片尺寸要求

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>统计</title><!-- 引入 echarts.js --> <!--要先加载echarts.js 之后再执行方法 不然会报错--> <style> #main{/* 通过ID获取将div设置居中样式…...

wordpress 国内优化/视频互联网推广选择隐迅推

程序中为了让更直观的反映命令执行的进度&#xff0c;考虑使用进度条&#xff0c;但是asp.net中没有专门的进度条控件&#xff0c;在网上搜了一下&#xff0c;实现方法都很复杂&#xff0c;就自己动手做了一个&#xff0c;实现起来其实也很简单。后来又想了个方法&#xff0c;加…...