主要内容

控制和模拟多个仓库机器人

这个例子展示了如何控制和模拟在仓库设施或配送中心工作的多个机器人。机器人在工厂周围开车,拾取包裹,并将它们送到车站进行存储或处理。这个例子建立在为仓库机器人执行任务例如,它驱动一个机器人在同一设施周围运行。

此包裹排序方案可以使用状态溢图和机器人系统工具箱™算法块在Simulink®中进行建模。万博1manbetx一种中央调度器向机器人发送命令以从中获取包裹装载站把它们送到一个特定的卸货站.的机器人控制器根据装卸站的位置规划轨迹,生成机器人的速度指令。这些命令被提供给植物,其中包含一个差动驱动机器人模型,用于执行速度命令和返回机器人的地面真实姿态。将姿态反馈给调度程序和控制器来跟踪机器人的状态。这个工作流程是为一组5个机器人完成的,它们都是同时被安排、跟踪和建模的。

提供的Simulink模型万博1manbetx,multiRobotExampleModel,模拟上述场景。

中央调度器

中央调度程序使用StateFlow图表来处理来自的机器人的包分配包裹分配器.每个机器人一次可以携带一个包裹,并根据每个包裹所需的位置被指示从装货站前往卸货站。调度器还跟踪包和机器人的状态并更新状态指示板.基于机器人姿势,调度程序在检测到迫在眉睫的碰撞时也会向一个机器人发送停止命令。如果可用,此行为可以允许机器人运行本地障碍避免。

对于每个机器人和封装状态子系统是一个为每个子系统(万博1manbetx模型)哪个总线阵列用于跟踪机器人和包状态RobotPackageStatus总线对象。这使得为不同数量的机器人更新这个模型变得很容易。有关使用For- each子系统处理总线阵列的详细信息,请参见与公共汽车阵列一起使用(万博1manbetx模型)

调度程序

以下示意图详细信息了信号值调度程序Stateflow图表。

机器人控制器

机器人控制器用A.为每个子系统(万博1manbetx模型)为5个机器人生成一系列机器人控制器。

以下示意图详细说明了与之相关的信号值的类型对于每个机器人控制器

每个机器人控制器有以下输入和输出。

控制器占用包含包信息的传递命令,并计划将某人在仓库中传递某人的路径Mobilerobotprm..的纯粹的追求块采用此路径并生成访问每个路径点的速度命令。此外,当机器人达到目标时,机器人和包的状态也会更新。每个机器人也有自己的内部调度程序,根据包裹信息告诉他们卸货站的位置,并在他们放下包裹时将它们送回卸货站。

机器人控制器模型使用相同的型号,WarehouseTasksrobotsimulationModel.,显示在为仓库机器人执行任务

植物

植物子系统使用差动驱动运动学模型块来模拟机器人的运动。

模型设置

开始在MATLAB®中设置各种变量进行模型。

定义仓库环境

逻辑类型矩阵,logicalmap.代表仓库的占用地图。仓库包含代表墙壁,货架和其他处理站的障碍物。还提供装载,卸载和充电站XY.- 控制。

负载multiRobotWarehouseMap.matlogicalmap.加载卸载音充电音warehousefig = figure(“名字”'仓库设置''单位'“归一化”'offormosition',[0 0 1 1]);Visualized软件(WarehouseFig,LogicalMap,ChargingStations,卸载),加载节);

图仓库设置包含轴对象。带有标题仓库地图的轴对象包含46个类型的曲线,行,图像,文本的对象。

检查车站占用情况

确保地图上的站点没有被占用。

地图= BiniaroCcupAccemap(LogicalMap);如果(任何(CheckCocupancy(Map,[ChargingStations; LoadingStation;卸载)))错误(“至少一个车站位置被占用在地图中。”结束

中央调度器

中央调度器要求了解要交付的包裹,以便将交付命令发送给机器人控制器。

定义包

包装作为套件要传递给的各种卸载站的索引号阵列。因为此示例有三个卸载站,所以有效的包可以取1,2或3的值。

负载包裹.mat
包=1×11.3 2 1 2 3 1 1 1 2 3 1

数量的机器人

机器人的数量用于确定初始化过程中各种信号的大小调度程序Stateflow图表

numrobots = size(chargingstations,1);每个机器人都有自己的充电站;

碰撞检测和目标达到阈值

中央调度器机器人控制器使用某些阈值进行碰撞检测,collisionThresh和目标达成的条件,避免从法降量

碰撞检测确保在一定距离阈值内的任意一对机器人,允许指标较低的机器人移动,另一个机器人停止(零速度命令)。仍在运动的机器人应该能够避开其路径中的局部静态障碍。您可以通过另一个低级控制器来实现这一点,例如向量场直方图(导航工具箱)块。

当机器人在距离阈值范围内时,达到目标条件发生,避免从法降量,从目标位置。

负载examplemultirobotparams.mat避免从法降量collisionThresh

总线对象

RobotDeliverCommand.RobotPackageStatus总线对象用于在中央调度器机器人控制器

负载warehouseRobotBusObjects.matRobotDeliverCommand.RobotPackageStatus

模拟

打开Simulin万博1manbetxk模型

Open_System(“multirobotexamplemodel.slx”

运行仿真。您应该看到机器人驱动计划路径和交付包。

sim卡('multirobotexamplemodel');
###启动serial model reference simulation build ###成功更新了model reference simulation target for:模型重建行动的原因  ========================================================================================== robotController robotController_msf代码生成和编译。Mexa64并不存在。建造时间:0小时2米4.3063秒

图中包含一个轴对象。标题为“二进制占用网格”的轴对象包含46个类型为patch、line、image、text的对象。

度量标准和状态仪表板

对于每个包,模型中的仪表板显示包是“InProgress”、“Unassigned”还是“Delivered”。机器人状态显示行驶距离,包位置和包ID。

扩展模型

该模型是根据可用性来处理修改仓库中的机器人数量。添加更多机器人需要定义额外的充电站。

充电音(6,:) = [10,15];%增加的第6个机器人充电站充电站(7,:)= [10,17];额外的第7个机器人的收费站

您还可以添加更多卸载站并将包分配给它。

unloadingStations(4,:) = [30,50];包=[包,4,4];

额外的差分运动模型块也需要匹配机器人数量。的examplehelperreplaceplantsubsystem.通过更新添加这些numRobots

numRobots = size(充电站,1)%如之前,每个机器人都有自己的充电站
numRobots = 7
exampleHelperReplacePlantSubsystem ('MultirobotexampleModel /机器人', numRobots);

您还可以重新定义任何现有位置。修改装载站位置。

loadingstation = [35,20];

模拟

在修改后,再次运行模拟。您应该看到更新的电台位置和增加的机器人数量。

sim卡('multirobotexamplemodel');
###启动serial model reference simulation build ###成功更新了model reference simulation target for:模型重建行动的原因  ============================================================================================== robotController代码生成和编译全局变量unloadingStations已经改变了。建造时间:0小时1米4.1706秒

图中包含一个轴对象。标题为“二进制占用网格”的轴对象包含61个类型为patch、line、image、text的对象。

可视化

可视化辅助提供更改仓库视图的一些选项。打开块掩模,在各种之间进行切换预设视图不同的车站。切换路径可视化或更新机器人网格类型。调整样品时间改变可视化的速度,不影响实际机器人仿真的执行。