Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -375,3 +375,22 @@ cameras that still see it, and use the occluded views as held-out difficulty.
extension point: implement the `MeshBackend` ABC to emit a `PoseTrajectory`, and
the projection/occlusion/manifest path is unchanged. No mesh backend is
implemented in this layer.

### Skeletal-motion DSL (gaits)

`src/multicam_sim/dsl/gait.py` *generates* pose trajectories so a skeleton does
not have to be hand-authored per frame. Three parametric gaits — `walk`
(periodic legs + opposite-phase arms), `reach` (one arm smoothsteps to a
body-local target), `wave` (raised forearm oscillation) — each produce
body-local joint offsets as a function of wall-clock time. A **root path** (any
existing `PathUnion` from the motion DSL) translates the whole skeleton:
`world joint = root.at_time(t) + local offset`. Limbs are rigid: knees and the
reaching elbow are placed by closed-form two-link inverse kinematics with
segment lengths fixed from `height`, so every COCO-17 edge keeps a constant
length on every frame. Frame compilation is driven
through the motion DSL's own `compile_frames`, so `over(seconds)` /
`at_speed` / untimed stretch-to-scene behave exactly as they do for a single
point, and the gait layer adds no second timing model. Everything is kinematic
and fully deterministic (no RNG); the output is a plain `PoseTrajectory`, so
the manifest path above is unchanged.

5 changes: 5 additions & 0 deletions src/multicam_sim/dsl/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from ..noise import CalibrationDrift, NoiseModel, PixelNoise
from .behavior import Behavior, PathBehavior, WaypointBehavior
from .builder import SceneBuilder
from .gait import Gait, ReachGait, WalkGait, WaveGait
from .motion import (
BezierPath,
CirclePath,
Expand All @@ -31,6 +32,7 @@
"CalibrationDrift",
"CameraRig",
"CirclePath",
"Gait",
"HandSweep",
"LinearPath",
"NoiseModel",
Expand All @@ -40,10 +42,13 @@
"PathUnion",
"PixelNoise",
"PoseOverride",
"ReachGait",
"RepeatPath",
"SceneBuilder",
"SequencePath",
"StationView",
"WalkGait",
"WaveGait",
"WaypointBehavior",
"WaypointPath",
]
Loading
Loading