1、Carla世界初探:Carla简介、安装与启动、理解Carla世界坐标系、第一个Hello World脚本

1.1 Carla是什么?为什么选它?

大家好,我是你们这门课的主讲。先聊聊Carla吧。

Carla,全称是Car Learning to Act,一个开源的自动驾驶仿真器。说白了,它就是一个虚拟的「驾驶世界」。你可以在里面放上汽车、行人、红绿灯,甚至模拟下雨、大雾、夜晚。我最早接触Carla是在2019年,那时候它刚出0.9.x版本,功能还没现在这么全。但说实话,它已经比当时很多商业仿真器要灵活了。

为什么选Carla?我个人习惯用它来做三件事:

  • 算法验证:写了个感知模型?先在Carla里跑一遍,看看能不能识别虚拟行人。
  • 数据生成:需要大量带标注的数据?Carla可以自动给你生成深度图、语义分割图、边界框。
  • 闭环测试:规划控制算法好不好使?让车在Carla里自己开一圈就知道了。

你想想看,如果每次改个参数都要去真车上试,成本太高了。Carla就是那个让你低成本、快速迭代的工具。

1.2 安装与启动:别踩我踩过的坑

安装Carla其实不复杂,但有几个细节容易翻车。我直接说重点。

系统要求

项目最低配置推荐配置
操作系统Ubuntu 18.04 / Windows 10Ubuntu 20.04 / Windows 11
GPUNVIDIA GTX 1060 6GBNVIDIA RTX 3070 8GB+
内存16GB32GB
硬盘20GB 空闲50GB SSD
⚠️ 注意: 我曾经在Ubuntu 22.04上直接装Carla 0.9.13,结果编译报错。后来发现官方对22.04的支持是从0.9.14才开始的。所以,请务必对照版本兼容性表

安装步骤(以Ubuntu为例)

  1. 下载预编译包:去Carla官网的GitHub Release页面,下载对应版本的压缩包。比如 Carla_0.9.14.tar.gz
  2. 解压tar -xzf Carla_0.9.14.tar.gz
  3. 启动服务端:进入 CarlaUE4 目录,运行 ./CarlaUE4.sh。你会看到一个3D城市窗口弹出来。
💡 小技巧: 如果启动时卡在「Compiling shaders」,别慌。第一次启动确实慢,因为要编译着色器。等个5-10分钟就好。我习惯在启动时加个 -quality-level=Low 参数,能快不少:./CarlaUE4.sh -quality-level=Low

启动客户端

服务端跑起来之后,你需要用Python客户端去连接它。先装依赖:

pip install carla  # 安装Python API
pip install numpy  # 处理数据常用

然后写个最简单的连接脚本:

import carla

# 连接Carla服务端
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)

# 获取世界对象
world = client.get_world()

print("连接成功!当前世界包含的蓝图数量:", len(world.get_blueprint_library()))

跑一下,如果打印出蓝图数量,说明你连上了。嗯,这里要注意:端口默认是2000,如果你同时跑多个Carla实例,记得改端口。

1.3 理解Carla世界坐标系

坐标系这个东西,搞自动驾驶的必须门儿清。Carla用的是 左手坐标系,跟Unreal Engine保持一致。

  • X轴:向前(车头方向)
  • Y轴:向右
  • Z轴:向上

你可能会问:「为什么不是右手系?」其实很多游戏引擎都用左手系,因为深度缓冲的计算更直观。我在做传感器标定时,就因为这个坐标系习惯差点把激光雷达的点云投影搞反了。所以,请一定记住这个规则

每个物体在Carla里都有一个 Transform,包含位置和旋转:

# 获取一辆车的位置
vehicle = world.get_actors().filter('vehicle.*')[0]
transform = vehicle.get_transform()

print("位置 (x, y, z):", transform.location.x, transform.location.y, transform.location.z)
print("旋转 (pitch, yaw, roll):", transform.rotation.pitch, transform.rotation.yaw, transform.rotation.roll)

旋转用的是欧拉角,顺序是 pitch → yaw → roll。yaw是绕Z轴转,也就是车头的朝向。我刚开始总把yaw和pitch搞混,后来养成了习惯:每次拿到旋转值,先打印出来看看,心里就有数了。

📌 核心概念: Carla的世界原点在 (0, 0, 0),通常位于地图中心。所有坐标都是相对于这个原点的。单位是 厘米?不,是 。Carla里1个单位 = 1米。

1.4 第一个Hello World脚本

好了,理论说完了,咱们写个真正的「Hello World」。这个脚本会做三件事:

  1. 连接Carla
  2. 在世界上生成一辆车
  3. 让车往前走一小段
import carla
import time

def main():
    # 1. 连接服务端
    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)
    world = client.get_world()

    # 2. 获取蓝图库,选择一辆车
    blueprint_library = world.get_blueprint_library()
    vehicle_bp = blueprint_library.filter('vehicle.tesla.model3')[0]

    # 3. 找一个生成点
    spawn_points = world.get_map().get_spawn_points()
    spawn_point = spawn_points[0]

    # 4. 生成车辆
    vehicle = world.spawn_actor(vehicle_bp, spawn_point)
    print(f"车辆已生成,位置:{spawn_point.location}")

    # 5. 让车动起来
    vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))
    time.sleep(3)  # 跑3秒

    # 6. 停止并清理
    vehicle.apply_control(carla.VehicleControl(throttle=0.0))
    vehicle.destroy()
    print("Hello Carla! 脚本执行完毕。")

if __name__ == '__main__':
    main()

跑这个脚本之前,确保Carla服务端已经启动。你会看到一辆特斯拉Model 3出现在路口,然后缓缓向前开。虽然很简单,但这是你与Carla世界交互的第一步。

💡 避坑指南: 我曾经在 spawn_actor 时遇到报错 failed to spawn actor。原因通常是生成点被其他物体占了。解决办法:换个生成点,或者先销毁附近的车辆。代码里加个 world.try_spawn_actor 会更安全。

1.5 小结与下节预告

这一章我们做了几件事:

  • 了解了Carla是什么,以及为什么它适合做自动驾驶仿真
  • 完成了安装和启动,避开了常见的坑
  • 搞懂了Carla的左手坐标系,记住了X向前、Y向右、Z向上
  • 写了一个能生成车辆并让它动起来的Hello World脚本

下一章,我们会深入传感器的世界。我会带你配置摄像头、激光雷达、GPS、IMU,并且教你怎么同步采集数据。嗯,那才是真正有意思的部分。

公众号:蓝海资料掘金营,微信deep3321