Affine Body Revolute Joint Limit
#670 AffineBodyRevoluteJointLimit
This constitution is an InterAffineBody extra constitution defined on a revolute-joint geometry. It contributes a unilateral cubic penalty to the relative angular coordinate.
Let \(x\) be the revolute angle (unit: rad), with lower/upper bounds \(l, u\) and penalty coefficient \(s\):
Interpretation of each term: - \(x\): current relative revolute angle around the joint axis. - \(l\): admissible lower angle bound. - \(u\): admissible upper angle bound. - \(s\): penalty strength (energy scale).
The angle is represented in incremental form:
where: - \(\mathbf{q}\) is the current affine-body DOF, - \(\mathbf{q}^{t-1}\) is the previous-step DOF, - \(\mathbf{q}_{ref}\) is the reference DOF captured at initialization.
For revolute joints, the increment operator \(\Delta\Theta(\cdot,\cdot)\) is
computed with an atan2 form. Given two states \(a,b\), define
with
This yields the principal-angle branch in \((-\pi,\pi]\), so the limit supports full \(\pm 180^\circ\) angular span.
This avoids direct optimization over inverse-trigonometric reconstruction of the absolute angle and follows the same delta-theta idea used by external articulation.
First and second derivatives with respect to \(x\):
Boundary points (\(x=l\) or \(x=u\)) are treated as in-range; energy and derivatives are zero there.
Conceptual Requirement
This limit term is meaningful only on a geometry that already represents a revolute joint relation (base joint UID = 18). The limit augments that base relation as an extra constitution term.
Stored Attributes
Per joint edge:
- limit/lower
- limit/upper
- limit/strength
Geometry metadata:
- extra constitution UID 670 in meta.extra_constitution_uids.