跳到正文
cccskills
免费在 GitHub 公开

package-carla-ue58

Package a CARLA server built with UE 5.8 for distribution, choosing which maps to include. Inspect the resulting files for mismatched containers, missing road data, and exposure settings that can cause runtime failures.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Cooks and packages a shippable CARLA server from a UE 5.8 ue58-dev checkout via the CMake `package` targets (shipping/development/debug/test), scoping the cook with CARLA_MAPS_TO_COOK, and inspects an existing package for the failures a green build hides — stale pak/ucas mismatch, missing staged OpenDrive/TM road data, missing post-process profiles, and Town15's uncookable content. Use when the user asks to "package CARLA UE5", "cook a map", "build a shipping server", "make a distributable CARLA", or a package builds but renders black / has no maps.

查看安装方法

适用场景

  • Packaging a CARLA server with selected maps
  • Investigating a black screen in a packaged server
  • Checking road data and package consistency
  • Identifying the commits included in a package

包含的文件(5)

  • SKILL.md11.1 KB
  • references/packaging.md11.3 KB
  • scripts/check_env.sh7.9 KB
  • scripts/env.sh5.0 KB
  • scripts/package.sh12.0 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Package CARLA on UE 5.8

Paths. scripts/… and references/… below are relative to the directory holding this SKILL.md. Your working directory is the user's project, not that directory, so prefix them with its absolute path or the command is not found.

cmake --build Build/Release --target package          # = package-shipping

That is the whole command. Everything hard about packaging here is in the two things around it:

  • The cook scope is a configure-time option, not a build argument. -DCARLA_MAPS_TO_COOK= is baked into the CMake cache, so changing which maps ship means re-configuring — and re-specifying every other option at the same time.
  • BUILD SUCCESSFUL does not mean the package is usable. Four separate defects produce a package that builds clean and then fails at runtime. All four are detectable after the fact, which is what this skill's inspect mode is for.

Instructions

Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh)
- [ ] Step 2: Decide the cook scope and re-configure for it
- [ ] Step 3: Package (1-2 h)
- [ ] Step 4: Inspect the artifact — do NOT trust the exit code
- [ ] Step 5: Run it (run-carla-ue58-server)

Step 2: Cook scope

source scripts/env.sh

bash scripts/package.sh scope                       # what is configured right now
ROS2=1 MAPS="Town10HD_Opt,Town12,Town13,Town_C" \
    bash ../build-carla-ue58/scripts/build.sh configure

Package paths, +-separated. Small maps are /Game/Carla/Maps/<Town>; large World Partition maps are /Game/Carla/Maps/<Town>/<Town>.

Exclude Town15. Its one-file-per-actor packages each carry a serialized reference to a MaterialInstanceDynamic that lives in the map package — MIDs are transient and never saved, so the import can never resolve. 573 unique LoadErrors, and the cook fails on the error count: Failure - 573 error(s) → AutomationTool exiting with ExitCode=25. It has never cooked on Linux or Windows. This is a content defect, not a configuration mistake.

Leaving CARLA_MAPS_TO_COOK empty does not cook everything — bCookAll=False, so UAT falls back to DefaultGame.ini's five MapsToCook entries: Town10HD_Opt, OpenDriveMap, TestMaps/EmptyMap, Mine_01, Town15/Town15. Town15 is in that list, so the out-of-the-box package build fails. An explicit scope is effectively mandatory. check_env.sh warns on both cases.

Keep OpenDriveMap in the scope unless you know you do not need it: it is the host level for client.generate_opendrive_world(). Measured — with it excluded, that call fails with a bare std::exception while the same call against -game mode succeeds in 7.3 s.

Step 3: Package

bash scripts/package.sh build                       # shipping (default)
CONFIG=development bash scripts/package.sh build    # package-development

or directly:

cmake --build Build/Release --target package             # shipping
cmake --build Build/Release --target package-development
cmake --build Build/Release --target package-debug
cmake --build Build/Release --target package-test
cmake --build Build/Release --target package-debuggame

Under the hood this is UAT BuildCookRun with -pak -iostore, so the output is an IoStore container (.ucas + .utoc) plus a .pak, not a loose file tree. Expect 1–2 h and ~12 GB.

Delete Build/<preset>/Package/ first if you care what ends up inside. The archive step copies over a previous archive without deleting (Unreal/Package/RemoveUnrealPackageExtraFiles.cmake says so), so a package can carry files from builds long past. Measured: a pre-existing package contained Carla/Maps/Town12/OpenDrive/Town12.xodr that a clean build does not produce.

Stop any running packaged server first. It holds the pak files open; UAT then fails to replace the .ucas, retries, and can still exit BUILD SUCCESSFUL with a fresh .pak/.utoc beside a stale .ucas — internally inconsistent, because the .utoc indexes the .ucas by byte offset. POSIX unlink semantics make this less likely on Linux than on Windows, but the check costs nothing.

Step 4: Inspect — the part that matters

bash scripts/package.sh inspect

Checks, on the artifact rather than the log:

CheckFailure it catches
pak/ucas/utoc timestamps within one buildthe stale-.ucas inconsistency above
Town1x/OpenDrive staged when that town is cookeda large map with no road network
Config/PostProcess stagedblack screen: missing per-town exposure profile
OpenDriveMap in the cook scopegenerate_opendrive_world() failing with std::exception
shipping binary + launcher present and executablea stage that dropped the binary
VERSION git hasheswhich carla / content / engine commits actually went in
bundled wheel under PythonAPI/carla/dist/a package whose client cannot be installed

What DirectoriesToAlwaysStageAsUFS actually delivers, measured on a clean 1-map build with the engine's own UnrealPak -List (80 UFS entries, 20 .xodr):

PathShips?
Carla/Maps/OpenDrive/*.xodryes — all 19, regardless of cook scope
Carla/Maps/TM/*.binyes
Carla/Maps/Town15/{OpenDrive,Nav,TM}yes (even though Town15 never cooks)
Carla/Config/** incl. PostProcessyes — Carla/Config IS recursive
Carla/Maps/Town1x/TM/*.binyes
Carla/Maps/Town1x/OpenDrive/*.xodrNO

So the gap is exactly two entries, not five: Carla/Maps/Town12/OpenDrive and Carla/Maps/Town13/OpenDrive. A cleanly built package that cooks Town12 or Town13 ships those towns without OpenDRIVE. (Why the TM subdir stages and OpenDrive does not is not explained by the ini.)

Step 5: Run it

cd ../run-carla-ue58-server && bash scripts/run_server.sh package

A packaged server works for clients — measured: get_world(), spawning and navigation are all fine. What is broken is map handling: get_available_maps() returns [], and load_world() resolves only /Game/Carla/Maps/<Name>, so a cooked map loads by exact name while nested large maps (Town12/Town12) and imported maps under /Game/<Pkg>/Maps/ do not. Use -game mode when you need discovery or map switching. Detail and numbers in [[run-carla-ue58-server]].

Examples

Example 1: "package CARLA with just Town10"

MAPS="Town10HD_Opt" re-configure, package.sh build, package.sh inspect. The fastest useful package; skips the large-map staging concerns entirely.

Example 2: "my packaged Town_C renders black"

package.sh inspect. If Config/PostProcess is missing from the pak, that is the cause — Default.json uses AEM_Manual exposure where the per-town profiles use AEM_Histogram, so without the profile the scene draws correct geometry at the wrong exposure. Add the staging entry and re-package.

Example 3: "the package built but has no maps"

Check scope first: an empty CARLA_MAPS_TO_COOK cooks everything and fails on Town15, and a ;-separated or filesystem-path value cooks nothing while still reporting success.

Example 4: "which commits are in this package?"

package.sh inspect prints the VERSION file: carla, content and engine git hashes. Worth recording alongside any results you publish.

Troubleshooting

Problem: Failure - 573 error(s), 78 warning(s) / ExitCode=25 (Error_UnknownCookFailure) Cause: Town15 in the cook scope. Solution: exclude it. Nothing you configure can fix it; the content is wrong.

Problem: cook succeeds, package has no maps Cause: CARLA_MAPS_TO_COOK in the wrong form — filesystem paths, or ; instead of +. Solution: package.sh scope shows the current value; the MAPS= knob on build.sh configure builds a correct one.

Problem: BUILD SUCCESSFUL but the server crashes on start Cause: possibly the stale-.ucas inconsistency from packaging over a running server. Solution: package.sh inspect compares timestamps; stop servers and re-package.

Problem: packaged large map loads empty / black screen Cause: either the OFPA mount patch is missing (empty World Partition) or the post-process profiles were not staged (wrong exposure). The two look similar; the distinguishing symptom is that with the exposure problem the traffic lights and signs still draw correctly. Solution: check_env.sh reports the patch; package.sh inspect reports staging.

Problem: the cook logs dozens of Invalid duplicate copies of ExternalActor Cause: expected side effect of the OFPA mount patch — every external package becomes reachable under two names, and the AssetRegistry discards one alphabetically. 74–78 warnings per cook. Solution: none needed; it keeps the name the map expects. Worth removing properly by scoping the mount, but it is not a failure.

Problem: Zen server does not survive cook → stage Cause: known both platforms, different fixes. On Linux the route used is [Zen.AutoLaunch] LimitProcessLifetime=False, which needs no manual server; Windows uses -NoZenAutoLaunch and requires zenserver.exe --port 8558 already running. Solution: the Linux setting; do not copy the Windows recipe.

Problem: packaged map switching does not work / get_available_maps() is empty Cause: two raw-filesystem checks that cannot work inside a .pak (GetAllMapNames() uses FindFilesRecursive(..., "*.umap"), LoadNewEpisode() gates on FPaths::FileExists()). Fixed on ue58-dev-windows via AssetRegistry discovery; not merged into ue58-dev. Solution: no fix on this branch. Use the editor for multi-map work, or cherry-pick that change.

Outputs

Build/<preset>/Package/Carla-<version>-Linux-<config>/ containing Linux/CarlaUnreal.sh + the shipping binary, Linux/CarlaUnreal/Content/Paks/ (pakchunk0-Linux.{pak,ucas,utoc} + global.{ucas,utoc}), a bundled PythonAPI/ with its wheel, and VERSION with the three git hashes — plus a .tar.gz of the same. inspect is read-only.

Cook/stage mechanics, the staging list, and the full defect register are in references/packaging.md.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Add a message type to CARLA's native ROS 2 interface. Create its C++ data structure, serialization code for transmission, type identity hash, registration, and tests, with Docker-based hash calculation and build checks.

中文简介正在准备中。当前显示英语简介。

  • Adding a standard ROS 2 message type missing from CARLA
  • Defining a custom carla_msgs message
  • Investigating type-hash warnings
carla-simulator/carla1.5万2026年10月23日 更新

Extend CARLA’s native ROS 2 interface to publish sensor data or receive vehicle commands. Covers topic implementation, registration, data connections, and verification, plus adding middleware, the communication layer used to exchange messages.

中文简介正在准备中。当前显示英语简介。

  • Publish obstacle sensor data to ROS 2
  • Add a topic for vehicle speed commands
  • Integrate another communication middleware
carla-simulator/carla1.5万2026年10月23日 更新

Summarize ScenarioRunner results to see which scenarios passed and which checks failed. Compare runs before and after changes, or analyze recorded driving to produce measurements and plots of vehicle distance and deviation from the lane center.

中文简介正在准备中。当前显示英语简介。

  • Checking scenario pass and fail results
  • Comparing results before and after controller changes
  • Plotting vehicle distances from a recorded run
carla-simulator/carla1.5万2026年10月23日 更新

Checks a local CARLA checkout for missing API documentation, outdated references, broken links, and pages absent from navigation. Produces a grouped Markdown report without building the project or running the simulator.

中文简介正在准备中。当前显示英语简介。

  • Reviewing documentation before a release
  • Finding missing or outdated API references
  • Checking broken links and navigation gaps
carla-simulator/carla1.5万2026年10月23日 更新

Read and display CARLA object bounding boxes, then project them onto a camera image as 2D rectangles. Export an annotated PNG and box coordinates in JSON for object detection annotation work.

中文简介正在准备中。当前显示英语简介。

  • Adding vehicle boxes to a camera image
  • Exporting box coordinates for detection annotations
  • Checking vehicle dimensions
carla-simulator/carla1.5万2026年10月23日 更新

Builds CARLA's ue4-dev branch on Linux, producing the Unreal Engine 4.26 editor, server modules, and an installed Python client package. Fetches required content, optionally compiles native ROS 2 support, and verifies the build against a source-built server.

中文简介正在准备中。当前显示英语简介。

  • Building CARLA ue4-dev from source
  • Compiling CARLA with native ROS 2 support
  • Building the Python client for an existing environment
carla-simulator/carla1.5万2026年10月23日 更新

查看 carla-simulator 的全部技能

报告此技能的问题