如何在carla中加入车辆群[基于traffic manager]

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()的引用)

其他可能遇到的问题欢迎评论区交流!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值