Skip to content

standard_form

Standard form extraction: M(q)a + f(q,dq) + G(q,dq)u = 0.

to_standard_form(eom_dict, variables, inputs) Decompose EOM into mass matrix, nonlinear terms, and input influence.

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.

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.

Source code in geomech/dynamics/standard_form.py
def to_standard_form(eom_dict, variables: SystemVariables, 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*.
    """
    if inputs is None:
        inputs = []

    # Derive acceleration variables from config variables
    accel_vars = _get_accel_vars(variables)

    result = {}
    for key, (var_vec, eom_expr) in eom_dict.items():
        sf = _extract_single(eom_expr, accel_vars, inputs)
        result[key] = sf

    return result