news 2026/4/18 10:34:26

自动驾驶—CARLA仿真(4)基础概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—CARLA仿真(4)基础概念

基础概念

本页面介绍理解 CARLA 服务器与客户端如何通过 API 运行和通信所需的基本概念。

CARLA 采用客户端-服务器架构

  • CARLA 服务器负责运行仿真
  • **客户端(一个或多个)**向服务器发送指令

客户端代码通过 API 与服务器通信。要使用 Python API,需通过 PIP 安装模块:

python3 -m pipinstallcarla

并在 Python 脚本中导入 CARLA 包:

importcarla

World 与 Client

Client(客户端)

客户端是用户运行的模块,用于请求仿真中的信息或更改。每个客户端通过一个 IP 地址和特定端口运行,并通过终端与服务器通信。可同时运行多个客户端(高级多客户端管理需要深入理解 CARLA 和同步机制)。

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

client=carla.Client('localhost',2000)

此代码将客户端配置为与本地机器(localhost)上运行的 CARLA 服务器通信。若客户端运行在其他机器上,可替换为网络中某台计算机的 IP 地址。第二个参数是端口号,默认情况下 CARLA 服务器运行在2000 端口,启动时可根据需要修改。

客户端对象可用于多种功能,例如加载新地图、录制仿真、初始化交通管理器等:

client.load_world('Town07')client.start_recorder('recording.log')

World(世界)

World是表示仿真的对象,作为抽象层提供主要方法,如生成参与者(actors)、更改天气、获取当前仿真状态等。每个仿真只有一个 World 对象。当切换地图时,当前 World 会被销毁并替换为新的 World。

通过客户端对象获取 World:

world=client.get_world()

World 对象可用于访问仿真中的各类对象,例如天气、车辆、交通灯、建筑物和地图:

level=world.get_map()weather=world.get_weather()blueprint_library=world.get_blueprint_library()

同步模式与异步模式

CARLA 采用客户端-服务器架构:服务器运行仿真,客户端获取信息并请求更改。本节讨论客户端与服务器之间的通信方式。

默认情况下,CARLA 运行在异步模式

  • 异步模式:服务器以最快速度运行,客户端请求被即时处理。
  • 同步模式:由运行 Python 代码的客户端主导,只有在客户端发出“tick”指令后,服务器才推进一帧

建议

  • 实验或搭建仿真时 → 使用异步模式(可自由飞行观察者视角)
  • 生成训练数据或部署智能体时 → 使用同步模式(更高控制力与可预测性)

⚠️多客户端注意
在多客户端架构中,只能有一个客户端调用tick()。服务器会将所有 tick 视为来自同一客户端,多个 tick 会导致服务器与客户端状态不一致。


设置同步模式

切换同步/异步模式只需修改一个布尔值:

settings=world.get_settings()settings.synchronous_mode=True# 启用同步模式settings.fixed_delta_seconds=0.05# 固定时间步长(秒)world.apply_settings(settings)

⚠️重要警告
若启用同步模式且运行了 Traffic Manager,必须同时将 Traffic Manager 设为同步模式

禁用同步模式:

# 方法1:设为 Falsesettings.synchronous_mode=Falseworld.apply_settings(settings)# 方法2:使用配置脚本(仅支持禁用)cd PythonAPI/util&&python3 config.py--no-sync

❗ 注意:配置脚本不能启用同步模式,因为启用后服务器会等待客户端 tick,而脚本无法按需发送 tick。


使用同步模式

同步模式在以下场景尤为重要:

  • 客户端应用处理较慢
  • 需要多个传感器数据严格同步

若客户端处理慢而服务器不等待,会导致信息溢出、数据丢失或错乱。在异步多传感器场景下,也无法保证所有传感器使用同一仿真时刻的数据。

以下代码片段展示了同步模式的基本用法:客户端创建摄像头,将当前帧图像存入队列,并在取出后触发服务器下一帧:

settings=world.get_settings()settings.synchronous_mode=Trueworld.apply_settings(settings)camera=world.spawn_actor(blueprint,transform)image_queue=queue.Queue()camera.listen(image_queue.put)whileTrue:world.tick()# 推进仿真image=image_queue.get()# 获取对应帧的图像

⚠️关键提示
GPU 传感器(主要是摄像头)的数据通常有2~3 帧延迟同步机制在此至关重要

World 还提供异步方法,让客户端等待服务器 tick 或注册回调:

# 等待下一 tick 并获取快照world_snapshot=world.wait_for_tick()# 注册回调函数(每次收到新快照时调用)world.on_tick(lambdaworld_snapshot:do_something(world_snapshot))

Recorder(记录器)

Recorder 可将重现先前仿真所需的所有数据保存到文件中,包括:

  • 车辆的位置与速度
  • 交通灯状态
  • 行人的位置与速度
  • 太阳位置与天气条件

数据以二进制文件形式保存,后续可由 CARLA 服务器加载以精确复现仿真。

回放时:

  • 录制文件中的参与者将被移动或重新生成
  • 未出现在录制中的参与者继续按原逻辑运行

⚠️注意
回放结束后,车辆将启用自动驾驶,但行人会停止移动

录制文件包含以下元素信息:

  • 参与者:创建/销毁、包围盒与触发盒
  • 交通灯:状态变化与时间设置
  • 车辆:位置/朝向、线速度/角速度、灯光状态、物理控制
  • 行人:位置/朝向、线速度/角速度
  • 灯光:建筑、街道及车辆的灯光状态

录制

开始录制只需指定文件名:

  • 文件名含\/:→ 视为绝对路径
  • 未指定路径 → 保存在CarlaUE4/Saved/目录
client.start_recorder("/home/carla/recording01.log")

默认仅保存回放必需信息。若需保存全部上述数据,需设置additional_data=True

client.start_recorder("/home/carla/recording01.log",True)

💡附加数据包括
车辆/行人的线速度与角速度、交通灯时间设置、执行时间、参与者触发盒/包围盒、车辆物理控制。

停止录制:

client.stop_recorder()

📊存储估算
1 小时录制(50 个交通灯 + 100 辆车)≈ 200 MB


仿真回放

可在仿真任意时刻启动回放。除日志文件路径外,还需以下参数:

client.replay_file("recording01.log",start,duration,camera)
参数说明注意
start回放起始时间(秒)正数:从开头计算;负数:从结尾倒推
duration回放时长(秒),0=全部结束后车辆启用自动驾驶,行人停止
camera摄像头聚焦的参与者 ID设为0可自由控制观察者视角

Recorder 文件格式

Recorder 使用自定义二进制格式保存数据,详见此文档。


渲染(Rendering)

CARLA 提供多种渲染质量与效率选项。基础层面提供两种画质模式,适配高低配置硬件:

Epic Mode

./CarlaUE4.sh -quality-level=Epic

低画质模式(Low Mode)

./CarlaUE4.sh -quality-level=Low

CARLA 还支持暂停渲染离屏渲染(offscreen),以提升仿真效率或用于后台录制。

更多渲染选项详情请参阅官方文档。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:19:09

iOS设备调试兼容性终极解决方案:iOSDeviceSupport项目完整指南

iOS设备调试兼容性终极解决方案:iOSDeviceSupport项目完整指南 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 你是否曾遇到过这样的困境:iPhone已经升级…

作者头像 李华
网站建设 2026/4/18 7:02:15

视频分析神器video-analyzer:3步教你用AI看懂任何视频内容

视频分析神器video-analyzer:3步教你用AI看懂任何视频内容 【免费下载链接】video-analyzer A comprehensive video analysis tool that combines computer vision, audio transcription, and natural language processing to generate detailed descriptions of vi…

作者头像 李华
网站建设 2026/4/18 2:32:39

TVM量化部署实战:CUDA平台上的模型压缩与推理优化

TVM量化部署实战:CUDA平台上的模型压缩与推理优化 【免费下载链接】tvm-cn TVM Documentation in Chinese Simplified / TVM 中文文档 项目地址: https://gitcode.com/gh_mirrors/tv/tvm-cn 量化原理深度解析 模型量化就像把高清视频转成标清格式——虽然损…

作者头像 李华
网站建设 2026/4/18 5:34:30

Windows系统依赖组件一键修复终极指南:快速解决软件运行难题

Windows系统依赖组件一键修复终极指南:快速解决软件运行难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统中至关重要…

作者头像 李华
网站建设 2026/4/18 6:56:47

6、深入实践 I/O、重定向、管道和过滤器

深入实践 I/O、重定向、管道和过滤器 在命令行操作中,I/O、重定向、管道和过滤器是非常实用的工具。它们可以帮助我们更高效地处理数据、管理文件和监控系统。下面将详细介绍这些工具的使用方法和应用场景。 1. 使用 tee 命令输出到标准输出并追加到文件 tee 命令允许我们…

作者头像 李华
网站建设 2026/4/18 7:26:42

抖音无水印下载器终极指南:轻松保存高清原画质视频

你是不是经常在抖音上看到精彩视频想要保存,却苦于水印破坏画面美感?🤔 别担心,今天我要为你介绍一款超实用的抖音无水印下载神器,让你轻松收藏每一个心动瞬间! 【免费下载链接】douyin_downloader 抖音短视…

作者头像 李华