news 2026/4/11 16:17:09

自动驾驶—CARLA仿真基础操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—CARLA仿真基础操作

CARLA 入门指南

CARLA 仿真器是一套面向自动驾驶(AD)及其他机器人应用的综合性合成训练数据生成解决方案。CARLA 能够模拟高度逼真的环境,复现现实世界中的城镇、城市和高速公路,以及在这些道路空间中行驶的车辆和其他物体。

此外,CARLA 仿真器也是一个出色的评估与测试平台。你可以在仿真环境中部署已训练好的自动驾驶智能体(agents),安全地测试和评估其性能与安全性,而无需承担任何对硬件设备或其他道路使用者的风险。

启动 CARLA 并连接客户端

CARLA 可通过命令行启动:Windows 系统使用可执行文件,Linux 系统使用 Shell 脚本。请先按照 Linux 或 Windows 的安装说明完成安装,然后在命令行中启动 CARLA:

cd/carla/root ./CarlaUE4.sh

若要通过 Python API 控制 CARLA,需将 Python 客户端连接到服务器的开放端口。客户端通过 client 和 world 对象控制仿真器。

importcarlaimportrandom# Connect to the client and retrieve the world objectclient=carla.Client('localhost',2000)world=client.get_world()

client 对象用于维持与服务器的连接,并提供多种功能,如执行命令、加载或导出数据。你可以使用它加载其他地图,或重载当前地图(恢复初始状态)。

默认端口为 2000,你也可以指定任意可用端口;同时可通过输入计算机 IP 地址替代 localhost,从而实现 服务器与客户端分离部署——例如在一台配备高性能 GPU 的服务器上运行 CARLA 仿真,而在本地笔记本上运行 Python 客户端进行神经网络训练。这对 GPU 资源紧张的场景尤其有用。

注意:以下内容假设 CARLA 运行在默认的异步模式下。若启用了同步模式,部分代码行为可能有所不同。

加载地图

CARLA 地图的信息
在 CARLA API 中,world 对象提供了对仿真环境中所有元素的访问权限,包括地图、建筑物、交通灯、车辆和行人等。CARLA 服务器通常会加载一个默认地图(通常是 Town10)。若要在启动时指定其他地图,可使用 config.py 脚本:

python ./util/config.py -m Town04

也可在客户端通过 world 对象动态加载地图:

client.load_world('Town04')

可看到仿真器中,地图已切换:

观察者(Spectator)导航

观察者(Spectator)是进入仿真的视觉窗口。默认情况下,当你在带显示器的电脑上运行 CARLA 服务器时,会自动弹出一个新窗口显示观察者视角(除非使用 -RenderOffScreen 命令行参数)。
观察者有助于可视化仿真过程:你可以熟悉所加载的地图,直观查看各项操作的效果(如添加车辆、改变天气、开关地图图层等),也便于调试。
你可以使用鼠标和键盘自由飞行观察者视角:

Q:向上移动(朝窗口顶部)
E:向下移动(朝窗口底部)
W:向前
S:向后
A:向左
D:向右

鼠标左键拖动:上下控制俯仰角(pitch),左右控制偏航角(yaw)
你也可以通过 Python API 访问和操控观察者:

# Retrieve the spectator objectspectator=world.get_spectator()# Get the location and rotation of the spectator through its transformtransform=spectator.get_transform()location=transform.location rotation=transform.rotation# Set the spectator with an empty transformspectator.set_transform(carla.Transform())# This will set the spectator at the origin of the map, with 0 degrees# pitch, yaw and roll - a good way to orient yourself in the map

添加非玩家角色(NPCs)

地图加载完成后,我们需要在仿真中添加车辆,以模拟真实交通环境中的其他道路使用者(即非玩家角色,NPCs)。

首先从蓝图库中选择所需车辆:

# 获取蓝图库并筛选车辆蓝图vehicle_blueprints=world.get_blueprint_library().filter('*vehicle*')

接着,利用地图预设的出生点(spawn points)放置车辆:

# 获取地图的出生点spawn_points=world.get_map().get_spawn_points()# 随机在地图各处生成 50 辆车foriinrange(50):world.try_spawn_actor(random.choice(vehicle_blueprints),random.choice(spawn_points))

此外,还需创建一辆作为仿真核心的“主车”(Ego Vehicle)——即未来由你的自动驾驶算法控制的车辆:

ego_vehicle=world.spawn_actor(random.choice(vehicle_blueprints),random.choice(spawn_points))

CARLA 还支持添加行人,以构建更真实的驾驶场景。在 CARLA 术语中,车辆和行人均称为“Actor”(参与者),具体详见

添加传感器

现代自动驾驶车辆通过多种车载传感器感知环境,如光学摄像头、光流相机、激光雷达(LiDAR)、毫米波雷达(RADAR)和加速度计等。CARLA 内置了多种传感器模型,可用于生成机器学习训练数据。传感器可安装在车辆上,也可固定在某一点(如模拟监控摄像头)。

以下示例将一个标准 RGB 摄像头安装到主车上以录制视频:

# 定义摄像头相对于车辆的位置(车顶上方 1.5 米)camera_init_trans=carla.Transform(carla.Location(z=1.5))# 从蓝图库创建摄像头camera_bp=world.get_blueprint_library().find('sensor.camera.rgb')# 将摄像头挂载到主车camera=world.spawn_actor(camera_bp,camera_init_trans,attach_to=ego_vehicle)

随后,通过listen()方法启动数据记录。该方法接受一个回调函数,用于处理传感器数据(如保存到磁盘或传输至其他程序):

# 使用 lambda 函数将图像保存为 PNG 文件camera.listen(lambdaimage:image.save_to_disk('out/%06d.png'%image.frame))

CARLA 支持多种传感器类型,点击此处深入了解。


使用交通管理器驱动车辆

添加完车辆和传感器后,需通过交通管理器(Traffic Manager)让车辆动起来。该组件可控制车辆在地图道路上自主行驶,遵守交通规则,模拟真实道路行为。

# 将所有车辆交由交通管理器控制forvehicleinworld.get_actors().filter('*vehicle*'):vehicle.set_autopilot(True)

现在,你的仿真已运行起来:多辆车在地图中行驶,其中一辆主车上的摄像头正在录制数据。这些数据可用于训练自动驾驶智能体。交通管理器还提供丰富的行为定制功能,详见文档。

这是最基础的仿真设置。接下来,你可以深入探索 CARLA 提供的更多传感器和高级功能,以构建更精细、更真实的仿真场景。


设置主车(Ego Vehicle)

“主车”是 CARLA 仿真中的核心概念,通常指:

主车对提升仿真效率至关重要,例如:

  1. 大地图分块加载
    大型地图(如 Town12)采用分块设计,仅加载主车附近的区块以优化性能。

  2. 混合物理模式(Hybrid Physics Mode)
    当仿真包含大量交通车辆时,仅对主车附近的车辆计算物理,大幅节省计算资源。

如何定义主车?
在生成主车时,为其蓝图设置role_name属性为'hero'

ego_bp=world.get_blueprint_library().find('vehicle.lincoln.mkz_2020')ego_bp.set_attribute('role_name','hero')ego_vehicle=world.spawn_actor(ego_bp,random.choice(spawn_points))

选择地图

CARLA 内置多张精心设计的地图,涵盖城市、乡村、住宅区等多样环境,包含不同建筑风格和道路布局(从无标线乡道到多车道高速公路)。

地图描述
Town01小型简易城镇,含河流与多座桥梁
Town02混合住宅与商业建筑的小城镇
Town03较大的城区地图,含环岛与大型路口
Town04山区小镇,含“8字形”无限高速公路
Town05方格网状城镇,含十字路口与桥梁,支持多车道变道
Town06多车道高速公路,含多个出入口及“密歇根左转”
Town07乡村环境,窄路、玉米地、谷仓,极少红绿灯
Town08/09Leaderboard 挑战赛专用“隐藏”地图
Town10市中心城区,含摩天大楼、住宅区与海滨大道
Town11未装饰的大地图
Town12超大地图,含高层、住宅、乡村等多种区域

查看可用地图列表:

client.get_available_maps()

加载指定地图:

client.load_world('Town03_Opt')

选择车辆

CARLA 提供丰富的车辆模型库以构建多样化交通流。浏览车辆目录了解详情。

列出所有可用车辆蓝图:

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

DeepSeek-V3模型量化部署终极指南:从工业级到消费级的跨越

DeepSeek-V3模型量化部署终极指南:从工业级到消费级的跨越 【免费下载链接】DeepSeek-V3 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-V3 痛点共鸣:大模型部署的现实困境 当你面对700GB的模型权重下载,8张H100显卡的…

作者头像 李华
网站建设 2026/4/10 18:20:07

基于springboot的网上服装商城毕业论文+PPT(附源代码+演示视频)

文章目录基于springboot的网上服装商城一、项目简介(源代码在文末)1.运行视频2.🚀 项目技术栈3.✅ 环境要求说明4.包含的文件列表(含论文)数据库结构与测试用例系统功能结构前端运行截图后端运行截图项目部署源码下载基…

作者头像 李华
网站建设 2026/4/10 1:17:09

《零基础学 PHP:从入门到实战》·PHP Web 安全开发核心技术与攻防实战演练-安全上传与文件管理

第 5 章:文件操作风险管控——安全上传与文件管理 章节介绍 学习目标 通过本章学习,您将能够: 深刻理解文件上传功能中潜藏的多重安全风险(如 Webshell 上传、路径遍历等)掌握构建多层防御的文件上传安全校验流程学会安全地管理用户上传的文件,包括存储、访问和清理理解并防…

作者头像 李华
网站建设 2026/4/10 11:01:15

同步旋转坐标系下,无位置传感器永磁同步电机控制,创新点为三相电压为重构,不需要电压采集模块

同步旋转坐标系下,无位置传感器永磁同步电机控制,创新点为三相电压为重构,不需要电压采集模块。 需matlab2018a及以上。凌晨三点的实验室里,咖啡机突然罢工。看着示波器上跳动的波形,我突然意识到——电机控制工程师的…

作者头像 李华
网站建设 2026/4/4 1:57:33

《数字化破局抖音电商:从爆品打造到闭环运营实战》 第三章 第二节

前言 第一部分 盈利思维与运营基础 第1章 抖音电商盈利思维 1.1 盈亏平衡点分析:C一年半实战复盘 1.2 抖音电商的四种盈利模式及适用场景 1.3 IT思维做运营:数据驱动、系统思考、敏捷迭代 1.4 构建运营的“安全区”与“加速器”:与平台共生 第2章 抖音电商全景认知 …

作者头像 李华