首先,贴个链接,感谢这位朋友的分享:
SUMO仿真案例
SUMO模型建立主要需要两个东西
在此基础上在sumo gui中生成可视化仿真文件,进行仿真。
然后,对于需要对仿真过程进行控制的,可以通过python编写控制文件,用调用Traci来完成对车辆的控制,包括跟驰与换道等。
在案例中,我主要关注了他的跟驰模型:
包括加速过程、减速过程、慢启动现象、随机慢化;
#生成下一时刻速度
def speed_generate(self):
v_next = self.speed
Pslow, Ps = 0.5, 0.3#慢启动和随机慢化概率
frontCar =self.frontCar()
if frontCar != "":
frontCarSpeed = traci.vehicle.getSpeed(frontCar)#前车速度
frontCarDistance = traci.vehicle.getLanePosition(frontCar)#前车行驶通过距离
minAccSpeed = min(self.speed+self.maxacc, self.vmax)
if self.speed == 0 and random.uniform(0, 1) < Pslow:#慢启动现象
v_next = 0 #下一时刻速度为0
elif frontCarSpeed+frontCarDistance-(minAccSpeed+self.speed)/2-self.lanePosition > self.minGap+self.length:#加速情况
v_next = minAccSpeed
if random.uniform(0, 1) < Ps: # 随机慢化现象
v_next = max(v_next - self.maxdec, 0)
elif frontCarSpeed+frontCarDistance-(minAccSpeed+self.speed)/2-self.lanePosition == self.minGap+self.length:#匀速情况
if random.uniform(0, 1) < Ps: # 随机慢化现象
v_next = max(v_next - self.maxdec, 0)
else:#减速情况
v_next = max(self.speed-self.maxdec, 0)
return v_next
核心是:在下一时刻,(前车的位置 减去 本车的位置)与(本车车长 与 车之间最小间距的和)进行比较;
从而对下一时刻的速度进行规划,完成speed_generate。
输入:前车id:前车车速与行驶距离
输出:本车下一刻车速