在 Simulink 中设计系统
基于模型的设计以物理组件和系统的模型为中心,模型是设计、测试和实现活动的基础。本教程说明如何通过向平板机器人模型添加警报系统,将设计的组件添加到现有系统模型中。
打开系统模型
此模型是一个平板机器人,它可以借助两个轮子进行移动或旋转,类似于家用扫地机器人。

确定设计的组件和设计目的
指定设计目标是完成设计任务的关键第一步。即使是一个简单系统也可能有多个甚至相互竞争的设计目标。对于示例模型,请考虑以下目标:
设计一个控制器,它可以改变作用力输入,使轮子按所需的速度转动。
设计输入,使设备沿预定的路径移动。
设计一个传感器和一个控制器,使设备沿直线移动。
设计一种规划算法,使设备沿可能的最短路径到达某个点并避开障碍物。
设计一个传感器和一种算法,使设备在某个区域内移动并避开障碍物。
本教程说明如何设计警报系统。使用现有模型确定测量障碍物距离的传感器所需的参数。此示例假设传感器能够完美准确地测量距离。警报系统以固定间隔对这些测量值进行采样,使输出与测量值相差始终不超过 0.05 米,并及时触发警报以便机器人在撞到障碍物前停止。
通过仿真来分析系统行为
设计新组件需要分析机器人的线性运动以确定:
如果切断轮子的电源,机器人能够以最高速度行驶多远
机器人的最高速度
使用能够使机器人开始运动的作用力输入信号来仿真模型,等到机器人达到稳定速度后,将输入作用力设置为零:
在模型中,双击名为
Inputs的子系统。删除现有阶跃输入,并添加一个 Pulse Generator 模块。
为 Pulse Generator 模块设置以下参数:
振幅:
1周期:
20脉冲宽度:
15
这些参数值帮助机器人达到最高速度。您可以更改参数以查看不同的值如何影响机器人的运动。
对模型进行 20 秒的仿真。
分析仿真结果。要打开仿真数据检查器,请点击数据检查器。此模型记录
linear speed、X position和Y position信号的数据。更改子图布局以查看所有三个信号。点击“可视化和布局”按钮
。然后,在基本下,选择拆分底部布局
。在顶部子图中,绘制
linear speed信号。在底部左侧子图中,绘制
X position信号。在底部右侧子图中,绘制
Y position信号。

上部子图显示,表示输入力的脉冲在仿真时间 3 秒处降至 0 后,机器人的速度迅速下降。速度逐渐趋近于 0 但从未达到 0。没有外力的低速动力学精确建模需要更复杂的系统表示。然而,系统的这种近似表示对于示例目的已经足够。
下部子图显示仿真期间机器人的 x 和 y 位置。机器人在 y 方向上不移动。在 x 方向上,仿真开始时位置变化迅速。经过大约 3 秒的仿真时间,随着机器人速度的降低,位置变化变得更缓慢。
您可以缩放和平移以找到机器人的最终位置。点击“放大”按钮
,然后点击并拖动以放大显示机器人位置的底部左侧子图。在 3 秒处,机器人的位置约为 0.55 米。在仿真结束时,机器人的位置大约在 0.7 米处。由于机器人的速度在仿真结束时接近于零,因此结果显示机器人在外力降至零后移动不到 0.16 米。

您可以使用游标查找最高速度。点击“显示/隐藏数据游标”按钮
。将游标放在速度曲线平坦的区域。数据游标标签显示机器人的最高速度为 0.183 米/秒。要计算机器人行驶 0.05 米所需的时间,请将 0.05 米除以 0.183 米/秒,得到 0.27 秒的结果。

设计组件并验证设计
传感器设计包括以下组件:
机器人与障碍物之间的距离测量值 - 此示例假定测量值非常精确。
警报系统设置的每次距离测量的时间间隔 - 要使测量误差低于 0.05 米,采样间隔必须小于 0.27 秒。采用 0.25 秒。
传感器发出警报时的距离 - 分析表明,当机器人距离障碍物大约 0.16 米时,必须开始减速。但实际警报距离还必须将离散测量误差 0.05 米考虑在内。
添加设计的组件
构建传感器:
创建一个具有四个输入端口和一个输出端口的子系统。该子系统接收机器人的 x 和 y 坐标以及障碍物的 x 和 y 坐标的输入。传感器产生的警报信号连接到输出端口。

构建距离测量值子系统。在名为
Sensor model的子系统中,使用 Subtract 模块、具有函数magnitude^2的 Math Function 模块、Sum 模块和 Sqrt 模块来实现距离计算。请注意,在子系统内,输入端口的排列不需要与 Subsystem 模块接口上的端口排列匹配。
要对采样进行建模,请从 Discrete 库向子系统添加一个 Zero-Order Hold 模块,并将该模块的采样时间参数设置为
0.25。将距离计算的结果连接到 Zero-Order Hold 模块的输入。
要进行警报逻辑建模,请从 Logic and Bit Operations 库中添加 Compare to Constant 模块,并设置以下模块参数:
运算符:
<=常量值:
0.21输出数据类型:
boolean
使用这些参数值,当表示机器人与障碍物之间距离的输入值小于或等于 0.21 时,模块输出值为 1。
将 Zero-Order Hold 模块的输出连接到 Compare to Constant 模块的输入。
最后,将 Compare to Constant 模块的输出连接到名为
Alert的 Outport 模块。
验证设计
使用障碍物位置 X = 0.65、Y = 0 并以 Constant 模块作为 Sensor model 子系统的输入来测试设计。此测试验证 X 方向的设计功能。您可以针对不同路径创建类似的测试。此模型仅生成警报,并不控制机器人。
设置障碍物位置。从 Sources 库中添加两个 Constant 模块,并将常量值设置为
0.65和0。将机器人的位置输出连接到传感器的输入端口。将 Outport 模块连接到
Sensor model子系统以记录数据。标记
X position和Y position信号进行信号记录。选择这两个信号。在仿真选项卡上,点击记录信号。
对模型进行仿真。
在仿真数据检查器中,点击“可视化和布局”按钮
以将绘图布局更改为 2×1 布局。在上部子图中,绘制 X position 信号。在下部子图中,绘制 Alert 信号。
机器人位置的绘图与上一次运行看起来相同。警报信号的绘图显示,当机器人进入障碍物位置的 0.21 米范围内时,警报信号值变为 1,这满足该组件的设计需求。

对于具有复杂组件和形式化需求的真实系统,Simulink® 产品系列提供了一些附加工具,可以细化和自动完成设计过程。Requirements Toolbox™ 可以对要求进行形式化定义,并将它们与模型组件联系起来。如果您要为此机器人构建一个控制器,Simulink Control Design™ 可以帮助您完成设计。Simulink Verification and Validation™ 产品则建立了一套形式化框架,可用于测试组件和系统。
另请参阅
模块
- Pulse Generator | Gain | Integrator | Sum | Constant | Zero-Order Hold | Subsystem