1.创建车辆群
在下段代码中,我们在世界中另外创建了20台车,并将它们添加到vehicle_list,然后将vehicle_list中的车辆全部注册到TM(traffic manager)中,通过,针对每台车,都设置了一些自定义的驾驶规则
- 通过ignore_lights_percentage 让他们100%的情况下忽略交通信号灯
- 通过distance_to_leading_vehicle来告诉车辆不需要跟前车保持安全车距
- 通过vehicle_percentage_speed_difference告诉车辆目标速度为超速30%
使用这样的代码创建的世界中,只有我们的车是按照正常的交通规则合理的行驶,其他车都是在危险驾驶。
########## 添加车辆 ###########
picked_spawn_points = []
spawn_points = world.get_map().get_spawn_points()
random.shuffle(spawn_points)
NUMBER_OF_VEHICLES = 20
vehicle_bps = world.get_blueprint_library().filter('vehicle.*.*')
vehicle_bps = [x for x in vehicle_bps if int(x.get_attribute('number_of_wheels')) == 4]
vehicle_list = []
for i in range(NUMBER_OF_VEHICLES):
point = spawn_points[i]
vehicle_bp = np.random.choice(vehicle_bps)
try:
vehicle = world.spawn_actor(vehicle_bp, point)
picked_spawn_points.append(point)
vehicle_list.append(vehicle)
except:
print('failed')
pass
tm = client.get_trafficmanager()
tm.global_percentage_speed_difference(30.0)
tm_port = tm.get_port()
for v in vehicle_list:
v.set_autopilot(True, tm_port)
tm.ignore_lights_percentage(v,100)
tm.distance_to_leading_vehicle(v,0)
tm.vehicle_percentage_speed_difference(v,-30)
############ 添加车辆完毕 ###########
2.停止TM
需要指出的是TM并不是一种Actor,因此不需要手动停止,Client会自动处理,但是需要注意的是当TM停止以后,注册到它上边的车辆都会被销毁。也就是说我们不需要特别的针对TM做停止的操作,只需要使用它就可以了。
3.说明
本段代码主要借鉴了该帖:Carla自动驾驶仿真环境 4 – 交通管理器
但该帖中给出的添加车辆群的断码不能直接运用到其他代码中,因为缺了picked_spawn_points、spawn_points、random.shuffle等的定义;
解决方法有两个,一个是修改被插入的代码的对应定义版块,主要也就是命名问题,但如果原先版块代码篇幅很长,相关定义的命名引用了很多的,修改起来可能会不方便;
第二个办法就是重新定义一个版块,及本段代码的方法,该版块需要插入到其他基本定义(如地图选择、天气标定等)后运行才顺利(因为涉及到world.get_map()的引用)
其他可能遇到的问题欢迎评论区交流!