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 10 | Ubuntu 20.04 / Windows 11 |
| GPU | NVIDIA GTX 1060 6GB | NVIDIA RTX 3070 8GB+ |
| 内存 | 16GB | 32GB |
| 硬盘 | 20GB 空闲 | 50GB SSD |
安装步骤(以Ubuntu为例)
- 下载预编译包:去Carla官网的GitHub Release页面,下载对应版本的压缩包。比如
Carla_0.9.14.tar.gz。 - 解压:
tar -xzf Carla_0.9.14.tar.gz - 启动服务端:进入
CarlaUE4目录,运行./CarlaUE4.sh。你会看到一个3D城市窗口弹出来。
-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搞混,后来养成了习惯:每次拿到旋转值,先打印出来看看,心里就有数了。
(0, 0, 0),通常位于地图中心。所有坐标都是相对于这个原点的。单位是 厘米?不,是 米。Carla里1个单位 = 1米。
1.4 第一个Hello World脚本
好了,理论说完了,咱们写个真正的「Hello World」。这个脚本会做三件事:
- 连接Carla
- 在世界上生成一辆车
- 让车往前走一小段
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