Feature status and limitations#
Scope: the source revision containing this document. “Covered” means specific committed tests exercise a capability; it is not a guarantee for every problem, hardware configuration or combination of features. CUDA modules build locally from either a wheel or a checkout. This remains research software, not a certified robot controller.
Capability |
Evidence / supported scope |
Boundary |
|---|---|---|
Batched fixed-base SQP, PCG/BDSV, explicit warm starts |
Indy7 and iiwa14 receipt modules at every paper horizon, FR3, Gen3 and UR5e at N64; numerical goldens and dynamics fingerprints on all five arms; KKT and solve tests; the direct solve’s harness built for |
The three new arms have an N64 frozen holdout in constraints. Other horizons and tuning need their own validation |
Python solver/controller/policy APIs |
Shape, controller, hypothesis and policy tests; introductory examples; the controller’s device path (CUDA torch / JAX inputs, resident warm start) gated bit-identical to the host path over a closed loop |
Raw solves retain dual/rho state but do not implicitly retain the trajectory; a hypothesis batch scores on the host |
URDF code generation and native builds |
Codegen freshness and custom-robot build test |
NVIDIA CUDA required; native modules are not shipped in a universal wheel |
Boxes, EE rows, linear/conic control rows, collision and contact-position rows |
Finite-difference, residual, mask and mechanism gates; closed-loop ADMM velocity-box gate on the simulated plant ( |
Finite-budget AL/ADMM solves need not be feasible; inspect violations. Enforcement needs a horizon that can brake (N ≥ 32 on the figure-8) |
Contact-force ( |
Named N16 variants in the receipt (the arms; |
Separate variants, not combined configurations; exact Hessian and cost curvature are workload-dependent and their task-level effect is unmeasured; four dynamics evaluations per knot under |
Go2 floating-base dynamics, contact-force standing and the centre-of-mass term |
N16 default/fc/rk4 modules, manifold/derivative tests, MuJoCo standing gates, the CoM term against Pinocchio’s centre of mass |
Longer horizons are not supported by the receipt; standing is not walking; the CoM term is a cost, not a balance condition |
Gait schedule, foot masks and swing targets |
Solver-level foot-lift and programmer-plumbing tests |
Schedule is supplied, not discovered; closed-loop S2 weight shift / S3 lift remain in development |
Runtime and task performance |
Figure refresh: seed A/B, Fig-3 (iiwa14 and Indy7), Fig-4, Fig-5, Fig-7 at their recorded revisions |
Those ratios are not the paper’s speedups or measurements of the latest controller defaults; Fig-7 is reported on two task settings |
Variants and features#
The receipt attests four module variants: default, fc (contact-force
controls), eh (the exact Hessian) and rk4 (the fourth-order step). A
feature a module does not carry is refused with the message in the last
column; test/test_refusals.py holds each refusal.
Feature |
default |
fc |
eh |
rk4 |
Refusal where unsupported |
|---|---|---|---|---|---|
Floating base (Go2) |
yes |
yes |
no |
yes |
|
Two variants in one module |
|
||||
Cost menu |
yes |
yes |
yes |
yes |
|
Cost-menu gravity target |
fixed base |
fixed base |
fixed base |
fixed base |
|
Second cost frame ( |
plants built with |
same |
same |
same |
|
Centre-of-mass term |
plants built with |
same |
same |
same |
|
Contact-force slots ( |
no |
yes |
no |
no |
|
Contact-position rows |
plants built with contact frames (all shipped) |
same |
same |
same |
|
Collision rows |
yes |
yes |
yes |
yes |
|
Exact Hessian ( |
no |
no |
yes |
no |
|
|
yes |
yes |
yes |
yes |
The exact Hessian of the eh variant is the dynamics’ second derivative
contracted with the lagged multipliers (the qq, qv, vv and uq blocks of the
stage Hessian, from GRiD’s fdsva_so) plus, under set_cost_curvature, the
end-effector position term’s residual-weighted curvature, followed by the
stage-block PSD projection. It runs the fixed-base single-stage step with the
external wrench held at zero in the second-order term; it does not carry the
cost menu’s cross blocks between state and control, nor a floating-base or
multi-stage second derivative.
Important operating limits#
Go2 locomotion: the next design work is base position/orientation/velocity tracking and a support-polygon plan before liftoff, then S2 and S3 gates. Re-anchoring stance targets to measured feet prevents stale prediction targets; independent world-frame drift/slip measurements are still necessary.
Floating vector weights: effort weights have length
n_actuated(Go2: 12), excluding base pose and contact-wrench slots. Posture targets/weights remain stored-q indexed (nq, Go2: 19); these are different contracts.Pick-place results: pools before the September 27 simulator fix (
unit-quaternion-pendulum-v2) are not comparable with current runs or the paper. Current numbers are in the figure refresh. Its October 4 holdout confirms strong batched arrival rates but zero episodes satisfying all measured joint limits, including with applied-torque clamping.Actuation: optimized contact wrenches explain model contact forces; they are not actuator commands. Apply
StepResult.uorSolveResult.u0()only. The raw solver installs no limit rows. The fixed-base controller installs ADMM boxes by default when its solver has no row groups, but this is not a torque clamp or a hardware-side safety layer. The October 23 enforcement set compares a command projection (u_clip, opt-in), a larger ADMM budget and a tighter torque penalty; the default is unchanged. The November 4 holdout closes therho_u = 1e-4candidate on a fresh draw: lower peak torque, worse velocity tails, the default kept. An experiment-only clipping comparison preserved goal completion under brief FR3 and UR5e saturation; Gen3 did not saturate in that development sample. Clipping is not enabled by default. A persistent Gen3 derating study reaches goals at half nominal torque but includes a fourfold velocity excursion; stronger derating triggers numerical escape guards.Constraints: the controller installs the URDF limit boxes under ADMM by default on fixed-base arms (
MPCController(limits=...); the raw solver installs nothing); follow row-group ordering and check feasibility telemetry (StepResult.row_viol). A report-only row is not an enforced bound, and a finite-budget ADMM plan can still violate bounds. Inspect the returned row violations and residuals. The October 16 Indy7/iiwa14 and October 18 FR3/Gen3/UR5e holdouts in constraints show lower velocity peaks than unconstrained control, not universal feasibility. At N64 the new-arm default reaches every pick-and-place goal, but FR3 commanded torque peaks at 1.31 times its limit and Gen3 sampled velocity at 1.42 times its limit. Position and velocity are sampled at control ticks; these aggregates do not bound violations between samples or their duration. Substep diagnostics identify both finite-solve dynamics inconsistency and planner/simulator integration mismatch. Small box-row violations do not bound either error.Integration: default-stream execution is the supported path; do not assume concurrent solves on a shared solver instance are supported. JAX input producers are awaited before native pointer access. PyTorch inputs produced on a non-default stream need caller-side synchronization.
Timing: internal solve time and
MPCController.stepwall time have different boundaries. Neither includes the entire robot cycle; small median durations do not establish deadline compliance.step(..., budget_s=...)bounds the solver’s SQP iterations to the budget (to within one iteration, measured on the host); it is not a real-time guarantee for the loop around it. The dated October 6 results describe their recorded source and dependency revisions, not the current dependency pin, default constraints or device-resident controller path. The October 19 matrix measures current-default native solve time on Indy7/iiwa14 N32/N64. Separate N64 call-budget measurements show that iteration-boundary budgets can still overrun. The October 20 replay measures all five arms at N64, batches 1/8 and limits off/default ADMM: NumPy calls are faster than PyTorch/JAX in this protocol. Host latency spikes remain visible; neither residency nor small medians guarantee deadlines.Dependencies: MuJoCo remains pinned below 3.14 pending verification of a version fixing the observed URDF-compilation crash. Do not bypass that pin based solely on a newer version number.
What the receipt proves#
The committed gpu-proof.json attests the full suite on the receipt module set
at the commit it names. The full test inventory is tracked in
test/expected_tests.txt; the numerical contract includes 48 bitwise goldens.
CHANGELOG.md records major changes. Sanitizer evidence is bounded:
memcheck on the effort-vector and masked-contact gates and racecheck on a
one-iteration masked-contact gate passed with zero errors, which covers the
exercised kernels, not every solver execution. This is correctness and install
evidence, not a performance result.
See the receipt contract and paper-reproduction policy before making broader correctness, performance or reproduction claims.