隔离进入和退出原子子图的转换逻辑
此示例展示了如何使用入口和出口端口创建进出链接原子子图的多个连接。进入和退出端口使您的图表能够在Stateflow®层次结构中跨边界转换,同时隔离进入和退出原子子图的逻辑。有关入口和出口端口的详细信息,请参见创建跨州边界的入口和出口连接.
在这个例子中,一个Simulink®模金宝app型模拟了一个机器人通过障碍物来寻找一个坞站。该模型包含三个状态流图:
线路控制
定义机器人搜索码头和通过障碍路线时使用的策略。机器人
定义机器人的物理特性,如位置和运动方向,相对于码头和周围的障碍物。情节发展轨迹
创建机器人在避开障碍物和搜索码头时所采取的路径的视觉表示。
定义搜索策略
的线路控制
图表定义了机器人搜索对接站的策略。该图表由来自Simulink库模型的链接原子子图的组合组成金宝appsfRobotExampleLib.slx
.链接的原子子图表现为宏,指示机器人向前移动,向左或向右旋转,并与码头进行无线电联系。您可以组合这些子图的一个或多个实例来编程您自己的搜索策略。
在这个例子中,机器人沿直线移动,并定期与码头进行无线电联系。如果机器人感觉到自己正在远离码头,它就向右旋转45度,继续搜索。如果机器人遇到障碍物,它会向左旋转45度并继续搜索。最初,机器人以每秒0.5米的速度移动。当机器人到达距离码头2米的地方时,它的速度会降至每秒0.1米。当机器人靠近对接站时,模拟停止。否则,后达峰时间
然后,模拟停止并返回一个警告。
在子图中创建多条目连接
在线路控制
图,链接的原子子图旋转
包含两个已标记的入口端口左
和正确的
.在模拟过程中,旋转
当图表转换到其中一个入口端口时,子图变为活动状态。
在子图中,每个输入端口都有一个匹配的输入连接点。从这些入口连接到状态的转换旋转
设置本地数据对象的值方向
来1
或-1
.这个值告诉机器人是顺时针转还是逆时针转。然后,国家条目
Action调用旋转
函数中的机器人
图表。这个函数将机器人的运动方向改变一个角度*方向角
.的参数角
指定为π/ 4
在映射选项卡的子图属性对话框。有关更多信息,请参见为原子子图和方框映射变量.
从子图中创建多个退出连接
链接的原子子图移动
包含两个有标签的出口端口完成
和打击
.在子图中,每个出口端口都有一个匹配的出口连接点。在模拟过程中,状态在子状态中运行向前
调用移动
函数中的机器人
图表。这个函数将机器人的位置改变一段距离一步
,指定为0.1
在映射选项卡的子图属性对话框。如果函数障碍
表示机器人与障碍物发生碰撞,机器人返回到最后的安全位置,并使用出口端口从子图过渡打击
.否则,机器人将继续向前移动整整一秒钟,并且图表将通过使用出口端口从子图中移出完成
.
类似地,链接原子子图ContactDock
包含两个出口端口,CloserToDock
和FartherFromDock
.在子图中,每个出口端口都有一个匹配的出口连接点。在模拟过程中,状态在子状态中运行ContactDock
调用distanceToDock
函数中的机器人
图表。这个功能决定了机器人到对接站的距离。如果该距离在最后一个时间步骤中减小,则图表将使用出口端口从子图中移出CloserToDock
.否则,图表将通过使用出口端口从子图表中转换出来FartherFromDock
.
模拟物理环境和障碍赛
的机器人
图表维护机器人的位置和方向。该图表还导出了几个功能,用于移动和旋转机器人,确定机器人到码头的距离,以及检测障碍物。通过调用这些函数线路控制
图表从不与机器人的位置和方向直接交互。
掩码参数起始位置(x,y)和起始方向(0点钟方向)的值。startPos
和startDir
.要修改这些值,通过双击块参数打开块参数对话框机器人
图表。有关更多信息,请参见创建一个掩码与Simulink共享参数金宝app.
工作空间变量码头
,dockWidth
,圈
,盒子
指定对接站的位置和大小以及它周围的障碍物。
码头
是一个双元素向量,指定码头的水平和垂直坐标。dockWidth
是指定dock宽度的标量。圈
是一个- × 3矩阵,指定每个圆形障碍物的水平坐标、垂直坐标和半径,其中是圆形障碍物的个数。盒子
是一个- × 4矩阵,该矩阵指定每个矩形障碍物的水平坐标、垂直坐标、宽度和高度,其中是矩形障碍物的个数。
障碍赛道可以包含任意多个障碍物,但必须至少包含一个圆形和一个矩形障碍物。默认情况下,PreLoadFcn
本例中模型的回调函数定义了一个带有三个圆形障碍物和三个矩形障碍物的障碍跑道。
在库中打包可重用组件
的机器人
chart是从Simulink库模型链接而来的库图表金宝appsfRobotExampleLib.slx
.该库包括一个集所有功能于一身的工具包,该工具包定义了该图表以及用于编程您自己的机器人仿真的链接原子子图表。有关更多信息,请参见自定义库(金宝app模型).
机器人轨迹
图表情节发展轨迹
读取工作空间变量码头
,dockWidth
,圈
,盒子
,以及输出信号x
和y
从机器人
图和完成
从线路控制
生成障碍物路线的视觉表示,以及机器人在寻找码头时所采取的路径。
当您开始模拟时,图表将调用辅助函数sfRobotScene
创建一个MATLAB®图形,以绿色显示对接站,以红色显示障碍物。这个函数的代码出现了在这个例子的最后.然后,在模拟的每一步,图表用蓝色圆圈标出机器人的位置。当输入信号完成
表示仿真结束,图表绘制出机器人的最终位置,并设置输出信号的值停止
来真正的
,导致停止
块来结束模拟。
打电话给sfRobotScene
,情节
,持有
作为外部函数,图表使用coder.extrinsic
(金宝app模型)函数。有关更多信息,请参见在状态流程图中调用外部MATLAB函数.
显示障碍赛的元素
辅助函数sfRobotScene
创建一个MATLAB图形,显示绿色的对接站和红色的障碍物。
函数sfRobotScene(码头、宽度、盒、圆)情节(nsidedpoly(8中心=码头半径= 2 *宽度),FaceColor =“绿色”);Daspect ([1 1 1]) hold住在为I = 1:高(圆)心=圆(I,1:2);半径=圆(i,3);情节(nsidedpoly(中心为中心,半径=半径),FaceColor =“红色”);结束为I = 1:height(boxes) box = boxes(I,:);X =[盒子(1)盒子(1)+盒子(3)盒子(1)+盒子(3)盒子(1)];Y =[盒子(2)盒子(2)盒子(2)-盒子(4)盒子(2)-盒子(4)];情节(polyshape (X, Y) FaceColor =“红色”);结束FIG = gcf;fig.Name =“机器人障碍赛”;fig.NumberTitle =“关闭”;图(图)结束
另请参阅
情节
|持有
|coder.extrinsic
(金宝app模型)