General info for all constraints
What a constraint is
A constraint prescribes a relation between the coordinates of the bodies or nodes its markers sit on - two points coincide, a distance is fixed, a coordinate follows another - as algebraic equations \(\gv(\qv, t) = \Null\). Each equation gets a Lagrange multiplier \(\lambda\), an algebraic unknown of the system, and acts on the equations of motion with the transposed Jacobian of the constraint, \(\left(\partial \gv / \partial \qv\right)\tp \tlambda\): the multipliers are the reaction forces and torques of the constraint, in the directions the page of each constraint says. This page holds for the joints as well.
Index 3 and index 2
A constraint is written on the position level (index 3), \(\gv(\qv,t) = \Null\), or on the
velocity level (index 2), \(\dot\gv = \Null\); which one the solver uses is
timeIntegration.generalizedAlpha.useIndex2Constraints and the like. On the velocity level the
position may drift over long simulations, which the output variables of some joints show.
Constraints need an implicit time integration (generalized-alpha, trapezoidal) or the static
solver; the explicit integrators do not solve algebraic equations - they can only eliminate
ObjectConnectorCoordinate constraints to the ground, such as fixed nodes (timeIntegration.explicit.eliminateConstraints).
activeConnector
With activeConnector = False a constraint replaces its equations by \(\tlambda = \Null\): it
remains in the system with its multipliers, which are zero, and can be switched on again.
Redundant constraints
Constraints that fix the same motion twice - two revolute joints on one axis, a closed loop of
planar joints in 3D - make the Jacobian of the constraints singular, and the solver fails.
mbs.ComputeSystemDegreeOfFreedom() counts the redundant constraints; the EigenDense linear solver
with linearSolver.ignoreSingularJacobian can handle some of them.
Drawing
A constraint is drawn as a connector: if connectors.show and its own show are True,
in its color or connectors.defaultColor, a drawSize of -1 takes connectors.defaultSize, and
connectors.showNumbers writes its number.
The settings: connectors.show, connectors.showNumbers, connectors.defaultColor, connectors.defaultSize.