多机器人控制与资源分配和冲突管理
这个例子展示了如何控制多个机器人工作在一个配送中心,以及如何轻松地配置一个分布系统。机器人导航设施和完成多个任务同时利用算法从博弈理论来优化机器人之间的任务分配和使用基于网格的流量管理器解决冲突。这个示例基于覆盖的信息控制和模拟多个仓库的机器人例子,这导航多个机器人在一个类似的设施,但是这个例子使用自定义算法。
这个示例使用包裹分检的情况下,multiRobotTaskingRouting
模型,它一直在建模仿真软件使用Stateflow®®图表、SimE金宝appvents®,和机器人系统工具箱™。的配置管理器
子系统的代理
部分的模型将任务分配给机器人,指引他们挑选和地方对象仓库内跨多个选择和地点。为每个机器人,实现最优分配这个子系统完成每个任务重的成本为每一个机器人。的冲突管理与动态
子系统规划机器人的轨迹,解决冲突,并生成速度指令的机器人。这些命令连接到机器人建模使用差动式驱动机器人模型,执行速度命令和输出的实时姿态机器人。模型可视化这些姿态和发送他们配置管理器
和冲突管理与动态
子系统,选择最优的机器人来分配下一个任务。
打开multiAgentTaskingRouting
金宝app仿真软件模型,该模型使用的场景与SimEvents世界和代理沟通。
open_system (“multiRobotTaskingRouting”)
配置管理器
的配置管理器
子系统包含一个经理来管理任务和代理完成这些任务。的任务管理器
块是一个仿真软件总线元金宝app素管理每个任务的状态。元素定义和建立仿真软件模型的初始化过程的一部分,一旦数量的代理和包被定义。金宝app
的状态
图表对象的属性任务
通过各种状态由一个状态机转换使用Stateflow与这个过程图:
如果一个代理闲置或达到一个空闲状态,他们没有分配任务,等待任务。
如果任务管理器分配一个任务包含源和汇给代理,代理首先试图达到源构成,然后沉构成。
当代理已达到源体式和水槽,任务也就完成了。
如果任务被取消,而代理也试图达到姿势,代理停止并返回一个未派职务的空闲状态。
在未赋值的
状态,任务分配人试图使用组合算法,贪婪,拍卖,或Munkres最优任务分配给任何可用的机器人。设置agorithm,打开配置管理器
子系统面具和设置分配算法参数TaskingAlgorithm.Greedy
。
每个机器人都被表示为一个代理人,定义为一个仿真软件总线模型中的元素初始化脚本。金宝app
的状态
图表对象的属性代理
通过各种状态由一个状态机转换使用Stateflow与这个过程图:
代理没有任务分配,是可用的。
任务管理器分配代理任务。
代理保持忙碌,直到它完成了任务,并成为闲置和可用的。
如果代理变得破碎,它仍然在破碎的状态,直到技术人员修理。
如果修复破碎的代理,一遍。
创建环境
在执行代理之间的冲突管理之前,您必须定义环境。的WarehouseMapEditor
helper函数启动一个用户界面,使您能够创建一个占用地图和修改它通过添加或删除加载、卸载,和充电区域以及障碍。运行这个helper函数打开UI和创建一个地图。
WarehouseMapEditor
ans = WarehouseMapEditor属性:名称:“标题:”CloseMode:“取消”IsVisible: 1 IsWidgetValid: 1
首先,指定一个占用地图的基本价值观。点击创建地图创建映射在情节窗格中。默认情况下,地图是60-by-60米。您可以使用的控制将对象添加到地图面板中定义的位置加载,卸载站,充电站和障碍。您可以使用基地代理属性面板配置机器人。
点击加载现有地图并选择customWarehouseMap
。
地图是一个矩阵的逻辑值占用地图包含的所有信息,如障碍和充电站的位置。
冲突管理
一旦配置管理器
机器人子系统分配具体任务,下一步是计划路线为他们从源到目标位置。使用冲突管理器,您现在可以为机器人规划多条路径通过最小化成本达到目标位置。找到最优路径,您可以使用任何基本的路径规划算法,如*,或Dijkstra算法。在本例中,您使用网格中的A *算法路径规划在管理代理之间的冲突和更新成本。
模拟
运行模型观察的指标体系。
sim卡(“multiRobotTaskingRouting”);
关闭模式。
close_system (“multiRobotTaskingRouting”,0)