CARLA 新手入门:从零开始制作自定义世界模型与地图

1次阅读
没有评论

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

image.webp

背景介绍

CARLA 是一个开源的自动驾驶仿真平台,基于 Unreal Engine 构建,提供了高度灵活的仿真环境。其中,地图系统是 CARLA 的核心组件之一,它定义了道路网络、交通规则和场景布局,直接影响自动驾驶算法的测试效果。

CARLA 新手入门:从零开始制作自定义世界模型与地图

自定义地图的重要性体现在:

  • 满足特定测试需求(如复杂路口、特殊地形)
  • 提高场景多样性以增强算法鲁棒性
  • 避免公开地图的版权限制

工具准备

安装 CARLA 地图编辑器

  1. 从 CARLA 官方 GitHub 下载最新版本(建议 0.9.13+)
  2. 解压后运行 CarlaUE4.exe 启动编辑器
  3. 通过 File -> Open Level 加载默认地图(如 Town07)

推荐配置

  • 操作系统:Ubuntu 20.04/Windows 10
  • GPU:NVIDIA GTX 1080 及以上
  • 存储空间:至少 50GB 可用空间

核心概念:OpenDRIVE 标准

OpenDRIVE 是描述道路网络的 XML 格式标准,包含以下关键要素:

  • 参考线(Reference Line):道路中心线坐标
  • 车道(Lane):宽度、类型(行驶 / 停车 / 人行等)
  • 连接(Junction):交叉口拓扑关系

示例结构:

<road name="main_road" length="100">
  <planView>
    <geometry s="0" x="0" y="0" hdg="0" length="100"/>
  </planView>
  <lanes>
    <laneSection s="0">
      <left>
        <lane id="1" type="driving"/>
      </left>
    </laneSection>
  </lanes>
</road>

实战步骤

1. 创建基础地形

在 UE4 编辑器中:

  1. 选择 Landscape 模式
  2. 使用 Sculpt 工具雕刻地形起伏
  3. 通过 Paint 工具添加基础材质(如草地 / 沥青)

2. 导入 3D 模型

支持 .fbx 或 .obj 格式:

  1. 将模型文件放入 Content/StaticMeshes 目录
  2. 拖拽到场景后调整位置和旋转
  3. 设置碰撞体(建议使用简单碰撞形状优化性能)

3. 配置交通系统

  • 信号灯:通过 TrafficSign 蓝图类添加
  • 标志牌:使用 TrafficSignActor 并选择预设类型
  • 交通流:在 Python API 中调用 tm.generate_traffic()

代码示例

import carla

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

# 加载自定义地图
world = client.load_world('MyCustomMap')

# 设置天气
weather = carla.WeatherParameters(
    cloudiness=30.0,
    precipitation=0.0,
    sun_altitude_angle=70.0)
world.set_weather(weather)

# 生成交通
tm = client.get_trafficmanager()
tm.set_random_device_seed(0)
tm.generate_traffic(100)  # 生成 100 辆 NPC 车辆 

避坑指南

比例尺问题

  • 症状:导入的建筑物比例异常
  • 解决:在建模软件中确认单位设置为米(meters)

材质丢失

  • 症状:模型显示为紫色
  • 解决:检查材质路径是否包含中文 / 特殊字符

碰撞异常

  • 症状:车辆穿模或异常弹跳
  • 解决:重新生成碰撞体(Collision -> Auto Convex Collision)

进阶建议

性能优化

  • 使用 LOD(Level of Detail)技术
  • 合并静态网格体(Mesh Merge 工具)
  • 禁用远处物体的物理模拟

多地图管理

  1. 通过 AssetManager 分类存储资源
  2. 使用 Sublevels 实现地图模块化加载
  3. 建立命名规范(如 MAP_区域_版本 )

思考题

  1. 如何实现动态天气变化对传感器数据的影响测试?
  2. 在复杂交叉口场景中,怎样优化交通流生成算法?
  3. 对比 Unity 仿真环境,CARLA 在地图编辑方面有哪些独特优势?
正文完
 0
评论(没有评论)