此示例示出了如何控制和模拟多个机器人在仓库设施或配送中心工作。机器人带动周边设施拿起包,并提供他们站进行存储或处理。这个例子建立在顶部执行任务的仓库机器人例如,驱动围绕同一设施的单个机器人。
这个包排序情况可以使用的Simulink Stateflow图和机器人系统工具箱™算法块来模拟。万博1manbetx一个中央调度发送指令给机器人拿起从包装载站并提供给特定的卸载站。该机器人控制器计划基于所述装载和卸载站的位置的轨迹,并为机器人产生速度命令。这些命令被送到厂,它包含用于执行速度指令和返回机器人的地面实况姿势差分驱动机器人模型。姿态被反馈给调度和控制器,用于跟踪所述机器人的状态。这个工作流程是一组5个机器人,这是所有调度,跟踪,同时模拟完成的。
所提供的Simulink模万博1manbetx型,multiRobotExampleModel
,车型上面描述的场景。
中央调度使用Stateflow的图表手柄包分配从机器人包装分配器。每个机器人可以一次进行一个封装和指示从装载到去基于每个包所需的位置卸载站。调度还跟踪包和机器人和更新的状态状态仪表板。基于机器人的姿势,调度器还发送停止命令到一个机器人当它检测到即将发生的碰撞。这种行为可以允许如果可用机器人来运行本地避障。
该为每个机械手和包状态子系统是每个子系统其处理总线的阵列,用于跟踪机器人和封装状态如RobotPackageStatus
总线对象。这可以很容易地更新这个模型不同机器人的数量。有关使用处理总线的阵列的更多的信息的用于-每个子系统,见与公交车的阵列工作(万博1manbetxSIMULINK)。
下面的示意图详细说明的信号值调度Stateflow的图表。
该机器人控制器使用每个子系统生成机器人控制器的为你的5个机器人的阵列。
下面的示意图细节信号的类型的值与相关联的对于每个机器人控制器。
各机器人控制装置具有以下的输入和输出。
该控制器采用发送命令,其中包含包信息,并计划路径使用提供它有人在仓库mobileRobotPRM
。该单纯追求块借此路径和访问每个路点产生速度命令。此外,机器人和包的状态得到当机器人到达其目标更新。每个机器人还具有其自己的内部调度器,告诉他们基于所述包信息卸载站的位置,并且当它们落包发送回到装载站。
机器人控制器模型使用相同的模型,warehouseTasksRobotSimulationModel,
所示执行任务的仓库机器人。
该厂子系统使用一差分驱动运动模型阻止对机器人的运动模型。
开始设置各种变量在MATLAB®的模型。
逻辑型基质,logicalMap
表示仓库的占用地图。仓库包含代表的障碍墙,货架等处理站。加载,卸载,和充电站也中给出XY坐标 - 。
加载multiRobotWarehouseMap.matlogicalMaploadingStationunloadingStationschargingStationswarehouseFig =系数('名称',“仓库设置”,'单位',“标准化”,'OuterPosition',[0 0 1 1]);visualizeWarehouse(warehouseFig,logicalMap,chargingStations,unloadingStations,loadingStation);
确保站未在地图占据。
MAP = 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 =尺寸(chargingStations,1);%每个机器人具有其自己的充电站;
该中央调度和机器人控制器使用某些阈值碰撞检测,collisionThresh
和目标达成情况,awayFromGoalThresh
。
碰撞检测确保了一定的距离阈值内的任意一对机器人,具有较低折射率的机器人应该允许移动,而其他的机器人应该停止(零速度指令)。静止移动机器人应该能够避免在他们的道路本地静态障碍物。你可以用像其他低级别的控制器实现这一目标vfh算法块。
如果机器人是一个距离阈值内发生的目标的达成状况,awayFromGoalThresh
从目标位置。
加载exampleMultiRobotParams.matawayFromGoalThreshcollisionThresh
该RobotDeliverCommand
和RobotPackageStatus
总线对象用于传递之间机器人包分配中央调度和机器人控制器。
加载warehouseRobotBusObjects.matRobotDeliverCommandRobotPackageStatus
打开Simulin万博1manbetxk模型。
open_system(“multiRobotExampleModel.slx”)
运行模拟。您应该看到机器人赶进度路径和投递包裹。
SIM('multiRobotExampleModel');
###启动串行参考模型模拟生成###已成功更新模型参考模拟目标为:robotController
对于每个包,在模型中示出了仪表板,如果包是“INPROGRESS”,“未分配”,或“传递”。机器人状态显示行进的距离,包的位置,以及封装ID。
这种模式是建立处理修改机器人的基于可用性的仓库数量。添加更多的机器人,需要定义额外的充电站。
chargingStations(6,:) = [10,15];%充电站额外的6机器人chargingStations(7,:) = [10,17];%充电站的附加第7机器人
您还可以添加更多的卸载站和包分配给它。
unloadingStations(4,:) = [30,50];包= [包,4,4,3 1];
额外差分运动模型块也需要匹配机器人的数量。该exampleHelperReplacePlantSubsystem
通过更新增加了这些numRobots
。
numRobots =尺寸(chargingStations,1)%如前,每个机器人具有其自己的充电站
numRobots = 7
exampleHelperReplacePlantSubsystem('multiRobotExampleModel /机器人',numRobots);
您也可以重新定义任何现有的位置。修改装载站的位置。
loadingStation = [35,20];
使修改后,再次运行模拟。你应该看到更新的车站位置和机器人的数量增加。
SIM('multiRobotExampleModel');
###启动串行参考模型模拟生成###已成功更新模型参考模拟目标为:robotController
该可视化助手提供了改变仓库的视图一些选项。打开阻挡掩模各种开关之间预设视图不同的站。切换路径的可视化或更新机器人网格类型。调整采样时间来改变可视化,从而不影响实际的机器人仿真的执行速度。