主要内容

Simulink 中设计系统

基于模型的设计以物理组件和系统的模型为中心,模型是设计、测试和实现活动的基础。本教程说明如何通过向平板机器人模型添加警报系统,将设计的组件添加到现有系统模型中。

打开系统模型

此模型是一个平板机器人,它可以借助两个轮子进行移动或旋转,类似于家用扫地机器人。

The system_model model.

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

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

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

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

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

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

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

本教程说明如何设计警报系统。使用现有模型确定测量障碍物距离的传感器所需的参数。此示例假设传感器能够完美准确地测量距离。警报系统以固定间隔对这些测量值进行采样,使输出与测量值相差始终不超过 0.05 米,并及时触发警报以便机器人在撞到障碍物前停止。

通过仿真来分析系统行为

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

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

  • 机器人的最高速度

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

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

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

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

    • 振幅1

    • 周期20

    • 脉冲宽度15

    这些参数值帮助机器人达到最高速度。您可以更改参数以查看不同的值如何影响机器人的运动。

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

  5. 分析仿真结果。要打开仿真数据检查器,请点击数据检查器。此模型记录 linear speedX positionY position 信号的数据。

    更改子图布局以查看所有三个信号。点击“可视化和布局”按钮 。然后,在基本下,选择拆分底部布局

    • 在顶部子图中,绘制 linear speed 信号。

    • 在底部左侧子图中,绘制 X position 信号。

    • 在底部右侧子图中,绘制 Y position 信号。

    The Simulation Data Inspector show the speed and position of the robot over the 20 second simulation.

    上部子图显示,表示输入力的脉冲在仿真时间 3 秒处降至 0 后,机器人的速度迅速下降。速度逐渐趋近于 0 但从未达到 0。没有外力的低速动力学精确建模需要更复杂的系统表示。然而,系统的这种近似表示对于示例目的已经足够。

    下部子图显示仿真期间机器人的 xy 位置。机器人在 y 方向上不移动。在 x 方向上,仿真开始时位置变化迅速。经过大约 3 秒的仿真时间,随着机器人速度的降低,位置变化变得更缓慢。

您可以缩放和平移以找到机器人的最终位置。点击“放大”按钮 ,然后点击并拖动以放大显示机器人位置的底部左侧子图。在 3 秒处,机器人的位置约为 0.55 米。在仿真结束时,机器人的位置大约在 0.7 米处。由于机器人的速度在仿真结束时接近于零,因此结果显示机器人在外力降至零后移动不到 0.16 米。

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

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

The Simulation Data Inspector the robot speed with a cursor to find the maximum velocity.

设计组件并验证设计

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

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

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

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

添加设计的组件

构建传感器:

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

    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.

验证设计

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

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

  2. Outport 模块连接到 Sensor model 子系统以记录数据。

  3. 标记 X positionY position 信号进行信号记录。选择这两个信号。在仿真选项卡上,点击记录信号

    The view of the top model.

  4. 对模型进行仿真。

在仿真数据检查器中,点击“可视化和布局”按钮 以将绘图布局更改为 2×1 布局。在上部子图中,绘制 X position 信号。在下部子图中,绘制 Alert 信号。

机器人位置的绘图与上一次运行看起来相同。警报信号的绘图显示,当机器人进入障碍物位置的 0.21 米范围内时,警报信号值变为 1,这满足该组件的设计需求。

The Simulation Data Inspector shows the position of the robot over the 20 second simulation in the upper subplot and the value of the alert signal over the 20 second simulation in the lower subplot.

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

另请参阅

模块

工具

另请参阅

主题