news 2026/5/14 12:58:25

自动驾驶—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/5/13 8:50:01

springboot基于vue的高数学竞赛同步课堂学习系统的设计与实现_84c06k28

目录已开发项目效果实现截图开发技术核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现…

作者头像 李华
网站建设 2026/5/9 10:46:12

6、从Web应用到电子基础的综合技术之旅

从Web应用到电子基础的综合技术之旅 1. 连接用户界面与后端 当后端和用户界面都设计好后,使用 JavaScript 来连接二者是最后一步。不过,使用单独的 JavaScript 文件存在一个问题,即它无法使用 Flask 模板的特性,例如 url_for 就无法正常工作。所以,所有需要这些特性的…

作者头像 李华
网站建设 2026/5/13 7:51:02

大家有没有发现一个奇特现象:你能在一个公司工作 12 年以上,无论你多忠诚多卖力,一旦公司赚的少了,那你就成了“眼中钉肉中刺”

大家好,我是程序员小灰。前几天我们刚聊完一个比较尖锐的话题,裁员为什么先裁技术人员?这两天我又刷到了一个令人揪心的帖子:在一个公司工资12年以上,无论你态度多好、工作多卖力,一旦公司遇到困难&#xf…

作者头像 李华
网站建设 2026/5/7 19:20:48

太阳能气象站​——无线自动气象站​

在环境监测、农业生产、科研考察等领域,气象数据的精准获取是开展各项工作的基础。而FT-QC6太阳能气象站凭借环保供电、精准监测、稳定传输的核心优势,成为了众多场景下的气象监测优选设备,完美解决了户外无市电区域的监测供电难题。这款太阳…

作者头像 李华
网站建设 2026/5/10 10:43:57

5个智能条件节点实战技巧:让图像处理流程自动决策

5个智能条件节点实战技巧:让图像处理流程自动决策 【免费下载链接】slam-handbook-public-release Release repo for our SLAM Handbook 项目地址: https://gitcode.com/GitHub_Trending/sl/slam-handbook-public-release 还在为复杂的图像处理工作流头疼吗&…

作者头像 李华