Add new props

Props are the assets that populate the scene, besides the map, and the vehicles. That includes streetlights, buildings, trees, and much more. The simulator can ingest new props anytime in a simple process. This is really useful to create customized environments in a map.


Prepare the package

Create the folder structure

1. Create a folder inside carla/Import. The name of the folder is not relevant.

2. Create the subfolders. There should be one general subfolder for all the props, and inside of it, as many subfolders as props to import.

3. Move the files of each prop to the corresponding subfolder. A prop subfolder will contain the .fbx mesh, and optionally, the textures required by it.

For instance, an Import folder with two separate packages should have a structure similar to the one below.

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

Create the JSON description

Create a .json file in the root folder of the package. Name the file after the package. Note that this will be the distribution name. The content of the file will describe a JSON array of maps and props with basic information for each of them.

Maps are not part of this tutorial, so this definition will be empty. There is a specific tutorial to add a new map.

Props need the following parameters.

  • name of the prop. This must be the same as the .fbx.
  • source path to the .fbx.
  • size estimation of the prop. The possible values are listed here.
    • tiny
    • small
    • medium
    • big
    • huge
  • tag value for the semantic segmentation. If the tag is misspelled, it will be read as Unlabeled.
    • Bridge
    • Building
    • Dynamic
    • Fence
    • Ground
    • GuardRail
    • Other
    • Pedestrian
    • Pole
    • RailTrack
    • Road
    • RoadLine
    • SideWalk
    • Sky
    • Static
    • Terrain
    • TrafficLight
    • TrafficSign
    • Unlabeled
    • Vegetation
    • Vehicles
    • Wall
    • Water

In the end, the .json should look similar to the one below.

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

Warning

Packages with the same name will produce an error.


Ingestion in a CARLA package

This is the method used to ingest the props into a CARLA package such as CARLA 0.9.8.

A Docker image of Unreal Engine will be created. It acts as a black box that automatically imports the package into the CARLA image, and generates a ditribution package. The Docker image takes 4h and 400GB to be built. However, this is only needed the first time.

1. Build a Docker image of Unreal Engine. Follow these instructions to build the image.

2. Run the script to cook the props. In the folder ~/carla/Util/Docker there is a script that connects with the Docker image previously created, and makes the ingestion automatically. It only needs the path for the input and output files, and the name of the package to be ingested.

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

3. Locate the package. The Docker should have generated the package Package01.tar.gz in the output path. This is the standalone package for the assets.

4. Import the package into CARLA.

  • On Windows extract the package in the WindowsNoEditor folder.

  • On Linux move the package to the Import folder, and run the script to import it.

cd Util
./ImportAssets.sh

Note

There is an alternative on Linux. Move the package to the Import folder and run the script Util/ImportAssets.sh to extract the package.


Ingestion in a build from source

This is the method to import the props into a CARLA build from source.

The JSON file will be read to place the props inside the Content in Unreal Engine. Furthermore, it will create a Package1.Package.json file inside the package's Config folder. This will be used to define the props in the blueprint library, and expose them in the Python API. It will also be used if the package is exported as a standalone package.

When everything is ready, run the command.

make import

Warning

Make sure that the package is inside the Import folder in CARLA.


That is all there is to know about the different ways to import new props into CARLA. If there are any doubts, feel free to post these in the forum.