在这篇文章中,我们将介绍Carla环境中另外一个重要的功能模块,它的名字叫做Traffic Manager(交通管理器)。
我们在 Carla自动驾驶仿真环境 3 – 利用摄像头识别车辆 中成功创建了多台车辆,并在一台车上安装了摄像头,它可以识别到道路上的其他车辆。我们为了让车辆移动,将车辆的autopilot模式设置成了True,在这个模式下,车辆会按照Carla引擎生成的路线,并在遵守交通规则的前提下安全有序的同行。但是在现实中,路上车辆的行为是不可预测的,你并不知道旁边的车辆是不是会做出危险行为,因此在自动驾驶仿真中,我们需要能够对这类的行为做出仿真,而Carla中的Traffic Manager就是为了这个目的设计的。
Traffic Manager,以下简称TM,是一个用于控制仿真器内车辆的木块,它的目的是尽量模拟真实的道路场景,用户可以通过TM自定义一些危险驾驶行为,比如可以让车辆超速行驶,或者强行变道等等。
将车辆纳入TM的管理很简单,用户只需要打开该车辆的autopilot模式就行,如果用户没有打开这个模式那么车辆就没有被注册到TM中。
我们先简单的通过Carla引擎对TM模块的构架来了解下TM所包含的几个重要功能点,TM的执行过程是分阶段执行的,下图展示了TM子模块之间的连接关系,其中蓝色框内是参与TM决策的模块,而绿的框代表的是一些辅助模块。
下边分别说明一下每个模块实现的功能:
功能模块
支持性模块
我们在使用TM之前需要知道和了解TM的一些常规的行为,包括:
用户能够通过TM对车辆的控制简单总结如下,更详细的内容也可以在API文档中找到。
通用 | 1. 使用carla.Client来创建TM,并连接到端口上 2. 通过已经连接的TM可以获取到端口 |
安全条件 | 1. 可以设置停下来车辆之间的最短距离(可以单独设置一台车或者是所有的车),这个会影响到最小可移动距离 2. 根据当前限速,设置车辆的目标车速(单独一台车或者所有的车) 3. 重置交通信号灯 |
碰撞管理 | 1. 关闭和使能车辆和某个Actor之间的碰撞 2. 将一台车设置成无视其他车辆 3. 将一台车设置成无视其他行人 4. 将一台车设置成无视交通信号灯 |
车道变换 | 1. 无视碰撞强行变道 2. 使能和关闭某台车的变道行为 |
混合物理模式 | 1. 使能和关闭混合物理模式 2. 更改混合物理模式的半径 |
知道了TM可以可以做什么以后,我们接下来就可以看看在Python中来使用TM了。
注:下边代码需要使用0.9.9版本以上的Carla环境,因为官方文档没有较为清楚的标注,大家使用的时候要特别注意一下,如果在早于0.9.9的版本中可能会遇到参数不一致的问题。
在使用TM之前,需要在Python代码中创建TM对象,我们需要调用carla.Client的get_trafficmanager方法来创建TM对象。
|
|
调用这个方法的时候可以指定一个端口号,用于后边将车辆注册到TM中,如果不给这个参数,默认端口号为8000,
在 Carla自动驾驶仿真环境 1 – 基本概念 中我们就提到了,Carla仿真器环境和Carla Python库之间是服务器和客户端的一种关系,而TM其实是运行在仿真器环境中的,因此它也是服务器的的一部分,而我们使用Python实现的代码是用户通过Python库来控制仿真器环境的一个客户端。
有了TM对象以后,我们若要使用TM来控制某几台车辆就需要把这些车辆都提前注册到TM中,注册的过程也很简单,如我们前边提到的,我们可以通过设置车辆的autopilot模式来将其注册到TM中,在调用set_autopilot方法的时候需要指定TM的端口号,该端口号可以通过TM对象的get_port方法获得。
|
|
我们在 Carla自动驾驶仿真环境 3 – 利用摄像头识别车辆 的代码中增加几行来简单的演示一下如何使用TM。
|
|
在上段断码中,我们在世界中另外创建了10台车,并将它们添加到vehicle_list,然后将vehicle_list中的车辆全部注册到TM中,通过,针对每台车,都设置了一些自定义的驾驶规则
使用这样的代码创建的世界中,只有我们的model3是按照正常的交通规则合理的行驶,其他车都是在危险驾驶。
需要指出的是TM并不是一种Actor,因此不需要手动停止,Client会自动处理,但是需要注意的是当TM停止以后,注册到它上边的车辆都会被销毁。
也就是说我们不需要特别的针对TM做停止的操作,只需要使用它就可以了。
在本篇文章中,我们简要的介绍了Carla中的交通管理器模块,并演示了如何使用它提供的接口,TM模块主要是为我们提供了一个模拟真实行车环境中的不确定性的可能,因为在自动驾驶汽车算法在测试的时候,通常很容易在安全行车环境下测试,而危险驾驶的场景不是很容易创造,TM给可以帮助我们很容易的来模拟危险驾驶场景,大家可以发挥想象力,利用这些API创造尽最大可能符合真实的驾驶环境。
本篇文章的代码为在GitHub仓库 https://github.com/pythonlibrary/carla-tutorials{.aioseop-link} 中的 tutorial-4.py文件
最后,我们来看一下,在这个危险的道路上,其它车辆是怎么驾驶的,在下边视频中你可以看到一台车闯红灯直行,另外一台车闯红灯左转,而我们的车很规矩。
Python之所以如此流行,在于它有强大的生态,使用各种各种的库可以帮助用户最快速的解决问题。Python酷致力于输出高质量的Python库相关教程及技术性文章,帮助用户更好更快速的解决问题