CARLA自动驾驶模拟器新手入门:从环境搭建到第一个自动驾驶Demo

1次阅读
没有评论

共计 3471 个字符,预计需要花费 9 分钟才能阅读完成。

image.webp

CARLA 简介与作用

CARLA 是一个开源的自动驾驶模拟器,专门为自动驾驶系统的开发、测试和验证而设计。它提供了高度可配置的仿真环境,包括多种天气条件、光照变化、不同类型的车辆和行人模型等。通过 CARLA,开发者可以在虚拟环境中快速测试和迭代自动驾驶算法,而无需投入昂贵的真实车辆和场地资源。

CARLA 自动驾驶模拟器新手入门:从环境搭建到第一个自动驾驶 Demo

CARLA 的核心优势在于其灵活性和可扩展性:

  • 支持 Python 和 C ++ API,便于集成到现有开发流程
  • 提供丰富的传感器模型(摄像头、激光雷达、GPS 等)
  • 允许自定义地图和交通场景
  • 支持多客户端连接,适合分布式系统测试

环境搭建

系统要求

CARLA 对硬件有一定要求,建议配置:

  • 操作系统:Ubuntu 18.04/20.04 或 Windows 10
  • GPU:NVIDIA 显卡,至少 4GB 显存
  • 内存:16GB 以上
  • 存储空间:至少 50GB 可用空间

安装步骤

  1. 下载 CARLA 发布包

从 官方 GitHub 发布页面 下载最新版本的预编译包(推荐 0.9.13 或更新版本)。

  1. 解压安装包
tar -xzvf CARLA_0.9.13.tar.gz
  1. 安装 Python 依赖

CARLA 需要 Python 3.7+ 环境,建议使用 virtualenv 创建隔离环境:

python3 -m venv carla-env
source carla-env/bin/activate
pip install pygame numpy
  1. 运行 CARLA 服务器
cd CARLA_0.9.13
./CarlaUE4.sh

默认情况下,服务器会监听端口 2000(RPC)和 2001(流端口)。

  1. 验证安装

打开新的终端,运行示例脚本:

cd PythonAPI/examples
python3 automatic_control.py

核心 API 详解

CARLA 的核心功能通过 Python API 提供,主要模块包括:

1. 客户端连接

import carla

# 连接到 CARLA 服务器
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)  # 设置超时

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

2. 加载地图

# 加载特定地图(可选)client.load_world('Town01')

# 获取当前地图
map = world.get_map()

3. 生成车辆

# 获取蓝图库
blueprint_library = world.get_blueprint_library()

# 选择车辆蓝图
vehicle_bp = blueprint_library.filter('model3')[0]

# 选择生成点
spawn_point = world.get_map().get_spawn_points()[0]

# 生成车辆
vehicle = world.spawn_actor(vehicle_bp, spawn_point)

4. 添加传感器

# 创建摄像头蓝图
camera_bp = blueprint_library.find('sensor.camera.rgb')
camera_bp.set_attribute('image_size_x', '800')
camera_bp.set_attribute('image_size_y', '600')

# 设置摄像头位置
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))

# 生成摄像头
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)

# 定义传感器回调函数
def camera_callback(image):
    image.save_to_disk('output/%06d.png' % image.frame)

# 注册回调
camera.listen(camera_callback)

自动驾驶 Demo 实现

下面是一个简单的自动驾驶 Demo,实现车辆沿着道路自动行驶:

import carla
import random

# 连接服务器
client = carla.Client('localhost', 2000)
world = client.get_world()

# 设置同步模式(重要!)settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 0.05
world.apply_settings(settings)

# 生成车辆
blueprint_library = world.get_blueprint_library()
vehicle_bp = random.choice(blueprint_library.filter('vehicle.*'))
spawn_points = world.get_map().get_spawn_points()
spawn_point = random.choice(spawn_points)
vehicle = world.try_spawn_actor(vehicle_bp, spawn_point)

# 生成自动驾驶控制器
autopilot = vehicle.get_control()
autopilot.autopilot = True
vehicle.apply_control(autopilot)

# 添加摄像头
camera_bp = blueprint_library.find('sensor.camera.rgb')
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)

def camera_callback(image):
    image.save_to_disk('output/%06d.png' % image.frame)

camera.listen(camera_callback)

# 主循环
try:
    while True:
        world.tick()
finally:
    # 清理
    vehicle.destroy()
    camera.destroy()

常见问题与解决方案

1. 端口冲突

如果启动时遇到端口冲突错误,可以指定不同端口:

./CarlaUE4.sh -carla-rpc-port=3000

然后在 Python 代码中连接相应端口。

2. 渲染问题

如果出现黑屏或渲染异常,尝试:

  • 降低渲染质量:在启动参数中添加-quality-level=Low
  • 确保显卡驱动是最新版本
  • 检查 CUDA 和 cuDNN 是否正确安装

3. Python API 导入错误

确保 PythonAPI 已正确安装:

cd PythonAPI
pip install -e .

性能优化建议

  1. 调整渲染质量

在非视觉测试场景,可以降低渲染质量以提高性能:

./CarlaUE4.sh -quality-level=Low
  1. 优化传感器频率

根据需求调整传感器更新频率,避免不必要的数据处理:

camera_bp.set_attribute('sensor_tick', '0.1')  # 10Hz
  1. 使用同步模式

对于算法开发,建议启用同步模式以确保数据一致性:

settings = world.get_settings()
settings.synchronous_mode = True
settings.fixed_delta_seconds = 0.05  # 20Hz
world.apply_settings(settings)
  1. 批量处理传感器数据

避免在回调函数中进行耗时操作,可以考虑使用队列:

import queue
image_queue = queue.Queue()

def camera_callback(image):
    image_queue.put(image)

# 在主循环中处理
while True:
    world.tick()
    try:
        image = image_queue.get(block=False)
        # 处理图像
    except queue.Empty:
        pass

总结

通过本文,你应该已经掌握了 CARLA 的基本使用方法,从环境搭建到实现第一个自动驾驶 Demo。CARLA 作为功能强大的模拟器,还有更多高级功能值得探索,如:

  • 自定义地图和场景
  • 多车辆交互
  • 复杂传感器融合
  • 强化学习环境集成

建议从官方文档和示例代码入手,逐步深入理解各个模块。CARLA 社区活跃,遇到问题时可以在 GitHub 或论坛寻求帮助。

正文完
 0
评论(没有评论)