CARLA
官网地址 http://carla.org/
CARLA
官网文档地址 https://carla.readthedocs.io/en/latest/
CARLA
中文官网 https://carla.org.cn/#/
Github
: https://github.com/carla-simulator/carla
CARLA
是一个开源的自动驾驶仿真器。它从无到有,作为一个模块化和灵活的 API
来解决自动驾驶问题中涉及的一系列任务。CARLA
的主要目标之一是帮助实现自动驾驶研发的大众化,作为一种工具,用户可以很容易地访问和定制。为此,仿真器必须满足一般驾驶问题中不同用例的要求(例如,学习驾驶规则、训练感知算法等)。CARLA
以虚幻引擎为基础来运行模拟,并使用 OpenDRIVE
标准(目前是1.4)来定义道路和城市环境。对仿真的控制是通过 Python
和 C++
处理的API
授予的,该 API
随着项目的进行而不断增长。
目前开源的自动驾驶仿真平台项目,包括 Carla
、AirSim
、Udacity self-driving car simulator
、Apollo
和Autoware
,从技术上讲,这些平台主要分为两类:
- 第一类是基于合成的数据,对环境、感知及车辆进行模拟,这里的感知大多数是图像层面的感知,这类模拟器主要用于感知、规划算法的初步开发上,
Carla
、AirSim
、Udacity self-driving car simulator
就属于这类; - 第二类是基于真实数据的回放,这里的真实数据包括图像、
lidar
、radar
等各种传感器的数据,这类模拟器主要用于测试无人驾驶中信息融合算法以及车辆不同部件的性能,Apollo
和Autoware
就属于这类。
CARLA (Car Learning to Act)
是一款开源的自动驾驶仿真器,它基本可以用来帮助训练自动驾驶的所有模块,包括感知系统,定位, 规划系统等等。
1. 基本架构
如下图所示,Carla
主要分为 Server
与 Client
两个模块,Server
端用来建立这个仿真世界(Simulator
),而Client
端则是由用户控制,不仅可以读取到环境的数据,也可以向 Server
端发送指令来调整、改变这个仿真世界。
Server
:Server
端负责任何与仿真本身相关的事情,从3D
渲染、汽车、街道、建筑,传感器模型的构建,到物理计算等等。它就像一个造物主, 将整个世界建造出来,并且根据Client
的外来指令更新这个世界。它本身是基于UnrealEnigne
做出的3D
渲染。Client
: 如果Server
构造了整个世界,那么这个世界不同时刻到底该如何运转(比如天气是什么样,有多少辆车在跑,速度是多少)则是由Client
端控制的。用户通过写Python
脚本(或者C++
也可以)来向Server
端输送指令指导世界的变化,Server
根据用户的指令去执行。 另外,Client
端也可以接受Server
端的信息,譬如某个照相机拍到的路面图片。
也就是说,将服务器环境 Server
(即仿真器 Simulator
)启动,然后就不用理会它了,剩下的所有的代码和算法其实都是使用 Python
库来作为客户端通过调用 API
的方式跟这个仿真器交互。
2. 核心模块
2.1 Traffic Manager
一个内置的除了用于学习的车辆外,还可以控制车辆的系统。它作为 CARLA
提供的指挥者,以重现类似真实城市的环境。
自动驾驶之所以难搞,很核心的一个原因就是现实世界车太多了!试想如果整个世界就你一辆车在大马路上跑,自动驾驶恐怕早实现了。因此,Carla
专门构造了 Traffic Manager
这个模块来模拟类似现实世界复杂的交通环境。通过这个模块,用户可以定义 N
多不同车型、不同行为模式、不同速度的车辆在路上愉快地与你的自动驾驶汽车(Ego-Vehicle
)一起玩耍。
2.2 Sensors
Carla
里面有各种各样模拟真实世界的传感器模型,包括相机(RGB、深度和语义分割)、碰撞检测器、惯性传感器、车道入侵检测器、障碍物探测器、激光雷达、声波雷达、IMU
、GNSS
等等。为了让仿真更接近真实世界,它里面的相机拍出的照片甚至还有畸变和动态模糊效果。用户一般将这些 Sensor attach
到不同的车辆上来收集各种数据。
具体传感器类型有:
Cameras
(RGB, depth and semantic segmentation) RGB相机(普通摄像头),深度相机,语义分割相机Collision detector
碰撞检测Gnss sensor
全球卫星定位IMU sensor
惯性传感器Lidar raycast
激光雷达Lane invasion detector
压线检测Obstacle detector
障碍物检测Radar
毫米波雷达RSS
责任敏感安全传感器Recorder
俗话说的好,不能复现的仿真不是好仿真。这个模块就是用来记录仿真每一个时刻的状态,可以用来回顾、复现等等。
细节参考:传感器类型
2.3 ROS bridge and Autoware
这个模块可以让 Carla
与 ROS
还有 Autoware
交互,正是这个模块的存在使得在仿真里测试你的自动驾驶系统变得可能,十分重要。
2.4 Open Assest
这个模块可以允许你为仿真世界添加 customized
的物体库,比如你可以在默认的汽车蓝图里再加一个真实世界不存在、外形酷炫的小飞汽车,用来给 Client
端调用。
2.5 Recorder
这个功能是用来为记录 Carla
中的每一个角色。它可以访问 Carla
世界上任何地方的时间轴上的任何时刻,是一个记录跟踪工具。
2.6 Scenario runner
CARLA
提供了一系列描述不同情况的路线和场景描述,并且开放给每个人测试。
3. 高级功能
CARLA
提供了超出本模拟器介绍范围的广泛功能:
OpenDRIVE
:独立模式。仅使用OpenDRIVE
文件生成道路网格。允许将任何OpenDRIVE
地图加载到CARLA
中,而无需创建资产,不需要在carla
中创建assets
就可以加载OpenDRIVE
地图。PTV-Vissim
:PTV-Vissim
是一款traffic
仿真软件,在CARLA
和PTV-Vissim
交通模拟器之间运行同步模拟。recorder
:保存模拟状态的快照以精确地重新进行模拟。- 渲染选项:图形质量设置、离屏渲染和无渲染模式。
RSS
:为责任敏感安全集成C++
库以使用安全检查修改车辆的轨迹。- 模拟时间和同步:关于模拟时间,和服务器客户端通信的一切。
SUMO
联合仿真:在CARLA
和SUMO
交通模拟器之间运行同步仿真。- 交通管理器:该模块负责所有设置为自动驾驶模式的车辆。它模拟城市中的交通,使模拟看起来像真实的城市环境。
4. 生态系统
与 CARLA
仿真平台相关的开源库:
- Scenario_Runner:在
CARLA 0.9.X
中执行交通场景的引擎; - ROS-bridge:用于将
CARLA 0.9.X
连接到ROS
的接口; - Driving-benchmarks:用于自动驾驶任务的基准工具;
- Conditional Imitation-Learning:在
CARLA
中训练和测试条件模仿学习模型; - AutoWare AV stack: Bridge to connect AutoWare AV stack to CARLA;
- Reinforcement-Learning:在
CARLA
中运行条件强化学习模型的代码; - Map Editor:独立的
GUI
应用程序可通过交通信号灯和交通标志信息来增强RoadRunner
地图;