添加新道具

除了地图和车辆之外,道具是场景中的资产。其中包括路灯、建筑物、树木等等。模拟器可以随时通过简单的过程导入新道具。这对于在地图中创建自定义环境非常有用。


准备包

创建文件夹结构

1. 在 carla/Import 里面创建一个文件夹 . 文件夹的名称不相关。

2. 创建子文件夹。 应该有一个通用子文件夹来存放所有道具,并且在其中包含与要导入的道具一样多的子文件夹。

3. 将各个道具的文件移动到相应的子文件夹中。 道具子文件夹将包含.fbx 网格物体,以及它所需的纹理(可选)。

例如,包含两个独立包的 Import 文件夹应具有类似于以下结构的结构。

Import
│
├── Package01
│   ├── Package01.json
│   └── Props
│       ├── Prop01
│       │   ├── Prop01_Diff.png
│       │   ├── Prop01_Norm.png
│       │   ├── Prop01_Spec.png
│       │   └── Prop01.fbx
│       └── Prop02
│           └── Prop02.fbx
└── Package02
    ├── Packag02.json
    └── Props
        └── Prop03
            └── Prop03.fbx

创建 JSON 描述

在包的根文件夹中创建一个 .json 文件。在包之后命名文件。请注意,这将是发行版名称。文件的内容将描述地图 maps 和道具 props 的 JSON 数组,以及每个地图和道具的基本信息。

Maps 不是本教程的一部分,因此该定义将为空。有一个具体的教程来 添加新地图

Props 需要以下参数。

  • 道具的 name 。这必须与 .fbx 相同。
  • .fbxsource 路径。
  • 道具的 size 估计。此处列出了可能的值。
    • tiny
    • small
    • medium
    • big
    • huge
  • 语义分割的 tag 。如果标签拼写错误,它将被读取为 Unlabeled.
    • Bridge
    • Building
    • Dynamic
    • Fence
    • Ground
    • GuardRail
    • Other
    • Pedestrian
    • Pole
    • RailTrack
    • Road
    • RoadLine
    • SideWalk
    • Sky
    • Static
    • Terrain
    • TrafficLight
    • TrafficSign
    • Unlabeled
    • Vegetation
    • Vehicles
    • Wall
    • Water

最后,.json应该与下面的类似。

{
  "maps": [
  ],
  "props": [
    {
      "name": "MyProp01",
      "size": "medium",
      "source": "./Props/Prop01/Prop01.fbx",
      "tag": "SemanticSegmentationTag01"
    },
    {
      "name": "MyProp02",
      "size": "small",
      "source": "./Props/Prop02/Prop02.fbx",
      "tag": "SemanticSegmentationTag02"
    }
  ]
}

警告

具有相同名称的包将产生错误。


导入到 Carla 包中

这是用于将道具导入到 Carla 包(例如 Carla 0.9.8)中的方法。

将创建虚幻引擎的 Docker 映像。它充当一个黑盒子,自动将包导入到 Carla 镜像中,并生成分发包。Docker 镜像需要 4 小时和 400GB 才能构建。然而,这仅是第一次需要。

1. 构建虚幻引擎的 Docker 镜像。 请按照 以下说明 构建映像。

2. 运行脚本来烘培道具。 ~/carla/Util/Docker 文件夹中有一个脚本,它与之前创建的 Docker 映像连接,并自动进行导入。它只需要输入和输出文件的路径以及要导入的包的名称。

python3 docker_tools.py --input ~/path_to_package --output ~/path_for_output_assets  --package=Package01

3. 定位包。 Docker 应该已经在输出路径中生成了包 Package01.tar.gz。这是资产的独立包。

4. 将包导入 Carla。

  • 在 Windows 上, 将包解压到 WindowsNoEditor 文件夹中。

  • 在 Linux 上, 将包移动到 Import 文件夹,然后运行脚本将其导入。

cd Util
./ImportAssets.sh

笔记

Linux 上有一个替代方案。将包移动到Import文件夹,并运行脚本Util/ImportAssets.sh以提取包。


在源代码构建中导入

这是从源代码将道具导入到源代码构建 Carla 的方法。

将读取 JSON 文件以将道具放入虚幻引擎 Content 中。此外,它将在包的Config文件夹中创建一个 Package1.Package.json 文件。这将用于定义蓝图库中的道具,并在 Python API 中公开它们。如果包作为 独立包 导出,也将使用它。

一切准备就绪后,运行命令。

make import

警告

确保该包位于 Carla 的 Import 文件夹内。


这就是关于将新道具导入 Carla 的不同方法的全部信息。如果有任何疑问,请随时在论坛中发布。