夜光精讲 Opentcs 三大算法(九)任务分配算法
夜光序言:
死亡是活过的生命,生活是在路上的死亡。
正文:
任务优先级
夜光分析可知,任务优先级顺序为:充电任务(电量低于criticallevel时)>充电任务(电量低于good level时)>订单任务>充电任务(电量高于good level时)>停靠任务。
因此停靠任务的优先级最低,且可以删除回退该任务。
子任务的生成
由仓库运作模式可知,典型电商仓库中的任务可以分为三个阶段的子任务:
阶段①状态:小车在去往抬取货架的途中
阶段②状态:小车处于运载货架至分炼台/补货台的途中
阶段⑤状态:小车处于送货架回存储区的途中
三个状态对应的是轨迹为:
阶段①轨迹:小车从当前所在点curPoint运行至货架所在货位ShelfPointStation
阶段②轨迹:小车从ShelfPoinstation处运载货架至操作台endPoin station
阶段③轨迹:小车将货架从操作台endPoin stati o n送回至存储区为此,我们可以将一个任务拆分成多段任务,方便和后续任务进行整合,提高任务分配和执行效率。
毎次执行阶段③子任务前,进行判定是否需要将货架进行移库或者该货架同时被其他操作台所需,此时阶段③任务应推后执行。
子任务中增加operation字段
为子任务中增加operation字段,可以指导小车该进行什么操作,完成相关操作后发送确认完成指令。
当小车完成一个工单的时候,在任务表中查询是否有该小车需要执行其它的任务,有则调用dispatch_order()分解任务,让小车执行。
特殊情况的任务
针对特殊情况要进行相应的处理和决策,确保系统柔性地执行任务功能,允许AGV在运行过程中动态地变更运输任务。
1.查询订单货物所在货架的状态
(1)查询巧单,检测货架是否在运输过程中,调用另一个函数接口,根据状态向小车发送不同指令:
a.小车如果取货架过程中或送货架至分炼台过程中,给小车发送一个送到货之后就完成任务的请求(结束当前任务并开始新的任务,如果没有对应货架的任务就原路返回);
b.小车送回货架途中,就停止操作(带货架停止操作),并调用dispatch_order()函数计算路径,分派特殊的新任务给此车)并返回对小车的操作状态。同时在任务里面加上新任务的ID,任务的起始和终止点也需要变更下,小车完成当前订单后,去数据库查询有没有新的任务的I D。
C.货架不在运输过程中调用函数Task_list*d i spatch_order(Order*transOrder,Vehicle_list*carall)。
后台程序要将任务列表插入到数据库表。