본문으로 건너뛰기
cccskills
무료GitHub에 공개

spawn-walkers

Add pedestrians to a CARLA map and let them walk autonomously. Adjust crowd size, walking speed, road-crossing frequency, and placement seeds, create stationary crowds, and remove pedestrians together with their movement controllers in the correct order.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Spawns pedestrians that wander autonomously via WalkerAIController, and destroys them in the correct order. Pairs each walker.pedestrian.* with a controller.ai.walker, places them on the navigation mesh, and sends them to random navmesh points at walking speed. Use when the user asks to "spawn pedestrians/walkers", "add people/crowds", "make pedestrians walk around", or "remove the walkers". Reads the world settings first: if the world is already synchronous it never ticks it, and if it is asynchronous it makes it synchronous and drives the clock itself.

설치 방법 보기

이럴 때 유용합니다

  • Adding pedestrians who walk around a map
  • Reusing pedestrian placement with a fixed seed
  • Adjusting walking speeds and road crossings
  • Removing pedestrians and their controllers

포함된 파일(5)

  • SKILL.md8.4 KB
  • references/walkers.md3.1 KB
  • scripts/check_env.sh2.1 KB
  • scripts/env.sh1.1 KB
  • scripts/walkers.py20.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Spawn wandering pedestrians

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.

Populate the map with pedestrians that walk around on their own. Each is a walker.pedestrian.* body paired with a controller.ai.walker that steers it to random points on the navigation mesh. The deliverable is a live, moving crowd; destroy tears it down cleanly.

By default they wander indefinitely: on spawn every controller is start()ed, given one random navmesh destination, and a random walking speed. That single target is enough — CARLA's walker AI automatically picks a fresh random destination each time a walker arrives (confirmed in LibCarla's nav code), so the crowd roams forever with no re-targeting loop. Pass --no-wander for a stationary crowd (controllers left unstarted).

This needs a navmesh — validate it first with the debug-navmesh skill if walkers won't move.

The controllers stop when the client that started them exits. Same rule as the Traffic Manager, and it is the reason a fire-and-forget spawn leaves the crowd standing still. Pass --hold: the process stays alive and the crowd keeps walking.

It is not primarily about pumping ticks, which is what this skill used to say. The two were confounded, because --hold both keeps the client alive and pumps. Separating them needed a second client owning a synchronous clock; measured on 0.10.0, walkers spawned against a world ticked by a traffic client:

setupresult
spawn, process exits (another client ticking)0/15 move
a separate client issues start() and stays alive15/15 move, then stop when it exits
spawn --hold, observing only, never ticking10/10 move, 9.94 m in 8 s

The first row has a second symptom worth knowing: a later start() on those controllers is accepted rather than rejected as already-started, which proves the original call never landed. _ensure_walking therefore verifies by displacement and re-issues (--retries) instead of trusting start().

Ticks still have to come from somewhere, of course — that is the clock rule below, not the walkers' own business.

The clock rule

Read the world settings before doing anything:

  • already synchronous — another client owns the clock. Never call tick(); observe with wait_for_tick(). Ticking a world you do not own is what silently drops commands like start().
  • asynchronous — this client may switch it to sync (--delta, default 20 Hz) and become the ticker. --no-sync opts out.

Either way the previous settings are restored on release: a synchronous world with nothing ticking does not advance at all, and is indistinguishable from a hung server. So stop a holder with Ctrl+C (SIGINT), never kill -9 — the restore runs in a finally.

Walkers are also spawned --z-offset (default 2.0 m) above the navmesh point: spawning at the navmesh z is rejected on 0.10.0 with "Spawn failed because of collision at spawn position" (+0.5 still fails, +1.0 is the first that works).

Instructions

Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh), clear FAILs
- [ ] Step 2: (if walkers won't move) validate the navmesh — debug-navmesh
- [ ] Step 3: Spawn N walkers with --hold (the controllers die with the client)
- [ ] Step 4: Verify visually / via the world-data skill; spawn reports its count
- [ ] Step 5: Ctrl+C the held process, then destroy (controllers first, then walkers)

Commands need CARLA_HOST/CARLA_PORT from scripts/env.sh.

Step 1: Check prerequisites

bash scripts/check_env.sh

Step 3-5: Spawn / roam / destroy

source scripts/env.sh

# 30 pedestrians wandering at 1.0-1.8 m/s — --hold keeps this client alive, and
# the controllers stop the moment it exits
python3 scripts/walkers.py spawn --count 30 --hold

# reproducible placement (still wanders forever)
python3 scripts/walkers.py spawn --count 50 --seed 42

# more road-crossing, faster walkers
python3 scripts/walkers.py spawn --count 20 --cross-factor 0.4 --speed-min 1.4 --speed-max 2.2

# a stationary crowd (no autonomous movement)
python3 scripts/walkers.py spawn --count 20 --no-wander

python3 scripts/walkers.py destroy        # correct-order teardown

Verify

The spawn command reports how many walkers + controllers it created (they should be equal). Watch them move on a rendered server; count/inspect live actors with the world-data skill. Fewer than requested is normal at high counts (navmesh points collide) — the spawn command reports the shortfall.

Examples

Example 1: add a crowd

User says: "spawn 40 pedestrians walking around"

spawn --count 40 --hold. They head to random navmesh points and keep walking for as long as that command runs; it reports how many spawned.

Example 2: a reproducible pedestrian scene

User says: "same 25 pedestrians every run"

spawn --count 25 --seed 7. They wander indefinitely; the seed fixes placement.

Example 3: clean up

User says: "remove all the pedestrians"

destroy — stops and removes controllers first, then the walkers.

Troubleshooting

Problem: walkers spawn but stand still (walk animation plays, no movement) Cause: in order of likelihood — (1) the spawning client exited, so its controllers stopped; (2) start() was dropped, which happens when the client ticked a world it did not own; (3) nothing is advancing the world at all; (4) the navmesh. It looks identical in all four cases. Solution: spawn with --hold. Obey the clock rule above — never tick() a world that is already synchronous. _ensure_walking re-issues start() automatically and reports how many are confirmed walking, so a silent failure is now a printed number. Only if that still says 0, validate the navmesh with debug-navmesh — a PASS there rules the map out.

Problem: a crowd looks frozen but get_velocity() is the evidence Cause: on this build nav-driven walkers report get_velocity() ≈ 0 the entire time they are walking — measured 10/10 walking by displacement while every one of them read below 0.1 m/s. Solution: judge movement by displacement between two samples, never by velocity. This applies to your own checks as much as to this skill's.

Problem: far fewer spawned than requested (or zero) Cause: Spawn failed because of collision at spawn position. At high counts random navmesh points collide with each other; all of them fail if the vertical offset is too small (0.10.0 rejects the bare navmesh z). Solution: keep --z-offset at its 2.0 m default — a count of 10 returning 0 is an offset problem, not a crowding one. Then retry, lower the count, or batch.

Problem: errors / ghost actors after cleanup Cause: walkers destroyed before their controllers (wrong order). Solution: always use destroy here — it stops controllers and removes them first, then the walkers.

Problem: pedestrians constantly walk into the road Cause: high --cross-factor. Solution: lower it (default 0.1); 0 keeps them on sidewalks.

Outputs

A live crowd of wandering pedestrians (walker + controller pairs) on the server. No file. destroy removes them in the safe order.

Detail (the two-phase batch spawn, controller API, navmesh dependency, sync optionality, destroy order) in references/walkers.md.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 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월 20일 업데이트

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월 20일 업데이트

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월 20일 업데이트

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월 20일 업데이트

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월 20일 업데이트

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월 20일 업데이트

carla-simulator의 스킬 모두 보기

이 스킬의 문제 신고