Main Content

Simulink 中设计系统

基于模型的设计范式以物理组件和系统的模型为中心,模型是设计、测试和实现活动的基础。本教程将在一个现有的系统模型中添加一个设计组件。

打开系统模型

此模型是一个平板机器人,它可以借助两个轮子进行移动或旋转,类似于家用扫地机器人。通过在 MATLAB® 命令行中输入以下命令打开模型:

open_system('system_model.slx')

本教程将分析此系统并为其添加功能。

确定设计的组件和设计目的

设定目标的说明是完成设计任务的关键第一步。即使是一个简单的系统,也可能存在多个甚至是相互矛盾的设计目的。对于示例模型,请考虑以下目标:

  • 设计一个控制器,它可以改变作用力输入,使轮子按所需的速度转动。

  • 设计输入,使设备沿预定的路径移动。

  • 设计一个传感器和一个控制器,使设备沿直线移动。

  • 设计一种规划算法,使设备沿可能的最短路径到达某个点并避开障碍物。

  • 设计一个传感器和一种算法,使设备在某个区域内移动并避开障碍物。

本教程将设计一个警报系统。您需要确定用于测量障碍物距离的传感器的参数。完美的传感器精确地测量它与障碍物的距离。警报系统按固定时间间隔对这些测量值进行采样,使输出与测量值相差始终不超过 0.05 米。系统会及时生成警报,让机器人在碰到障碍物前停下来。

通过仿真来分析系统行为

设计新组件需要分析机器人的线性运动以确定:

  • 如果切断轮子的电源,机器人能够以最高速度行驶多远

  • 机器人的最高速度

使用能够使机器人开始运动的作用力输入信号来仿真模型,等到机器人达到稳定速度后,将输入作用力设置为零:

  1. 在模型中,双击名为 Inputs 的子系统。

  2. 删除现有阶跃输入,并添加一个 Pulse Generator 模块。

  3. Pulse Generator 模块设置以下参数:

    • 振幅:1

    • 周期:20

    • 脉冲宽度:15

    采用以上参数值是为了确保达到最高速度。您可以更改参数以查看其效果。

  4. 对模型进行 20 秒的仿真。

    要分析仿真结果,请查看连接到模型中浮动示波器的信号。

    第一个示波器显示,在仿真时间 3 秒处,机器人的速度在表示输入力的脉冲降至零后迅速降低。速度渐近于零,但永远不会达到零。没有外力的低速动态的精确建模需要更复杂的系统表示形式。然而,对于此处的目标,此系统的近似表示已经足够。

    The scope shows the speed of the robot over the 20 second simulation.

    第二个示波器显示仿真期间机器人的位置。开始时,位置变化更快。经过大约 3 秒的仿真时间,随着机器人速度的降低,位置变化变得更缓慢。

    The scope shows the position of the robot over the 20 second simulation.

放大显示机器人位置的示波器图。在时间 3 处,机器人的位置大约在 0.55 米处。在仿真结束时,机器人的位置大约在 0.7 米处。由于机器人的速度在仿真结束时非常接近于零,因此结果显示机器人在外力降至零后移动不到 0.16 米。

The scope shows a closer view of the robot position over the 20 second simulation. The maximum value on the y-axis is 0.7.

要求出最高速度,请执行以下操作:

  1. 放大速度信号在时间上的平台区,即从 1 秒到 3 秒处。

  2. 再次点击缩放按钮,退出缩放模式。

  3. 点击游标测量值

  4. 将第二个游标放在速度曲线平坦的区域。

    The scope shows a closely zoomed view of the robot speed in the part of the simulation where the pulse signal is high. The cursor measurements panel is shown in the Scope window to the right of the plot.

游标测量面板中的列表明机器人的最高速度为 0.183 米/秒。要计算机器人行驶 0.05 米所需的时间,用 0.05 米除以 0.183 米/秒,得到结果为 0.27 秒。

设计组件并验证设计

传感器设计包括以下组件:

  • 机器人与障碍物之间的距离测量值 - 此示例假定测量值非常精确。

  • 警报系统设置的每次距离测量的时间间隔 - 要使测量误差低于 0.05 米,采样间隔必须小于 0.27 秒。采用 0.25 秒。

  • 传感器发出警报时的距离 - 分析表明,当机器人距离障碍物大约 0.16 米时,必须开始减速。但实际警报距离还必须将离散测量误差 0.05 米考虑在内。

添加设计的组件

构建传感器:

  1. 创建一个具有四个输入端口和一个输出端口的子系统。该子系统接收机器人的 x 和 y 坐标以及障碍物的 x 和 y 坐标的输入。传感器产生的警报信号连接到输出端口。

    The view of the sensor subsystem in the parent diagram shows the input and output ports.

  2. 构建距离测量值子系统。在名为 Sensor model 的子系统中,使用 Subtract 模块、具有函数 magnitude^2Math Function 模块、Sum 模块和 Sqrt 模块来实现距离计算。请注意,在子系统内,输入端口的排列不需要与 Subsystem 模块接口上的端口排列匹配。

    Blocks inside the subsystem that represents the sensor implement the distance calculation.

  3. 要对采样进行建模,请从 Discrete 库向子系统添加一个 Zero-Order Hold 模块,并将该模块的采样时间参数设置为 0.25

  4. 将距离计算的结果连接到 Zero-Order Hold 模块的输入。

  5. 要进行警报逻辑建模,请从 Logic and Bit Operations 库中添加 Compare to Constant 模块,并设置以下模块参数:

    • 运算符<=

    • 常量值0.21

    • 输出数据类型boolean

    使用这些参数值,当输入值小于或等于 0.21 时,模块输出值为 1

  6. Zero-Order Hold 模块的输出连接到 Compare to Constant 模块的输入。

  7. 最后,将 Compare to Constant 模块的输出连接到名为 AlertOutport 模块。

    The block diagram shows the contents of the subsystem that models the sensor.

验证设计

使用 Constant 模块作为 Sensor model 子系统的输入,以 X = 0.65, Y = 0 的障碍物位置来测试设计。此测试验证 X 方向的设计功能。您可以针对不同路径创建类似的测试。此模型仅生成警报,不控制机器人。

  1. 设置障碍物位置。从 Sources 库中添加两个 Constant 模块,并将常量值设置为 0.650。将机器人的位置输出连接到传感器的输入端口。

  2. 为 Alert 输出添加一个示波器。

    The view of the top model shows the floating scope added to the Alert output of the subsystem that represents the sensor.

  3. 对模型进行仿真。

示波器中的机器人位置图看起来与上一次运行相同。

The scope shows the position of the robot over the 20 second simulation.

连接到警报信号的示波器显示,当机器人进入障碍物位置的 0.21 米范围内时,警报信号值变为 1,这满足该组件的设计需求。

The scope shows the value of the alert signal over the 20 second simulation.

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

相关主题