Aim
Relate multiplier forces to mass-weighted acceleration correction and discrete drift.
Time: about 120 minutes. Start with the linked lectures and the course notation contract. The reference program is complete and runnable; your work is to explain it, modify it, and test the results.
Run from this repository
uv sync --locked
uv run --locked python practices/p05-constraints/run.py
The program writes configuration, MuJoCo version, and metrics to outputs/p05-constraints/metrics.json. Experiments with a time history also write trajectory.csv. These are generated results and are not source material.
Use a separate configuration and output directory for each variation:
uv run --locked python practices/p05-constraints/run.py --config practices/p05-constraints/config.yml --output outputs/p05-constraints/baseline
Keep the original configuration as the baseline. Record all changes in your report; avoid changing several physical and numerical parameters at once.
Tasks
- Reproduce the unequal-mass Gauss projection analytically.
- Simulate a particle constrained to a circle with consistent initial conditions.
- Compare unstabilized and Baumgarte-stabilized constraint error.
- Sweep timestep and stabilization gains separately. Add a redundant constraint as a rank-deficiency experiment.
Expected checks
The unequal-mass projection returns [0.2, -0.2]. A tiny acceleration residual does not imply zero position drift. Large stabilization gains can make the numerical problem stiff.
Submission
Submit your YAML configuration, a short explanation of the equations and assumptions, labeled plots or numerical comparisons with units, and a paragraph explaining a failure or limitation. Include the exact run command. The weekly practice rubric awards 40% for correctness and checks, 30% for the controlled comparison, 20% for interpretation, and 10% for reproducibility.
Extension
Build a MuJoCo equality-constraint scene and vary compliance independently of solver tolerance. Do not equate soft constraints with exact rigid projection.