Skip to main content

control-physics-traffic

Use when an AlpaSim task concerns vehicle state, controller or MPC selection, ground-mesh physics, CATK traffic sessions, handover behavior, or backend/data requirements for these services.

Jump to install

Source facts

Repository
VectorSpaceLab/AREX-Skill
Last source activity
August 26, 2026 at 16:31
Detected SKILL.md language
English
Stars
12
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
6 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
control-physics-traffic
description
Use when an AlpaSim task concerns vehicle state, controller or MPC selection, ground-mesh physics, CATK traffic sessions, handover behavior, or backend/data requirements for these services.
disable-model-invocation
true
metadata
{"disco-role":"operating"}
license
Apache 2.0
# Control, physics, and traffic Use this sub-skill for the three simulation components that close the motion loop: - **Controller:** planar dynamic-bicycle vehicle state, linear/nonlinear MPC, trajectory tracking, and the controller gRPC session. - **Physics:** Warp ground-mesh intersection that corrects vehicle/object poses; it is not a collision engine or a replacement for vehicle dynamics. - **Traffic:** the CATK-backed traffic gRPC service, including session history, logged replay, handover, prediction batching, and failure statuses. Do not use this sub-skill to compose a wizard deployment, choose a driver policy, or edit protobufs. Route those to `simulation-wizard`, `drivers-and-plugins`, or `grpc-and-developer-tools`, respectively. Use `runtime-services` for the runtime's event loop and service orchestration, and `evaluation-and-logs` for post-run logs and metrics. ## Start with a capability and backend check 1. Identify the service being changed or queried. Record the simulation time unit, coordinate frame, scene identifier, and whether the request is replay or closed-loop inference. 2. Run the bundled, read-only probe before debugging imports or optional backends: Read [backend compatibility](references/backend-compatibility.md), then run the bundled [backend checker](scripts/check_backend.py) before debugging imports or optional backends: ```bash python scripts/check_backend.py python scripts/check_backend.py --usdz-folder /data/scenes \ --model-config /models/catk/config.yaml \ --checkpoint /models/catk/latest.ckpt \ --token-dir /models/tokens ``` The second form only inspects supplied paths; it never downloads or changes them. Treat warnings about CUDA, PyG extensions, USDZ, or model assets as capability limits, not as proof of a working CATK service. 3. For a controller-only CPU smoke test, use the package's focused tests or instantiate `LinearMPC` with an 8-element state and a time-stamped `Trajectory`. For a nonlinear smoke test, ensure `do_mpc` and CasADi are importable before the first `compute_control` call. 4. For physics, use a small valid PLY ground mesh and positive AABB dimensions. `PhysicsBackend` constructs Warp mesh data and launches CUDA kernels during `update_pose`; a successful Python import is not a physics execution test. 5. For CATK, verify the scene directory contains `.usdz` files and that the model config, checkpoint, token directory, CUDA device, and matching PyG compiled extensions are all available. Never substitute a static traffic trajectory for a failed post-handover prediction. See [backend compatibility](references/backend-compatibility.md) before installing optional packages and [troubleshooting](references/troubleshooting.md) when a check fails. ## Choose and use the controller 1. Represent the current vehicle state in the documented order `[x, y, yaw, vx_cg, vy_cg, yaw_rate, steering, accel]`. The position and yaw are for the rig origin in the temporary inertial frame; `vx_cg` and `vy_cg` are body-frame CG velocities. Do not silently treat rig-frame lateral speed as CG lateral speed. 2. Use **linear MPC** (`mpc_implementation: linear`) as the normal fast choice. It linearizes the bicycle model about the current state and solves an OSQP QP. Use **nonlinear MPC** for aggressive maneuvers or tight turns when the slower do_mpc/CasADi/IPOPT solve is acceptable. This is a modeling trade-off, not a claim that nonlinear is always more stable. 3. Keep `n_horizon` and `dt_mpc` consistent with the trajectory sampling. The defaults are 20 steps and 0.1 seconds. Tracking cost begins at `gains.idx_start_penalty` (default 10), while actuator regularization applies to command changes. 4. In a service session, call `start_session` before the first run, provide a non-empty planned trajectory, advance to a strictly later `future_time_us`, and close the session exactly once. The first run lazily constructs the system and creates a CSV controller log. 5. Set `coerce_dynamic_state` when current ground-truth dynamic state should replace the model's velocity, yaw rate, and acceleration before solving. The system converts rig-frame velocity to CG-frame velocity and preserves the integrated pose origin. The exact dataclasses, solver bounds, frame conversion, service invariants, and standalone server flags are in [controller API](references/controller-api.md). ## Apply ground constraints 1. Give the physics service a scene artifact glob ending in `.usdz` and select a scene whose ground mesh is available. The command shape is: ```bash physics_server --artifact-glob '/data/artifacts/*.usdz' \ --host 0.0.0.0 --port 8080 --cache-size 16 ``` `--use-ground-mesh`, `--visualize`, and the cache size affect artifact/backend loading; visualization is optional and may require extra packages. 2. For every pose, physics samples the bottom of the AABB, casts ±Z rays into the Warp mesh, fits a plane, and applies bounded translation/rotation corrections. It deliberately preserves predicted X/Y after correction and returns a status for each pose. 3. Handle `SUCCESSFUL_UPDATE`, `INSUFFICIENT_POINTS_FITPLANE`, `HIGH_TRANSLATION`, and `HIGH_ROTATION` as distinct observations. Repeated high corrections are usually a scene, AABB, timestamp, or upstream pose problem; do not hide them by retrying indefinitely. Physics does not model collisions, full vehicle dynamics, or arbitrary lateral motion. See [physics and traffic](references/physics-and-traffic.md). ## Run a CATK traffic session 1. Start the service only after its Hydra config resolves. A documented local shape is: ```bash catk_trafficsim_server \ --config-path=/path/to/config-dir \ --config-name=server.yaml \ server.port=6200 \ catk.loader.usdz_folder=/data/scenes ``` The model paths and timing settings belong in the resolved config. The wizard normally writes this config for a container deployment; do not make a second deployment recipe here. 2. `start_session` requires a session UUID, scene ID, at least one logged object trajectory including `EGO`, and a positive `handover_time_us`. The service builds a fixed history window (`num_history_steps`, default 16) sampled at `time_step` (default 0.1 s). 3. At or before handover, `simulate` resamples logged trajectories and returns replay. After handover, it resamples the latest history, fills the ego future from the request/update, runs CATK, and merges predicted agent trajectories. Requests are serialized per session but different sessions may reach the inference batcher concurrently. 4. Respect the configured `prediction_steps` (default 5). A request beyond the fixed prediction horizon is `INVALID_ARGUMENT`; missing usable map/model predictions after handover are `FAILED_PRECONDITION`. An unexpected model exception is `INTERNAL`. These statuses are actionable distinctions. 5. Close sessions and retry only after fixing the reported scene, trajectory, horizon, map, model, or backend issue. There is no valid CPU/static fallback for CATK's required post-handover prediction path. Use [physics and traffic](references/physics-and-traffic.md) for the request sequence, config fields, batching semantics, and status mapping. ## Verification and handoff - Run parser/help checks for the bundled script and server commands without starting a daemon or downloading assets. - Run controller system, linear-MPC, nonlinear-MPC, physics-utils, and traffic service/batching tests according to their backend markers. Keep CATK integration tests skipped unless CUDA, matching PyG extensions, USDZ scenes, and model weights are all present. - Test the difficult cases in the review artifact: aggressive-turn controller selection and a CATK `FAILED_PRECONDITION` after handover. The expected answer must name the validation signal and must not invent a fallback. - If a service contract or protobuf message is the issue, hand off rather than duplicating generic message definitions. Record unresolved backend/data gaps explicitly in the verification report.
View on GitHub