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)