OpenTCS打造移动机器人交通管制系统(六)

       上一篇谈到了OpenTCS的调度策略问题。并提出了关于自带算法的"死锁"的问题。

当时提出了下面两种改进的方法:

1、错开订单的下发。

2、改进调度资源分配算法,将双向路径考虑到资源分配的过程当中。

         方法1显然是可以解决的前文提到的死锁问题的,但是有点别扭,也有点low,因此笔者尝试从算法层次着手改进。

我们拓展上一篇文章提出的地图,将其拓展如下:

(地图画的有点乱,懒得整理了,将就看吧)

在算法改进之前,如果同时存在两个订单,订单的内容为:

1号车要从Location-0002前往Location-0001,2号车要从Location-0003前往Location-0004.

那么就会出现会死锁,死锁的位置会随机发生在点6到Point-0008之间。为什么会出现这种情况呢?其实前一篇文章已经谈到了,OpenTCS默认的算法是基于"前馈锁路"的方式进行交通管制的(查看上一篇)。

而且OpneTCS锁定资源的粒度是MovementCommand.也就是一个运动步,这一点在OpenTCS的文档中也已经说明。但是这种算法对于这种双行线是很容易出现死锁的,因为一辆车只要进入了这种通道,那么如果另外一辆车再进入此通道,那么必然会"狭路相逢",产生死锁。

为了改进此问题,提出一种算法,即:

改进调度资源分配算法,将双向路径考虑到资源分配的过程当中。

算法的原理是:动态修改调度的粒度(之前的粒度是一个MovementCommand).对于双向单通道的路段,动态拓展锁定的粒度。

效果如下:

算法仿真测试

本篇就到这了,大家如果对调度算法有独特的见解,或者对OpenTCS的调度算法有深入的研究,也可以一起探讨哈。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章