dynamics
¶
StandardFormEquation(M=dict(), f=None, G=dict())
dataclass
¶
Standard form for one EOM equation.
Σ M[a_j] * a_j + f + Σ G[u_k] * u_k = 0
Attributes¶
M : dict[str, Expr] Mass/inertia coefficient for each acceleration variable. f : Expr Nonlinear terms (Coriolis, gravity, etc.) — a vector expression. G : dict[str, Expr] Input influence coefficient for each input variable.
SystemVariables(scalars=list(), vectors=list(), matrices=list())
dataclass
¶
Configuration variables that define the degrees of freedom.
scalars: scalar configuration variables (not yet used in EOM pipeline) vectors: vector configuration variables (Vector, S2) matrices: matrix configuration variables (SO3)
compute_eom(lagrangian, inf_work, variables)
¶
Compute equations of motion using the principle of least action.
- Take the variation of the Lagrangian: δL
- Form the infinitesimal action integral: δS = δL + δW
- Apply manifold kinematic substitutions (e.g. δ(ω) for S2)
- Simplify
- Gather variation vectors and their time derivatives
- Integration by parts to move time derivatives off variation vectors
- Expand
- Extract coefficients of each independent variation vector
Source code in geomech/dynamics/eom.py
separate_variations(inf_action_integral, variation_vectors)
¶
Extract the equation of motion for each variation vector.
Returns a dict mapping str(variation_vector) → (variation_vector, equation).
Source code in geomech/dynamics/eom.py
to_standard_form(eom_dict, variables, inputs=None)
¶
Decompose EOM into standard manipulator form.
Parameters¶
eom_dict : dict
Output of compute_eom():
{str(variation_vec): (variation_vec, eom_expr)}.
variables : SystemVariables
Configuration variables (used to derive acceleration variables).
inputs : list[Expr], optional
Input variables (forces, torques). Default: empty.
Returns¶
dict[str, StandardFormEquation] Keyed by the same variation vector names as eom_dict.