主要内容

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

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

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

提供的Simulink模型金宝app,multiRobotExampleModel,对上述场景进行建模。

中央调度器

中央调度器使用状态流图来处理从包分发器.每个机器人一次可以携带一个包裹,并根据每个包裹所需的位置被指示从装货站前往卸货站。调度器还跟踪包和机器人的状态并更新状态指示板.调度程序还根据机器人的姿态,在检测到即将发生碰撞时向机器人发送停止命令。这种行为可以让机器人在可行的情况下进行局部避障。

对于每个机器人和包状态子系统是一个为每个子系统(金宝app模型)哪个处理跟踪机器人和包状态的总线数组RobotPackageStatus总线对象。这使得为不同数量的机器人更新这个模型变得很容易。有关使用For- each子系统处理总线阵列的详细信息,请参见使用总线阵列(金宝app模型)

调度器

下面的原理图详细说明了该信号的值调度器Stateflow图表。

机器人控制器

机器人控制器使用一个为每个子系统(金宝app模型)为您的5个机器人生成一个机器人控制器数组。

下面的原理图详细说明了信号值的类型对于每个机器人控制器

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

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

机器人控制器模型使用相同的模型,warehouseTasksRobotSimulationModel所示,为仓库机器人执行任务

植物

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

模型设置

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

定义仓库环境

逻辑类型矩阵,logicalMap表示仓库的占用地图。仓库包含了代表墙壁、货架和其他处理站的障碍物。加载、卸载和充电站也给出了xy坐标。

负载multiRobotWarehouseMap.matlogicalMaploadingStationunloadingStationschargingStationswarehouseFig =图(“名字”“仓库设置”“单位”“归一化”“OuterPosition”,[0 0 1 1]);可视化仓库(仓库图,逻辑图,充电站,卸货站,装载站);

图形仓库设置包含一个坐标轴对象。标题为Warehouse Map的轴对象包含46个类型为patch, line, image, text的对象。

检查车站占用情况

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

地图= binaryOccupancyMap (logicalMap);如果(任何(checkOccupancy(地图,[chargingStations;loadingStation;unloadingStations])))错误(“地图上至少有一个车站位置被占用。”结束

中央调度器

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

定义包

包裹是作为一个数组的指数数字的各个卸料站,包裹应该被送到。因为这个例子有三个卸货站,一个有效的包可以取值为1、2或3。

负载packages.mat
包=1×113 2 1 2 3 1 1 1 2 3 1

数量的机器人

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

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

碰撞检测和目标达到阈值

中央调度器机器人控制器使用特定的阈值进行碰撞检测,collisionThresh,以及达到目标的条件,awayFromGoalThresh

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

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

负载exampleMultiRobotParams.matawayFromGoalThreshcollisionThresh

总线对象

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

负载warehouseRobotBusObjects.matRobotDeliverCommandRobotPackageStatus

模拟

打开Simulin金宝appk模型

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的对象。

可视化

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