CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行,其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API,您必须通过 PIP 安装该模块:

pip3 install carla-simulator # Python 3
World and client

客户端是用户运行以请求模拟中的信息或更改的模块。客户端使用 IP 和特定端口运行。它通过终端与服务器通信。可以有许多客户端同时运行。

使用 CARLA 客户端对象设置客户端:

py 复制代码
client = carla.Client('localhost', 2000)

这会将客户端设置为与本地计算机 localhost 上运行的 CARLA 服务器进行通信。或者,如果在单独的计算机上运行客户端,则可以使用网络计算机的 IP 地址。第二个参数是端口号。默认情况下,CARLA 服务器将在端口 2000 上运行,如有必要,您可以在启动 CARLA 时在设置中更改此设置。

客户端对象可用于多种功能,包括加载新地图、记录模拟和初始化流量管理器:

py 复制代码
client.load_world('Town07')

client.start_recorder('recording.log')

世界是代表模拟的对象。它充当一个抽象层,包含生成参与者、改变天气、获取世界当前状态等的主要方法。每个模拟只有一个世界。当地图改变时,它会被摧毁并替换为新的。

使用客户端对象检索世界对象:

py 复制代码
world = client.get_world()

世界对象可用于使用其多种方法访问模拟中的对象,例如天气、车辆、交通灯、建筑物和地图:

py 复制代码
level = world.get_map()

weather = world.get_weather()

blueprint_library = world.get_blueprint_library()
Synchronous and asynchronous mode 同步和异步模式

CARLA 具有客户端-服务器架构。服务器运行模拟。客户端检索信息并请求模拟中的更改。

本质上,在异步模式下,CARLA 服务器会尽可能快地运行。客户请求是即时处理的。在同步模式下,运行 Python 代码的客户端负责控制并告诉服务器何时更新。

同步和异步模式之间的更改只是布尔状态的问题。

py 复制代码
settings = world.get_settings()
settings.synchronous_mode = True # Enables synchronous mode
settings.fixed_delta_seconds = 0.05
world.apply_settings(settings)

要禁用同步模式,只需将变量设置为 False 或使用脚本 PythonAPI/util/config.py

sh 复制代码
cd PythonAPI/util && python3 config.py --no-sync # Disables synchronous mode

同步模式与缓慢的客户端应用程序以及需要不同元素(例如传感器)之间的同步时特别相关。如果客户端太慢而服务器不等待,就会出现信息溢出。客户将无法管理一切,并且会丢失或混合。同样,对于许多传感器和异步情况,不可能知道所有传感器是否都在模拟中使用同一时刻的数据。

以下代码片段扩展了前一个代码片段。客户端创建一个摄像头传感器,将当前步骤的图像数据存储在队列中,并从队列中检索后勾选服务器。可以在此处找到有关多个传感器的更复杂的示例。

py 复制代码
settings = world.get_settings()
settings.synchronous_mode = True
world.apply_settings(settings)

camera = world.spawn_actor(blueprint, transform)
image_queue = queue.Queue()
camera.listen(image_queue.put)

while True:
    world.tick()
    image = image_queue.get()
Recorder

记录器可以将重现先前模拟所需的所有数据保存到文件中。这些数据包括车辆的位置和速度、交通信号灯的状态、行人的位置和速度以及太阳的位置和天气状况等详细信息。数据被记录到一个二进制文件中,Carla服务器稍后可以加载该文件以准确地再现模拟。

演员根据记录文件中包含的数据在每一帧上进行更新。当前模拟中出现在录制中的演员将被移动或重新生成以模拟它。那些没有出现在录音中的人会继续他们的路,就像什么都没发生一样。

播放结束时,车辆将设置为自动驾驶,但行人将停下来。

记录器文件包括有关许多不同元素的信息。

Actors --- creation and destruction, bounding and trigger boxes.

Traffic lights --- state changes and time settings.

Vehicles --- position and orientation, linear and angular velocity, light state, and physics control.

Pedestrians --- position and orientation, and linear and angular velocity.

Lights --- Light states from buildings, streets, and vehicles.

要开始录制,只需要一个文件名。在文件名中使用 \/: 字符会将其定义为绝对路径。如果没有详细路径,文件将保存在 CarlaUE4/Saved 中。

py 复制代码
client.start_recorder("/home/carla/recording01.log")

默认情况下,记录器设置为仅存储回放模拟所需的信息。为了保存前面提到的所有信息,必须在开始录制时配置参数 additional_data

py 复制代码
client.start_recorder("/home/carla/recording01.log", True)

要停止record

client.stop_recorder()

据估计,50 个交通灯和 100 辆车的 1 小时记录大约需要 200MB 大小。

Simulation playback 模拟回放

可以在模拟过程中的任何时刻开始播放。除了日志文件的路径之外,此方法还需要一些参数。

py 复制代码
client.replay_file("recording01.log", start, duration, camera)
Parameter 范围 Description 描述 Notes 笔记
start Recording time in seconds to start the simulation at. 记录开始模拟的时间(以秒为单位)。 If positive, time will be considered from the beginning of the recording. 如果是肯定的,时间将从录音开始算起。 If negative, it will be considered from the end. 如果为负,则从最后考虑。
duration Seconds to playback. 0 is all the recording. 播放秒数。 0 为全部录音。 By the end of the playback, vehicles will be set to autopilot and pedestrians will stop. 播放结束时,车辆将设置为自动驾驶,行人将停止。
camera ID of the actor that the camera will focus on. 摄像机将聚焦的演员的 ID。 Set it to 0 to let the spectator move freely. 将其设置为 0 ,让观众自由移动。
Rendering 渲染

CARLA 提供了许多有关渲染质量和效率的选项。在最基本的层面上,CARLA 提供了两种质量选项,可以在高规格和低规格硬件上运行并获得最佳结果:

Epic mode 史诗模式

./CarlaUE4.sh -quality-level=Epic

Epic mode screenshot 史诗模式截图

Low mode 低模式

./CarlaUE4.sh -quality-level=Low

Low mode screenshot 低模式截图

CARLA 还提供暂停渲染或离屏渲染的选项,以便更有效地记录或运行模拟。

相关推荐
yukai080083 分钟前
Python一些可能用的到的函数系列130 UCS-Time Brick
开发语言·python
AI Chen3 分钟前
python的类中的super是做什么的
python
孟郎郎4 分钟前
Python打开Excel文档并读取数据
python·excel·xlsx·openpyxl·xlrd·xls
Tassel_YUE25 分钟前
iptables配置实现NAT(随手记)
linux·运维·服务器·网络·iptables
许思王27 分钟前
【Python】组合数据类型:序列,列表,元组,字典,集合
开发语言·人工智能·python
IT利刃出鞘1 小时前
SecureCRT--使用sftp上传和下载文件
linux·运维·服务器
程序员的开发手册1 小时前
新手教学系列——慎用Flask-SQLAlchemy慢日志记录
数据库·python·flask·sqlalchemy
木觞清3 小时前
Django学习第三天
python·学习·django
电饭叔3 小时前
《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数
开发语言·python
踩着阴暗的自己向上爬4 小时前
Day05-04-持续集成总结
linux·运维·ci/cd