Bootstrap

AGV调度:路径规划

        这是我在参与AGV调度系统开发工作中形成的一些认识,是我的个人观点,想到什么写到什么。我自己也在学习,有不同观点可以一起讨论,由于涉及企业知识产权,所以我不会写具体实现以及一些核心的定制化的算法,文章内容仅供参考。

        AGV调度系统的路径规划通常是在已有的路径图上进行路径搜索规划,区别于此的是在自由空间上的路径规划。

        AGV的路径规划模块通常是提供AGV路径规划所需要的规划算法的模块,之所以独立成模块,而不是提供一个算法工具包DLL是因为路径规划中通常会涉及一些状态的使用。例如车辆的交管热力图,地图的区域配置以及库位货物信息等。所以独立成一个模块更利于状态的保存与获取,这样设计会更合理一些(?)。

        在不考虑库位及交管信息的情况下,通常AGV路径规划是需要提供一个规划接口的,这个接口传入规划起点和终点,返回规划出的路径线的数组。这个接口调用规划模块里面的具体实现。

        路径规划依赖于现场的地图,有些时候,为了避免单张地图过大,会对地图分区域。那么路径规划首先会根据任务的起点和终点以及车号,加载同时含有上述3者的区域地图(一般会做缓存)。

        在加载完地图之后就可以调用A*、双向A*、D*或者Dijkstra之类的算法去进行路径规划。这里需要注意一点,为使几种算法结果保持一致,同时也为了规划出的路径更合理,对于曲线以及变向线之类的需要增加其代价,否则启发式算法得到的解很可能不是最优的,会找出长度一样,但是多次变向的路径。另外对于双向A*算法,就算调整了代价,得到的也很可能不是最优解,这个后续说A*与双向A*算法的时候再分析。

        对于交管解锁的场景的时候,经常会频繁计算两点之间的规划距离以提供解锁的启发方向,这个时候规划模块还需要提供一个全局连通矩阵,这个矩阵不需要考虑状态,只需要快速给出两点间距离以避免每次都进行路径规划。这时候需要使用Flody算法或者多次堆优化Dijkstra算法在地图初始化的时候去生成这个矩阵。实践证明,使用多次堆优化Dijkstra算法来生成这个矩阵要比Flody算法的快的多(我的实现测下来差距是50倍)。

 

        

;