自动驾驶仿真_CARLA的基本概念

自动驾驶仿真:CARLA的基本概念

1. 客户端和服务端
附赠自动驾驶最全的学习资料和量产经验:链接

CARLA采用客户端-服务端(client-server, C/S)架构,其中服务端基于虚幻引擎4(Unreal Engine 4,UE4)开发,并提供了C++和python版本的客户端API,如下图所示。

image

虚幻引擎是由Epic Games公司开发的游戏引擎,广泛应用于游戏开发、电影制作、工况模拟和可视化展示等领域,提供了良好的模拟和渲染效果。基于此,CARLA服务端进行所有与仿真环境相关的模拟和运算,包括仿真世界生成、交通参与者状态更新、传感器渲染等多方面的工作。

客户端API使用C++开发,并通过boost库封装为python可调用的版本,即上一节安装的Python API。基于该API可开发客户端,实现对客户端中仿真世界的控制,如变换地图和天气、添加交通参与者、控制交通参与者运行等。

2. 步长和同步模式

根据Python API中的定义,CARLA运行时,服务端(Server)中运行的整个虚拟环境称为仿真世界(World),连接服务端并对仿真世界进行控制或从仿真世界获取相关信息的模块称为客户端(Client)。

仿真运行时只能启动一个服务端运行仿真世界,可启动多个客户端实现对仿真世界的不同控制或者从仿真世界获取不同的信息。服务端和客户端可运行在同一台电脑,也可运行在有网络连接的多台电脑上(这种情况下,客户端启动时需要指定服务端的IP,以实现连接)。

服务端中仿真世界的运行有不同的步长模式,仿真世界和客户端之间交互有不同的同步模式。

步长模式是指服务端运行时相邻两帧的时间间隔方式,包括变步长和定步长两种模式:

  • 变步长:相邻两帧的时间间隔为计算更新仿真世界状态实际花费的时间

  • 定步长:相邻两帧的时间间隔为预先设置好的固定时间

同步模式是指服务端和客户端是否同步运行,包括同步和异步两种模式:

  • 同步:服务端完成前一帧的更新计算后,接收到客户端发送的更新指令(称为tick)后再进行下一帧的更新计算

  • 异步:服务端完成前一帧的更新计算后,马上进行下一帧的更新计算,这样仿真世界会以尽可能快的时间运行

步长模式和同步模式会形成四种组合,对比如下图所示:

image

对常用的同步定步长模式,做进一步说明:

如下图所示,客户端Client按照固定的时间间隔从服务端Server获取信息(get),并触发服务端Server运行(tick),服务端Server接收到客户端Client的触发信号后,进行进行计算并更新状态(update),图中矩形表示当前帧计算所需的实际时间,该时间可能与仿真时间中实际流逝的时间(步长)不同。

image

假设仿真世界中有一辆在直路上按照10m/s匀速行驶的车辆,客户端Client每隔0.1s向服务端Server发生触发信号,并获取当时的车辆位移。通过设置不同的仿真步长,可将仿真设置为实时、加速或者慢速运行,下图所示。

image

当步长为0.1s时,由于步长与触发间隔一致,仿真实时运行,仿真世界中时间流逝与真实世界一致;当步长为0.2s时,步长大于触发间隔,仿真加速运行,仿真世界中时间流逝快于真实世界。

3. 交通参与者

CARLA中的车辆、行人、传感器、交通标志、交通灯等都称为交通参与者(Actors),这些交通参与者具有类似的属性和操作方式。

CARLA中预设的不同交通参与者类别,称为蓝图(blueprint),比如车辆的蓝图包括vehicle.audi.a2、vehicle.tesla.model3和vehicle.kawasaki.ninja等车型,传感器的蓝图包括sensor.camera.rgb、sensor.lidar.ray_cast和sensor.other.obstacle等类型。

可通过world的spawn_actor方法在期望的位置生成某个蓝图对应的交通参与者,并在随后的仿真运行中对该交通参与者进行控制和获取相关信息;最后,当不再需要该交通参与者时,可以将其销毁。

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值