查看“调度内核运行原理”的源代码
←
调度内核运行原理
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
管理员
您可以查看和复制此页面的源代码。
SimpleCore保证静态的任务和路线一定能够完成,从而简化了机器人车队调度的开发困难。静态指路线一旦下发一般不会改变,交管保证满足该路线一定能执行到位且不会发生死锁(即通过死锁预防算法),相对于“解死锁”方法,“死锁预防”方法可以满足在大量工业场景中的工艺需求,如过风淋门、叉车等不允许折返的场景。当然,SimpleCore也支持动态更改路线的需求。所有路线的增加和变更都会进行交通规划计算,保证场景的正常运行。SimpleCore也提供了多种方便路线设计和变更的机制。 === 交管计算原理 === SimpleCore使用动态规划和搜索方法(DPS算法)进行交通管制。首先使用动态规划计算双车间的通行矩阵,然后在实际车辆需要上锁时,通过进行剪枝的搜索算法进行多车死锁可能性检测并决策。详细的算法可以参考[[DPS调度算法详解]]。 用户可以完全不再关注交管,DPS算法几乎在所有情况下得到正确交管顺序。不过由于算法的取向较为保守,可能在多车长路径交管冲突上选择要求人工介入判断,也可通过调整参数强制要求算法自动判断。 === 可编程的路径搜索算法 === 在SimpleCore框架中,路径搜索算法采用了一种高度可编程的方式,通过Heuristics(启发式)系统来实现灵活的路径规划。其核心是基于A''算法的变体,结合了反射机制和特性(Attribute)系统,''这种设计允许开发者为不同类型的车辆和场景定制搜索行为,而不需要修改核心搜索算法。详细的对路径搜索用法可见[[使用手册 - 寻路启发器功能|使用手册 - 寻路启发器功能 - MDCS wiki]]。 系统采用的是启发式优先搜索算法(类似A*''),通过以下关键组件实现:'' * 优先队列(Heap):维护待探索节点,按优先级(代价+启发值)排序 * 上下文信息(SearchStat和Container等):表示搜索状态,包含当前位置、累计代价、优先级、路径信息、状态标记等 * 启发式函数:通过自定义方法计算节点的评估值,指导搜索方向 === 路径编译 === 路径编译器将计划路线(表示为站点和路线的序列)转换为 AGV 可以理解和执行的可执行代码。这种转换过程可通过模板或插件的方法完成,类似于编译器。其使用方法见:[[使用手册 - Simple:coder(路径编译器)机制详解|使用手册 - Simple:coder(路径编译器)机制详解 - MDCS wiki]] 路径编译的方法允许: * 车辆特定行为:不同的车辆类型可以有不同的代码生成策略 * 站点特定操作:在特定站点的特殊操作(如装载/卸载,调整避障范围,或者为了解决一致性问题对站点微调等) * 轨道特定参数:速度控制、方向控制等 * 复杂条件:可以使用javascript或者c#程序判断复杂条件(如一口气生成全向磁导航车的控制序列) === 总体任务逻辑 === [[文件:Snipaste 2023-12-21 00-04-09.jpg|缩略图|下发任务流程图]] 下发任务时,首先进行寻路,如通过FindRoute生成一个SegmentPlan,或者手动构造一个SegmentPlan。然后调用Compile方法得到CarProgram。Compile方法默认会做交管规划,若在参数中给了forecast:false,接下来可以Append多个SegmentPlan来继续延长路线并增加事件。 无论Append与否,由于CarProgram需要做交管规划,若参数中给了forecast:false,则需要调用Forecast。调用Forecast时可以给一个escape参数,为一个SegmentPlan,用来设定逃逸路线,该路线只参与交管规划而不执行(可参见交管规划原理)。最后需要调用Queue进行提交。 CarProgram一旦经过规划,必须提交,否则不允许后续生成针对该车的CarProgram。执行期间和Simple设计的交互几乎仅限于交管,详见[[AGV任务运行逻辑|AGV任务运行逻辑 - MDCS wik]] 对于每个车,当前运行的CarProgram执行完毕后,可以继续执行下一个CarProgram。 === 总结 === SimpleCore调度将'''AMR调度转换为“图的资源占用与释放”问题。'''首先启发式深度优先搜索寻路,可同时搜索可行区域、进行热力计算,并做好流量分配。资源(站点)获取顺序动态规划预计算,执行任务前通过动态规划预先搜索通行顺序的解空间,可通过包络、可达性预计算避免车体和静物之间的物理冲突。最后资源(站点)序列编译为动作脚本,而动作脚本可以完全离线执行,机器人仅在资源上锁/解锁时需要与调度通信。这使得本预计算集群调度具有以下优势: # 高抽象化 将AMR调度的底层数学问题剥离,软件工程架构更有优势。更容易针对不同车型和业务场景进行交付适配,可应对业务和资产快速变更的时代需求。 # 高适用性 自动通行顺序预计算,无需针对不同业务场景人工配置交管规则。 # 低通信复杂度 通信次数极低。AMR的任务已经预计算,网络波动时,不会导致AMR动作失控,AMR将在网络恢复后接续最新交管信息。 # 低算力需求 相对于“遥控作业型”调度,预计算调度的算力需求低。数百台AMR的交管可在普通个人电脑上运行,无需高配置的服务器工作站。
返回
调度内核运行原理
。
导航菜单
个人工具
中文(中国大陆)
创建账号
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息