帮助中心
帮助中心主页
调度系统介绍
回调
新分组
拼合单
运单
动作块策略
交管策略

交管方法有一个输入参数planDistance,是每次交管提前规划小车行走的距离,默认值为5米。当小车处于路段的起点时,如果要行驶到路段的终点,首先判断以下四个条件是否都满足
1)路段的终点没有被其他小车占用
2)路段没有被其他小车占用
3)行驶到路段终点的过程中不会和其他小车发生碰撞
4)行驶到路段终点的过程中不会和其他小车发生死锁
如果上述条件都满足,则需先把该路段和路段的终点占用,小车才能拥有该路段,从而可以行驶到路段的终点。当小车在路段上行驶过一段指定距离时,把该路段的起点释放,这个指定距离通常设置为小车的最大长度+安全边际+定位误差。当小车行驶到路段的终点时,把该路段释放。释放后其他小车才能拥有该资源。交管的基本原则是一个被占用的站点或路段不能分配给其他小车。在planDistance距离之内,规划到小车能够行驶到的最远站点,途中的站点和路段都分配给这辆小车。交管的过程就是不断占用和释放的过程。
如图1所示,在T1时刻,小车当前站点位于P1,通过计算,在planDistance距离之内,小车可以行驶到站点p4,则把站点p8,路段SEG1,站点P4以及路段SEG2占用。在T2时刻,小车在路段SEG1行驶过一段距离,如果这个距离大于指定距离,则把路段的起点P1释放。在T3时刻,小车到达路段SEG1的终点P8,则把SEG1释放。在未到达之前规划的终点P4之前,通过计算,小车可以继续行驶到站点P6,则把站点P5,路段SEG3,站点P6以及路段SEG4占用,如T4时刻所示,从而保证小车可以顺畅的运行。在T5时刻,小车到达路段SEG2的终点,则把站点P8和SEG2释放。如此重复上面的步骤,直到小车到达路径的终点为止。

图1
交管举例分析
1)有避让点的情况
如图2所示,图中都是双向路段,黄色点5是避让点,如果小车1当前点在24,路径是24->3->4->8->6->23->2>26->25,另外一辆小车2当前点在25,路径是25->26->2->23->6->8->4->3>24。则小车1行驶到站点6时,就不能继续行驶到站点23,因为会和小车2发生死锁(死锁的判断:小车1占用了小车2将要行驶的路径,且同时小车2也占用了小车1将要行驶的路径),则小车1在站点6时会更新路径到避让点5,此时如果小车2行驶到站点23,也不会继续行驶到站点6,因为站点6被小车1占用,等到小车1行驶到避让点5时,释放了站点6,这时小车2才能从站点23行驶到站点6,然后等到小车2行驶到站点8时,如果站点6和站点8有冲突(通过碰撞检测计算是否有冲突),则小车1继续在避让点5等待,小车2继续行驶到站点4,如果站点4和站点6没有冲突,则小车1从避让点5出来继续原路径行驶。
如果站点6那里没有避让点5,则小车1在当前站点24时就会判断出即将和小车2发生死锁,那么有一辆车需要更新路径到其他避让点,哪一辆车更新路径取决于谁离最近的避让点更近。如图,小车1离最近的避让点39比小车2离最近的避让点18更近,则小车1更新路径到避让点39,然后等待小车2行驶到站点24时,小车1从避让点39出来沿着最短路径到原路径终点25
有很多情况是无需更新路径的。如果小车1当前点在4,路径是4->8->6->23->2>26->25,另外一辆小车2当前点在42,路径是42->41->8->4->3->24,则小车2只需在当前站点42等待,等到小车1行驶到站点23(如果站点6与站点8冲突),因为行驶过的站点和路段会释放,则小车2可继续沿着原路径行驶

图2
2)无避让点的情况
如图3所示,图中黄色路线是单向线,蓝色路线是双向线,如果小车1当前点在库位1,路径是1->2->3->4->5->6->7>8,另外一辆小车2当前点在库位A,路径是A->B->C->D->E->F->G. 当小车1行驶到站点3时,如果此时小车2在站点A或者站点B,则小车1可以继续行驶,如果此时小车2已行驶到站点C,则小车1不能行驶到站点4,因为将会和小车2发生碰撞(站点6和站点C有冲突),如果小车2继续行驶到站点D,则将和小车2发生死锁,所以小车1需在当前站点3等待,直到小车2行驶到站点G,小车1可继续沿原路径行驶。同理,对小车2也做如上的判断,当小车2行驶到站点B时,如果此时小车1在站点1,或者2,3,则小车2可以继续行驶,如果此时小车1已行驶到站点4,则小车2不能行驶到站点C,因为将会和小车1发生碰撞(站点4和站点E有冲突),如果继续行驶到站点D,将会和小车1发生死锁,所以小车2需在当前站点B等待,直到小车1行驶到站点8,小车2可继续沿原路径行驶。

图3

最近更新 2022/11/28
文章内容