资讯动态

如何让AI在虚拟城市里学会开车?CARLA自动驾驶仿真从零上手手记

发布时间:2026/8/18 17:35:06 来源:尧图企业网站定制
如何让AI在虚拟城市里学会开车CARLA自动驾驶仿真从零上手手记【免费下载链接】carlaOpen-source simulator for autonomous driving research.项目地址: https://gitcode.com/gh_mirrors/ca/carla如果你和我一样研究自动驾驶却迟迟不敢把模型装到真车上——说实话这个念头本身就够吓人的。真车测试要改装、要场地、要许可更要命的是你辛辛苦苦训练的算法如果在一个环岛突然失灵代价不是重启程序而是真金白银和安全隐患。这就是为什么当朋友把CARLA自动驾驶仿真器推到我的面前时我只用了十分钟就意识到这大概是我见过的最接近事故可以重来的驾驶训练场。CARLACar Learning to Act是一个完全开源的自动驾驶仿真平台基于 Unreal Engine 5 构建。它在你自己的电脑里搭起一座座虚拟城市让 AI 车辆在其中学习、测试、甚至撞坏重来。这篇文章不打算给你一份冷冰冰的功能清单而是带你重走一遍我第一次从零跑通它的完整路线——装好它、连上它、开动它、给它装上眼睛最后把它改造成你自己的试验场。中间那些让我半夜抓狂的坑我会提前帮你标出来。先认识这辆虚拟车的骨架在我第一次写代码之前有一个概念必须先说清楚否则后面每行代码都会让你疑惑CARLA 是典型的客户端-服务器架构。你可以把仿真器想象成一座建在你电脑里的虚拟城市它负责渲染画面、模拟物理、运转交通——这是服务器而你的 Python 脚本只是这座城市里的一个代理人通过端口向服务器发指令在哪里生一辆车、摄像头装多高、天气改成什么样。两者完全分离所以服务器可以跑在一台高性能显卡的机器上而你的训练代码可以跑在另一台机器上互不拖累。记住两个默认端口2000用来连服务器2001留给交通管理器。很多新手第一步连不上十有八九是端口被占用。这套架构直接决定了一件事你的 Python 代码只是遥控器真正干活的是那座城市。理解这一点后面所有的操作——生成车辆、装传感器、切换地图——都只是不同形式的发指令而已。把城市装进你的电脑我踩的第一个坑发生在安装环节。如果你以为它像装一个普通软件一样双击就完事那你会在启动界面停留很久。先看一下硬件底牌CARLA 的目标是尽量真实所以它对显卡的要求很诚实系统Ubuntu 22.04/24.04 或 Windows 11显卡建议 NVIDIA RTX 3000 系列以上显存至少 16GB驱动在 Linux 上建议 550 以上Windows 上 560 以上磁盘至少 130GB 可用空间内存别太抠仿真世界里内存是稀缺品如果你的显卡不够强也别急着放弃。CARLA 提供了 Docker 镜像参考 Util/Docker/ 下的配置可以跑在云 GPU 实例上也可以加-RenderOffScreen参数做无渲染的纯逻辑仿真——对只关心数据不关心画面的实验来说这是一条非常实用的捷径。安装方式有两种。图省事直接下载官方预编译包想折腾最新的功能就从源码编译Windows 见 Docs/build_windows_ue5.mdLinux 见 Docs/build_linux_ue5.md。想先看一眼源码结构再决定可以这样拉下来git clone https://gitcode.com/gh_mirrors/ca/carla装好之后安装 Python 客户端库通常是一个 wheel 文件位于包目录的PythonAPI/dist/下pip3 install carla-*.whl然后深吸一口气启动服务器./CarlaUnreal.sh如果一切顺利屏幕上会弹出一个窗口——一座名为Town10的城市俯瞰图。这就是你第一次进入CARLA 的时刻从这之后你可以用鼠标和 WASD 键像无人机一样在城市上空飞行提前熟悉地图。避坑提醒①Windows 上如果启动后没有任何报错就闪退先检查是否安装了 Microsoft Visual C Redistributablex64 版本。这个组件缺失时CARLA 会静默失败当年我在这上面浪费了整整一个下午。让第一辆车出现在街头城市空着没意思我们先造一辆车。所谓造车其实是三件套蓝图这辆车的配方包括模型、材质、物理属性、生成点地图上合法的停车位、生成指令。import carla import random client carla.Client(localhost, 2000) # 连接本地服务器 client.set_timeout(10.0) # 给足超时时间 world client.get_world() # 拿到整个世界 bp_lib world.get_blueprint_library() # 蓝图库所有可生成物体的配方 vehicle_bp random.choice(bp_lib.filter(vehicle.*)) # 随机挑一辆车 spawn_point random.choice(world.get_map().get_spawn_points()) # 选个合法车位 vehicle world.try_spawn_actor(vehicle_bp, spawn_point)跑完这几行去看仿真器窗口——一辆车出现了静静停在街道上。那一刻你会产生一种奇妙的成就感这是你第一次让虚拟世界长出一个会移动的生命体。避坑提醒②为什么要用try_spawn_actor而不是spawn_actor因为如果生成点附近已经有车辆或障碍物生成会失败并抛异常。try_spawn_actor失败时只是返回None代码不会崩。等你循环生成几十辆 NPC 车的时候就知道这个失败宽容有多重要了。---## 给它装上眼睛车是有了但它看不见。在真实自动驾驶里传感器是算法的眼睛在 CARLA 里也一样。给车辆挂一个 RGB 摄像头三行配置一个监听回调camera_bp bp_lib.find(sensor.camera.rgb) camera_bp.set_attribute(image_size_x, 1280) camera_bp.set_attribute(image_size_y, 720) camera_bp.set_attribute(fov, 90) camera world.spawn_actor( camera_bp, carla.Transform(carla.Location(x1.5, z2.4)), # 装在车头前方1.5米、高2.4米 attach_tovehicle) camera.listen(lambda image: image.save_to_disk(frames/%06d.png % image.frame))注意所有参数都要在spawn_actor之前设置好——生成之后想改得先销毁重来。这是新手最容易忽视的细节。画面出来的一刻你会看到车辆正前方那条柏油路和真实行车记录仪几乎一模一样。这就是你后续训练集的第一张图片。摄像头只是起点。CARLA 的传感器库还内置了深度相机、语义分割相机、激光雷达sensor.lidar.ray_cast、毫米波雷达等它们共享同一套先配置、再生成、后监听的流程。想知道每种传感器的全部参数翻 Docs/ref_sensors.md 就好那里比任何博客都全。传感器用完之后记得destroy()。我第一版脚本跑了几万帧最后内存爆掉才发现每次循环生成的传感器对象全都堆在仿真器里没人清理。让整座城市活起来一辆孤独的车还不够。你想要的是一座有行人、有车流、会等红灯的活的城市。这正是交通管理器Traffic Manager出场的时候——它是 CARLA 内置的交通指挥中心能给任意一辆车安排自动驾驶行为traffic_manager client.get_trafficmanager() traffic_manager.set_global_distance_to_leading_vehicle(2.0) # 跟车距离 for v in world.get_actors().filter(vehicle.*): v.set_autopilot(True, traffic_manager.get_port())如果你不想手写这段逻辑CARLA 还贴心地准备好了两个现成脚本就在PythonAPI/examples/里generate_traffic.py一键在整张地图上生成满街的车辆和行人manual_control.py用键盘开一辆车WASD 控制油门转向鼠标转视角开两个终端分别跑起来你会看到一场默片版的城市交通行人过马路、车辆转弯、信号灯切换。而你的车在车流中灵活穿行——那种感觉像第一次走进一座自己搭起来的游乐园。避坑提醒③CARLA 默认是异步模式——服务器自己按自己的节奏跑你的代码只是不断发指令。如果你发现我改了天气怎么没反应车辆不受控先确认自己是不是误开了同步模式反过来做强化学习训练时你又必须切到同步模式用world.tick()手动推进每一帧让数据和动作严格对齐。这两种模式怎么切换、各自适合什么场景Docs/adv_synchrony_timestep.md 讲得很透。顺手说一句天气——这是 CARLA 最容易被低估的功能。训练出来的模型在晴天表现完美一到雨天就失灵这在真实世界是致命问题。而在这里你只需几行代码就能模拟任意天气world.set_weather(carla.WeatherParameters( cloudiness80.0, precipitation30.0, sun_altitude_angle70.0))我后来养成了一个习惯任何模型交付前先在 CARLA 里把晴天、雨天、黄昏各跑一遍。这个习惯帮我提前发现了好几个只在逆光下才暴露的感知 bug。改造成你自己的试验场到这里你已经拥有了一座可以操控的虚拟城市。接下来才是最有意思的部分把它改造成属于你的实验环境。举个最常见的例子——采集训练数据。刚才摄像头保存下来的frames/里全是图片但只有图片不够你还需要同步记录车速、方向盘转角、刹车状态。做法是在同步模式下每个tick里同时读取传感器数据和车辆状态打包存盘。这样图像-控制指令配对的数据集就成型了可以直接喂给端到端模型。如果你做的不是城市道路而是矿区物流CARLA 同样有准备。地图库里除了 Town10 这类现代都市还有一座Mine01矿山环境起伏的地形、非铺装路面、重型卡车专门用来测试越野和不规则场景下的算法。想更彻底地定制世界两条路可以走深换地图client.load_world(Town07)即可切换到不同城镇再用 OpenStreetMap 数据生成自己的道路教程见 Docs/tuto_G_openstreetmap.md调物理想让车辆重心高一点、刹车肉一点全部参数都在蓝图里可调想挑战底盘调校的可以看 Docs/tuto_G_control_vehicle_physics.md那些让我半夜抓狂的坑提前替你们踩平把这次经历里最贵的教训汇总一下希望你的安装之旅比我顺利连不上服务器先查端口。2000 被占是最高频事故没有之一。启动闪退Windows 检查 VC 运行库Linux 检查 NVIDIA 驱动版本缺哪个就补哪个。生成总是失败换try_spawn_actor并且善用world.get_actors()定期清理不要的 actor。改参数没生效传感器参数必须在生成前设置好生成后就是木已成舟。内存莫名暴涨传感器和 actor 用完了要destroy()尤其长时间数据采集时。跑完的代码没结果确认自己到底在异步还是同步模式模式错了一切行为都对不上号。延伸想象再往下能走多远当你把上面这一整套流程跑顺CARLA 对你来说就不再是一个教程里的示例了。往深处走每一层都有新的风景换一种语言不想用 Python官方提供了完整的 C 客户端Examples/CppClient/面向追求性能的工业场景。接上 ROS2CARLA 有原生的 ROS2 接口文档见 Docs/ros2_native.md机器人领域的研究者可以直接把仿真数据接进自己的 ROS 系统。回放与分析内置的录制回放系统Docs/adv_recorder.md能记录整段仿真过程事故现场可以逐帧复盘这在真实世界是不可想象的奢侈。多 GPU 扩展把不同城市分给不同显卡跑吞吐量直接翻倍大规模数据生产的时候特别好用。场景生成接入 Scenic 等场景描述语言Docs/tuto_G_scenic.md可以用脚本自动生成大量刁钻的边缘场景——那些平时根本遇不到的 corner case。我第一次完整跑通生成车辆 → 采集摄像头数据 → 训练一个小模型 → 再放回仿真里验证这条闭环时说实话愣住了——从前需要一台真车、一块场地、无数次提心吊胆才能完成的验证现在全程在电脑里完成了。这就是 CARLA 最打动我的地方它不是让研究变简单而是让试错变得毫无代价。现在轮到你了。先去确认硬件然后执行./CarlaUnreal.sh用pip3 install carla-*.whl装好客户端打开 Docs/tuto_first_steps.md 里的第一个示例让一辆虚拟汽车在你的屏幕上发动引擎。你会发现自学成才的AI 驾驶员离你并不远——它现在就藏在你电脑里那座城市的某条街道上等你把它叫醒。【免费下载链接】carlaOpen-source simulator for autonomous driving research.项目地址: https://gitcode.com/gh_mirrors/ca/carla创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价