CARLA 使用服务器-客户端架构运行,其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API,您必须通过 PIP 安装该模块:
pip3 install carla-simulator # Python 3
World and client
客户端是用户运行以请求模拟中的信息或更改的模块。客户端使用 IP 和特定端口运行。它通过终端与服务器通信。可以有许多客户端同时运行。
使用 CARLA 客户端对象设置客户端:
client = carla.Client('localhost', 2000)
这会将客户端设置为与本地计算机 localhost
上运行的 CARLA 服务器进行通信。或者,如果在单独的计算机上运行客户端,则可以使用网络计算机的 IP 地址。第二个参数是端口号。默认情况下,CARLA 服务器将在端口 2000 上运行,如有必要,您可以在启动 CARLA 时在设置中更改此设置。
客户端对象可用于多种功能,包括加载新地图、记录模拟和初始化流量管理器:
client.load_world('Town07')
client.start_recorder('recording.log')
世界是代表模拟的对象。它充当一个抽象层,包含生成参与者、改变天气、获取世界当前状态等的主要方法。每个模拟只有一个世界。当地图改变时,它会被摧毁并替换为新的。
使用客户端对象检索世界对象:
world = client.get_world()
世界对象可用于使用其多种方法访问模拟中的对象,例如天气、车辆、交通灯、建筑物和地图:
level = world.get_map()
weather = world.get_weather()
blueprint_library = world.get_blueprint_library()
Synchronous and asynchronous mode 同步和异步模式
CARLA 具有客户端-服务器架构。服务器运行模拟。客户端检索信息并请求模拟中的更改。
本质上,在异步模式下,CARLA 服务器会尽可能快地运行。客户请求是即时处理的。在同步模式下,运行 Python 代码的客户端负责控制并告诉服务器何时更新。
同步和异步模式之间的更改只是布尔状态的问题。
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
。
cd PythonAPI/util && python3 config.py --no-sync # Disables synchronous mode
同步模式与缓慢的客户端应用程序以及需要不同元素(例如传感器)之间的同步时特别相关。如果客户端太慢而服务器不等待,就会出现信息溢出。客户将无法管理一切,并且会丢失或混合。同样,对于许多传感器和异步情况,不可能知道所有传感器是否都在模拟中使用同一时刻的数据。
以下代码片段扩展了前一个代码片段。客户端创建一个摄像头传感器,将当前步骤的图像数据存储在队列中,并从队列中检索后勾选服务器。可以在此处找到有关多个传感器的更复杂的示例。
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
中。
client.start_recorder("/home/carla/recording01.log")
默认情况下,记录器设置为仅存储回放模拟所需的信息。为了保存前面提到的所有信息,必须在开始录制时配置参数 additional_data
。
client.start_recorder("/home/carla/recording01.log", True)
要停止record
client.stop_recorder()
据估计,50 个交通灯和 100 辆车的 1 小时记录大约需要 200MB 大小。
Simulation playback 模拟回放
可以在模拟过程中的任何时刻开始播放。除了日志文件的路径之外,此方法还需要一些参数。
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 还提供暂停渲染或离屏渲染的选项,以便更有效地记录或运行模拟。