共计 1925 个字符,预计需要花费 5 分钟才能阅读完成。
背景与痛点
自动驾驶开发离不开大量高质量的标注数据。传统实车采集存在成本高、场景覆盖有限等问题,而 CARLA 仿真平台提供了丰富的场景和传感器模拟能力。但在实际使用中,开发者常遇到:

- 场景多样性不足导致模型泛化性差
- 手动标注效率低下(特别是点云数据)
- 不同传感器时间戳不同步造成数据对齐困难
技术方案
1. 环境配置
- 从 CARLA 官网下载对应版本的预编译包(建议 0.9.13+)
- 安装 Python 依赖:
pip install carla numpy opencv-python - 启动服务端:
./CarlaUE4.sh -quality-level=Epic -carla-rpc-port=2000
2. 传感器配置示例
import carla
# 连接服务端
client = carla.Client('localhost', 2000)
world = client.get_world()
# 创建传感器蓝图
blueprint_library = world.get_blueprint_library()
cam_bp = blueprint_library.find('sensor.camera.rgb')
lidar_bp = blueprint_library.find('sensor.lidar.ray_cast')
# 配置摄像头参数
cam_bp.set_attribute('image_size_x', '1920')
cam_bp.set_attribute('image_size_y', '1080')
cam_bp.set_attribute('fov', '90')
# 安装到车辆
vehicle = world.spawn_actor(vehicle_bp, spawn_point)
camera = world.spawn_actor(cam_bp, carla.Transform(), attach_to=vehicle)
lidar = world.spawn_actor(lidar_bp, carla.Transform(), attach_to=vehicle)
自动化数据采集
3. 场景切换与数据保存
# 场景管理示例
weather_presets = [
carla.WeatherParameters.ClearNoon,
carla.WeatherParameters.WetCloudyNoon,
carla.WeatherParameters.HardRainNoon
]
for weather in weather_presets:
world.set_weather(weather)
# 触发传感器采集
camera.listen(lambda image: image.save_to_disk(f'output/{frame_id}.png'))
lidar.listen(lambda point_cloud: point_cloud.save_to_disk(f'output/{frame_id}.ply'))
# 同步采集 10 秒
time.sleep(10)
自动化标注方案
4. 与 CVAT 集成
- 安装 CVAT 标注工具
- 使用 CARLA PythonAPI 生成基础标注:
# 获取物体 3D 边界框
for actor in world.get_actors():
if isinstance(actor, carla.Vehicle):
bbox = actor.bounding_box
vertices = [
bbox.location + carla.Location(x=±bbox.extent.x,
y=±bbox.extent.y,
z=±bbox.extent.z)
for x in [-1,1] for y in [-1,1] for z in [-1,1]
]
# 转换为 CVAT 格式
annotation = {
'type': 'cuboid',
'points': [v for vertex in vertices for v in [vertex.x, vertex.y, vertex.z]]
}
性能优化技巧
- 多传感器同步 :使用
world.tick()确保同一帧数据 - 数据压缩:将点云存储为二进制格式
- 并行采集:多车辆同时采集不同区域
常见问题解决
- 坐标系不一致:
- CARLA 使用 UE4 左手法则
- 标注工具常用右手坐标系
-
解决方案:在导出数据时统一转换
-
时间戳不同步:
- 为所有传感器数据添加
world.get_snapshot().timestamp - 后期处理时按时间戳对齐
进阶方向
尝试将采集的仿真数据与真实数据混合训练,使用半监督学习:
- 用仿真数据预训练模型
- 少量真实数据微调
- 通过一致性正则化提升泛化能力
实践建议
不妨尝试以下传感器组合效果对比:
– 纯视觉 vs 视觉 + 雷达
– 不同焦距的摄像头组合
– 动态调整传感器采样频率
期待大家在评论区分享自己的实验效果!
正文完
