使用Simulink基于模型设计(二):系统定义和布局

Simulink模型的顶层系统布局是许多工程团队可以使用的公共环境,是基于模型的设计范式:分析、设计、检验和实现。您可以通过确定模型的结构和各个组件来定义顶层系统。然后,您可以将模型按照层次结构进行组织,分别与系统的各个组件相对应。接下来,您可以定义每个组件的接口以及组件之间的连接。

本教程中讨论的模型是一个平板机器人,它可以借助两个轮子进行移动或旋转,类似于家用扫地机器人。此模型假设机器人以下列两种方式之一进行移动:

  • 线性 - 两个轮子以相同的速度向同一方向转动,机器人线性移动。
  • 旋转 - 两个轮子以相同的速度向相反方向转动,机器人原地旋转。

这两种运动都从静止状态开始,也就是说,旋转速度和线性速度均为零。按照这些假设,您可以对线性运动组件和旋转运动组件分别建模。

确定建模目的

在设计模型之前,请明确您的目的和需求。目的决定模型的结构和详细程度。如果目的只是弄清楚机器人可以走多快,那么只对线性运动进行建模就足够了。如果目的是为设备设计一组输入,使它按照给定的路径移动,那就会涉及到旋转组件。如果目的是避障,那么系统就需要一个传感器。本教程的模型构建目的是设计一些传感器参数,使机器人能够在检测到路径中的障碍物时及时停止。要实现此目的,模型必须:

  • 确定电机停止后机器人多长时间能停止下来
  • 提供一系列线性运动和旋转运动的命令,使机器人能够在一个二维空间内移动

第一个建模目的是让您能够分析运动,以便设计传感器。第二个目的是让您能够对设计进行测试。

确定系统组件和接口

明确建模需求之后,即可开始确定系统的组件。确定顶层结构的各个组件及其关系有助于您以系统化方式构建比较复杂的模型。这些步骤是在您构建模型之前在 Simulink 外部进行的。

执行此任务需要回答以下问题:

  • 系统需要哪些结构组件和功能组件?当布局能够反映物理结构和功能结构时,将有助于理解、构建、进行通信和测试系统。当需要在设计过程中的不同阶段实现系统的各个组成部分时,这一点将变得更加重要。
  • 每个组件的输入和输出是什么?绘制一个显示各组件连接情况的图形。此图可帮助您可视化模型中的信号流,确定每个信号的信源和信宿,并确定是否所有必要的组件都存在。
  • 需要达到多高的详细程度?在图中包括主要系统参数。绘制系统图可以帮助您识别并建模对要观察的行为非常重要的部件。实现建模目的所需要的每个组件和参数在模型中都要有一个对应的表示,但需要在模型的复杂程度和可读性之间进行权衡。建模可以是一个反复的过程。您可以从具有很少细节的简要模型开始,然后根据需要逐渐提高复杂程度。

思考以下问题通常也很有帮助:

  • 系统的哪些组成部分需要测试?
  • 测试数据和成功的标准是什么?
  • 哪些输出是分析和设计任务所必需的?

确定机器人运动组件

本教程中的系统定义了一个机器人,它通过两个电动轮子在两个维度上移动。其中包括:

  • 线性运动特性
  • 旋转运动特性
  • 用于确定系统在两个维度上的位置的变换
  • 用于测量机器人与障碍物之间的距离的传感器

此系统的模型包括两个相同的轮子、施加在轮子上的输入作用力、旋转动态特性、坐标变换和一个传感器。此模型使用 Subsystem 表示每个组件:

  1. 打开一个新的 Simulink 模型。
  2. 打开库浏览器。
  3. 添加 Subsystem 模块。将五个 Subsystem 模块从 Ports & Subsystems 库拖放到新模型中。
  4. 点击一个子系统。在格式选项卡中,点击自动名称下拉列表。清除隐藏自动模块名称复选框。

  1. 按如下所示放置并重命名这五个 Subsystem 模块。要更改模块名称,请双击模块名称并编辑文本。

定义组件之间的接口

确定子系统之间的输入和输出连接。输入和输出值在仿真过程中动态变化。模块之间的连接线代表数据传输。下表显示每个组件的输入和输出。

模块

输入

输出

备注

输入

右轮作用力

左轮作用力

不适用

右轮

右轮作用力

右轮速度

有方向性,负值表示相反方向

左轮

左轮作用力

左轮速度

有方向性,负值表示相反方向

旋转

左右轮之间的速度差

旋转角度

逆时针测量

坐标变换

正常速度

旋转角度

X 速度

Y 速度

不适用

传感器

X 坐标

Y 坐标

建模不需要任何模块。

一些模块输入与模块输出并不完全匹配。因此,除了各个组件的动态特性之外,模型还必须计算以下内容:

  • 旋转计算的输入 - 两个轮子的速度相减并除以 2。
  • 坐标变换的输入 - 两个轮子的平均速度。
  • 传感器的输入 - 对坐标变换的输出进行积分。

轮子的速度大小始终相等,并且计算在该假设内是精确的。

添加必要的组件并完成连接:

  1. 为每个子系统添加必要的输入端口和输出端口。双击 Subsystem 模块。

每个新的 Subsystem 模块都包含一个 Inport (In1) 和一个 Outport (Out1) 模块。这些模块定义信号与模型层次结构中下一个更高层级进行交互的接口。

每个 Inport 模块在 Subsystem 模块上创建一个输入端口,每个 Outport 模块创建一个输出端口。模型通过输入/输出端口名称反映这些模块的名称。为更多的输入和输出信号添加更多模块。在 Simulink 编辑器工具栏上,点击向上导航到父级按钮  返回顶层。

对于每个模块,添加并重命名 Inport 和 Outport 模块。

在复制 Inport 模块以创建新模块时,请使用粘贴 (Ctrl+V) 选项。

  1. 根据左轮和右轮速度计算 Coordinate Transform 和 Rotation 子系统所需的输入。
    1. 计算 Coordinate Transform 子系统的线性速度输入。从 Math Operations 库中添加一个 Add 模块,并将两个轮子组件的输出连接起来。添加一个 Gain 模块,并将 Gain 参数设置为 1/2。将 Add 模块的输出连接到此 Gain 模块。
    2. 计算 Rotation 子系统的速度差输入。从 Math Operations 库中添加一个 Subtract 模块。将右轮速度连接到 + 输入,将左轮速度连接到 - 输入。连接两个轮子组件的输出。添加一个 Gain 模块,并将 Gain 参数设置为 1/2。将 Subtract 模块的输出连接到此 Gain 模块。

  1. 根据 X 速度和 Y 速度计算 X 坐标和 Y 坐标。从 Continuous 库中添加两个 Integrator 模块,并连接 Coordinate Transform 模块的输出。将 Integrator 模块的初始条件设置保留为 0。

  1. 完成系统连接。

参数和数据

确定模型需要的参数以及参数的值。根据建模目的决定这些值是始终固定,还是针对不同的仿真而更改。实现建模目的所需要的参数必须在模型中显式表示。下表可以帮助您确定对每个组件进行建模时的详细程度。

参数

模块

符号

类型

质量

左轮

右轮

m

2.5 kg

可变

滚阻

左轮

右轮

k_drag

30 Ns2/m

可变

机器人半径

旋转

r

0.15 m

可变

初始角度

旋转

0 rad

固定

初始速度

左轮

右轮

0 m/s

0 m/s

固定

初始 (X, Y) 坐标

积分器

(0, 0) m

固定

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

m = 2.5;

k_drag = 30;

r = 0.15;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙学习笔记】交互事件

官方文档:交互事件 目录标题 分类交互事件-触屏交互事件-手势事件单一手势 分类 交互事件-触屏 在组件上按下(Down) , 滑动(Move) , 抬起(up)时触发的回调事件。包括点击事件、触摸事件和拖拽事件 交互事件-手势事件 在手机上点击打开应用 , 长按后拖动应用 , 这…

自动化数据集成的BI工具,为你提供决策洞察力

传统的商业智能(BI)报表系统采用的是“业务提报表需求,IT进行开发”的模式。决策管理者和业务人员提出用报表等来展示经营管理数据的需求;接着IT响应需求,进行需求沟通、数据处理加工、报表开发等主体工作;…

使用java代码取本月第一个工作日

根据参数或当前月,获取本月第一个工作日 文章目录 根据参数或当前月,获取本月第一个工作日前言一、根据当前日期获取当前月的第一个工作日二、根据参数日期,获取参数月的第一个工作日。总结 前言 这里我们列举两个方法: 1、没有参…

RFID资产管理系统 RFID固定资产管理系统

大多数企业都曾被固定资产管理“难”的问题困扰:账物不符、查询不便、盘点耗时……因此,越来越多的企业选择用资产管理系统,来实现资产智能化管理。 RFID资产管理系统方案是针对大多数企业存在的资产管理痛点,采用RFID技术&#…

uni-app三部曲之三: 路由拦截

1.引言 路由拦截,个人理解就是在页面跳转的时候,增加一级拦截器,实现一些自定义的功能,其中最重要的就是判断跳转的页面是否需要登录后查看,如果需要登录后查看且此时系统并未登录,就需要跳转到登录页&…

Python地震波逆问题解构算法复杂信号分析

🎯要点 🎯时域、时频域以及时间和频率相关联偏振特性分析三种算法 | 🎯时域波参数估计算法 | 🎯机器学习模型波形指纹分析算法 | 🎯色散曲线和频率相关波分析算法 | 🎯动态倾斜校正算法 | 🎯声…

【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

前后端项目部署方案汇总

前端项目 1、本地打包部署 # 本地打包部署到线上服务器 npm run build && \ rsync -r ./dist/* root127.0.0.1:/www/www.demo.com/www2、服务器端打包部署 步骤 拉取代码 -> 安装依赖 -> 打包编译 -> 拷贝到运行目录 -> 发送成功消息shell命令 git pu…

新手小白报考学习PMP会遇到哪些“坑”?

PMP考试的陷阱实际上与其他大型证书考试差不多,主要是在选择培训机构和各种收费方面会遇到一些坑。 首先,并不是每个人都能经历这些坑,因为PMP考试有一定的门槛。 作为引进国外的考试,报名都有中英文之分,所以先来看…

STM32的 DMA(直接存储器访问) 详解

STM32的DMA(Direct Memory Access,直接存储器存取)是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM,不需要CPU的干预,从而释放CPU资源,提高CPU工作效率,本文基于STM32F…

[极客大挑战 2019]RCE ME

[极客大挑战 2019]RCE ME <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_f…

(附源码)c#+winform实现远程开机(广域网可用)

实现逻辑 利用UDP协议发送特定格式的魔术包&#xff0c;以远程唤醒具有特定MAC地址的目标计算机。目标计算机的BIOS和网络配置需要支持Wake-on-LAN&#xff08;WOL&#xff09;功能&#xff0c;并且需要在目标计算机上配置正确的网络唤醒设置。 源码在最后 准备工作 进入Bio…

力学有限元的基石:虚功原理的推导

推导虚功方程的过程 弹性力学的平衡方程 在张量形式中&#xff0c;平衡方程为&#xff1a; ∇ ⋅ σ b 0 \nabla \cdot \sigma b 0 ∇⋅σb0 用下标表示为&#xff1a; ∂ σ i j ∂ x j b i 0 \frac{\partial \sigma_{ij}}{\partial x_j} b_i 0 ∂xj​∂σij​​b…

知识图谱入门笔记

自学参考&#xff1a; 视频&#xff1a;斯坦福CS520 | 知识图谱 最全知识图谱综述 详解知识图谱的构建全流程 知识图谱构建&#xff08;概念&#xff0c;工具&#xff0c;实例调研&#xff09; 一、基本概念 知识图谱&#xff08;Knowledge graph&#xff09;&#xff1a;由结…

Redis管理禁用命令

在redis数据量比较大时&#xff0c;执行 keys * &#xff0c;fluashdb 这些命令&#xff0c;会导致redis长时间阻塞&#xff0c;大量请求被阻塞&#xff0c;cpu飙升&#xff0c;严重可能导致redis宕机&#xff0c;数据库雪崩。所以一些命令在生产环境禁止使用。 Redis 禁用命令…

【C语言】指针(3):探索-不同类型指针变量

目录 一、字符指针变量 二、数组指针变量 三、二维数组传参的本质 四、函数指针变量 4.1 函数指针变量 4.2 函数指针变量的使用 4.3 函数指针变量的拓展 五、函数指针数组 六、转移表的应用 通过深入理解指针&#xff08;1&#xff09;和深入理解指针&#xff08;2&am…

67.SAP FICO-凭证类型学习

目录 SAP凭证类型 凭证类型的作用 - OBA7 SAP默认的凭证类型更改 FI相应事务代码默认凭证类型 - OBU1 对FB50、60、70默认凭证类型的更改 - OBZO 后勤货物移动默认凭证类型 - OMBA 发货凭证类型 收货凭证类型 自动移动凭证类型 存货盘点凭证类型 发票默认的凭证类…

深度学习Day-24:ResNeXt-50算法思考

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a; 阅读给出代码&#xff0c;判断是否存在错误&#xff0c;正确与否都请给出你的思考&#xff1b;查找…

如何减少开发过程中的bug-数据库篇

1.1慢查询 1.1.1 是否命中索引 提起慢查询&#xff0c;我们马上就会想到加索引。如果一条SQL没加索引&#xff0c;或者没有命中索引的话&#xff0c;就会产生慢查询。 索引哪些情况会失效&#xff1f; 查询条件包含or&#xff0c;可能导致索引失效 如果字段类型是字符串&am…

LeetCode 0724.寻找数组的中心下标:前缀和(时空复杂度O(n)+O(1))

title: 724.寻找数组的中心下标 date: 2024-07-08 13:22:58 tags: [题解, LeetCode, 简单, 数组, 前缀和] 【LetMeFly】724.寻找数组的中心下标&#xff1a;前缀和&#xff08;时空复杂度O(n)O(1)&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-pi…