maptor.mechanics#

Optional convenience tools for symbolic mechanics derivation.

maptor.mechanics.lagrangian_to_maptor_dynamics(lagranges_method, coordinates, control_forces, output_file=None)[source]#

Convert SymPy LagrangesMethod to MAPTOR dynamics format using universal mass matrix approach.

Supports any mechanical system by using the fundamental equation q̈ = M⁻¹(f_passive + f_control) where M is the mass matrix, f_passive includes forces from forcelist, and f_control contains control forces/torques acting on generalized coordinates.

Args:

lagranges_method: SymPy LagrangesMethod object with passive forces in forcelist coordinates: List of generalized coordinates (e.g., [q1, q2]) control_forces: SymPy Matrix of control forces/torques for each coordinate. Shape must be (len(coordinates), 1) output_file: Optional filename for saving generated dynamics in same directory as caller. If None, only prints to console.

Returns:

tuple: (casadi_equations, state_names) for programmatic use

Examples:

Cartpole with external force:

>>> control_forces = sm.Matrix([F, 0])  # Force on x, none on theta
>>> lagrangian_to_maptor_dynamics(LM, [x, theta], control_forces)

Manipulator with joint torques:

>>> control_forces = sm.Matrix([tau1, tau2])  # Torques on q1, q2
>>> lagrangian_to_maptor_dynamics(LM, [q1, q2], control_forces)

With backup file output:

>>> lagrangian_to_maptor_dynamics(LM, coords, forces, "dynamics_backup.txt")

Pure passive system (no control):

>>> control_forces = sm.Matrix([0, 0])  # No control forces
>>> lagrangian_to_maptor_dynamics(LM, [q1, q2], control_forces)