Skip to Content
Frames & units

Frames & units contract

Freeze this before CAD, firmware zeroing, or sim. Everything downstream trusts these names.

Conventions (fill in as the design locks)

ItemDecision
World / gravity frameTBD (e.g. Z-up, right-hand)
Base / pelvis frameTBD
Joint axis senseRight-hand rule; positive = TBD
Encoder zeroMechanical stop / mid-range / calibrated home — TBD per joint
IMU mount link / extrinsicTBD (Day 03); units m/s2m/s^2, rad/srad/s
Contact frames (feet/hands)TBD (Day 03); wrench N, N·m
Lengthsmeters
Anglesradians in software; degrees only in human docs
Mass / inertiakg, kg·m² about link CoM
Torque / forceN·m, N
Timeseconds; loop rates in Hz; declare bus timebase
Voltage / currentV, A on named rails; publish bus and logic domains separately
LinkParentJointAxisLimits (rad)Notes
—————Add first limb here

Message / bus rates (targets)

LoopRateOwner
Current / FOC10–20 kHzMCU
Joint torque / impedance1–2 kHzMCU
Contact / FT sample0.5–2 kHzMCU
IMU raw200–1000 HzMCU
State estimation100–500 Hzmid compute
Behavior / planning≤50 Hzmid / high compute
Power / BMS publish10–100 Hz (faster under fault)BMS / mid MCU

Clock domain & bus (Day 04)

ItemDecision
SpineTBD (CAN-FD / EtherCAT / hybrid)
Time master / clock_domain nameTBD (e.g. ec_dc, host_mono)
Cycle time TcT_cTBD
Node ID mapTBD (link from bus config)
age_budget_ms by message classTBD — JointState / ImuSample / ContactState / PowerState / EstimatorState
Sync mechanismTBD (DC / heartbeat / host-stamp early only)

Power domain & voltage (Day 05)

ItemDecision
Pack nominal / series countTBD
High-power DC bus railTBD (e.g. pack-direct ~48 V class)
Logic / sensor railsTBD (e.g. isolated 5 V / 3.3 V)
Soft-sag / soft-UV / UVLO thresholdsTBD — label measured vs illustrative
torque_scale / max_iq_abs consumerDay 02 joint command path
STO / safe-torque-cut ownerTBD (hardware gate-power kill)

Estimation & contact modes (Day 06)

ItemDecision
Estimator owner / output rateTBD (target 100–500 Hz; one writer of EstimatorState)
Process model classTBD (EKF / complementary / hybrid)
Stale policyTBD — hold last + stale vs process-model propagate
Contact mode listTBD (e.g. FLIGHT / SS / DS) and how contact_set is derived
Power-aware residual ruleTBD — downweight / gate on torque_scale or PowerFault
Twin delay / dropout / sag hooksTBD — must match hardware age_budget_ms and Day 05 derate

Upper-body / EE frames (Day 10)

ItemDecision
EE / wrist frames (L/R)TBD — named links aligned with EstimatorState
Hand / grasp framesTBD — aperture units; wrench N, N·m if instrumented
ManipulationCommand owner / rateTBD (mid-rate; one writer of manip intent)
Hand role tagsFREE / CLAIM_SUPPORT / MEASURED_SUPPORT — measured contact_set owns truth
Mid-reach abort signalsstale / POWER_GATED / low torque_scale → abort/soften EE tasks
Twin reach / sag hooksTBD — matched arm-load peaks and contact delay as hardware

Soft learned / teleop / arbiter contracts (Days 14–16)

Soft writers only. Measured ContactState still owns hard support membership into one WBC/QP. never_hard binds residual, scene, policy, teleop, and arbiter alike. Mid / host rate with age_ms — never µs / EtherCAT cyclic until jitter is measured.

ItemDecision
LearnedResidual / ResidualCorrection owner / rateTBD (Day 14) — soft additive on estimate features / soft task refs / AffordanceProposal ranking only
SoftSceneGraph / Object / Support / Relation nodesTBD (Day 14) — enrich AffordanceProposal CLAIM candidates only
LearnedPolicy / PolicyAction / PolicyCommand owner / rateTBD (Day 15) — mid / host; soft refs / AffordanceProposal ranking / CLAIM admit only; closed_loop: true; never_hard: true
SimToRealGate status / checksTBD (Day 15–16) — RED/YELLOW/GREEN; block free closed-loop / shared autonomy until GREEN
TeleopCommand / OperatorIntent source / rateTBD (Day 16) — STICK / VR / EE_DELTA / BUTTON; mid / host; soft refs / CLAIM admit only; never_hard: true
SharedAutonomyArbiter modesTELEOP_ONLY | POLICY_ONLY | BLEND / SHARED | OPERATOR_OVERRIDE | ABORT — all still soft; OVERRIDE ≠ hard ownership / MEASURE skip
Soft vs hard ownershipTeleop / policy / arbiter / residual / scene / affordance = soft; measured FOOT|HAND|OBJECT = hard cones + Fz≥0F_z \ge 0; one WBC/QP; yield to Day 08 gait / Day 09 recovery / Day 05 power
Mid-arbitration abort signalsstale / POWER_GATED / flicker / residual disagree / operator dropout / reward-hack / SimToReal fail → abort/demote
Twin mid-arbitration hooksteleop vs policy vs MEASURE vs gait vs recovery fights; operator latency/dropout; false CLAIM from intent; reward-hack to hard write — must match hardware
Rate / jitter ruleNo neural net or human stick path inside µs / EtherCAT cyclic until jitter measured

Runtime safety supervisor (Day 17) + logging / replay / hygiene (Day 18) + offline / shadow / canary (Day 19) + HIL regression farm (Day 20)

Supervisor sits above soft teleop / policy / arbiter. Logging tags soft vs measured vs power vs stage without promoting scores to MEASURED. Replay is soft-only. Hygiene quarantines dishonest episodes and keeps late-kill / demote / ESTOP as negatives. Offline eval / shadow / canary score and admit under the same gates — still soft; MEASURE and Day 05 still bind. HIL farm schedules twin+bench suites that re-score / re-run / dry-run those paths; RegressionGate fails closed on canary admit when races or hygiene regress — still soft; never a farm plant.

ItemDecision
RuntimeSafetySupervisor stage / monitorsTBD (Day 17) — GREEN | WARN | INHIBIT_SOFT | DEMOTE_CONTACTS | TORQUE_SCALE_CLAMP | ESTOP; mid / host; soft intents never_hard; hard kill via Day 05 only
Kill-chain hard ownershipDay 05 BMS / torque_scale / FOC / physical+digital ESTOP — supervisor requests, never dual-writes
OPERATOR_OVERRIDE vs kill-chainOVERRIDE still soft; cannot bypass BMS / gait / recovery / hard stages (live or replay)
EpisodeLogger schema / labelsTBD (Day 18) — LABEL_SOFT_INTENT | LABEL_SUPERVISOR_STAGE | LABEL_MEASURED_CONTACT | LABEL_POWER | LABEL_ESTIMATE | LABEL_GATE | LABEL_NEGATIVE_KILL; preserve age_ms / stage / gate / POWER_GATED / residual disagree
ReplayHarness modeSOFT_ONLY — feeds teleop / policy / arbiter only; forbid cones / JointCommand-as-measured / dual-write torque_scale / ContactState writes
DatasetHygiene decisionsADMIT | QUARANTINE | KEEP_NEGATIVE — quarantine reward-hack / OVERRIDE fight / missed POWER / promote-w/o-measure / dual-write / false-green / soft→MEASURED / stripped honesty; keep late-kill / demote / ESTOP
Soft vs MEASURED on exportTeleop score / policy reward / blend / supervisor stage ≠ MEASURED; strip_honesty refused on free-export path
Twin logging/replay racesStale age stripped; WARN relabeled MEASURED; replay writing cones; clock skew dropping stage; OVERRIDE-as-GT; pretty-bag cleaning — SimToRealGate blocks free harvest until GREEN
Rate / jitter ruleLogger / replay / hygiene mid / host only — no µs / EtherCAT cyclic until jitter measured; no nets reconstructing cones in µs loops
OfflineEvaluator metricsTBD (Day 19) — soft metrics on SOFT_INTENT only; measured on MEASURED only; supervisor-aware negatives; age_ms / SimToRealGate / POWER_GATED / residual honesty; refuse green on reward alone
ShadowRunner modeOBSERVE_ONLY — ShadowAction / ShadowScore; forbid JointCommand / cones / dual-write torque_scale / clear stage; first-class dropout / live disagree / residual / stage↑
CanaryDeployer admitPOLICY_ONLY | BLEND (small α) only when OfflineEvaluator + DatasetHygiene + RuntimeSafetySupervisor + SimToRealGate green; still soft; MEASURE before PROMOTE; abort/rollback on escalate / stale / POWER_GATED / gate fail / residual / hygiene spike
OVERRIDE vs canaryOVERRIDE still soft; cannot force canary past Day 05 hard path / BMS / gait / recovery
Twin eval/shadow/canary racesFalse-green offline; shadow hard-write; canary skips MEASURE; dual-write torque_scale; OVERRIDE-as-bypass; clock skew in canary window; reward-hacked bags green offline — SimToRealGate blocks free canary until GREEN
Rate / jitter rule (Day 19)Offline / shadow / canary mid / host only — no µs / EtherCAT cyclic until jitter measured; no nets in µs loops
HilFarm scheduleTBD (Day 20) — continuous twin+bench host; same schema phys↔twin; mid/host; never second plant; forbid JointCommand / cones / dual-write torque_scale / clear stage / skip-MEASURE; require ESTOP pairing
HilSuite scenariosBAG_REPLAY | RACE_INJECT | OFFLINE_RESCORE | SHADOW_OBSERVE | CANARY_DRY_RUN — supervisor-aware negatives / age_ms / POWER_GATED / gate / residual / hygiene spike required; refuse soft→MEASURED / strip honesty
RegressionGateFail-closed soft-admit blocker — RED on suite regression / hygiene spike / false-green offline / shadow hard-write / measure-skip / dual-write / OVERRIDE-bypass / clock skew / unpaired ESTOP; never hard writes
OVERRIDE vs farmOVERRIDE still soft; cannot force farm green or canary past Day 05 hard path / BMS / gait / recovery
Twin+bench farm racesHonesty-stripped suite green; replay without age/stage; dual-write for bench; OVERRIDE-as-bypass; skip MEASURE because suite busy; unpaired ESTOP; false-green Offline re-score; shadow hard-write under schedule; canary dry-run as free admit — SimToRealGate blocks continuous farm / free canary until GREEN
Rate / jitter rule (Day 20)Farm / suite / gate mid / host only — no µs / EtherCAT cyclic until jitter measured; no nets in µs loops
Last updated on