diff --git a/mpx/config/config_aliengo_trot_two_step.py b/mpx/config/config_aliengo_trot_two_step.py index 3bb9a37..22456ff 100644 --- a/mpx/config/config_aliengo_trot_two_step.py +++ b/mpx/config/config_aliengo_trot_two_step.py @@ -48,6 +48,8 @@ initial_state = base.initial_state cost = partial(mpc_objectives.quadruped_wb_obj, True, n_joints, n_contact, N) +cost_smooth = partial(mpc_objectives.quadruped_wb_smooth_cost, True, n_joints, n_contact, N) +inequalities = partial(mpc_objectives.quadruped_wb_inequalities, n_joints, n_contact, 0.5, 44.0, 10.0) hessian_approx = base.hessian_approx dynamics = base.dynamics @@ -64,3 +66,20 @@ solver_mode = "fddp" max_torque = base.max_torque min_torque = base.min_torque + +lipa_enforce_inequalities = True + +def _lipa_settings(): + from primal_dual_lipa.types import SolverSettings + return SolverSettings( + max_iterations=2000, + η0=1e9, + η_update_factor=1.0, + µ_update_factor=0.9, + cost_improvement_threshold=1e-3, + primal_violation_threshold=1e-5, + use_parallel_lqr=False, + num_parallel_line_search_steps=1, + ) + +lipa_settings = _lipa_settings() diff --git a/mpx/config/config_barrel_roll.py b/mpx/config/config_barrel_roll.py index 05f6b12..8e8bbee 100644 --- a/mpx/config/config_barrel_roll.py +++ b/mpx/config/config_barrel_roll.py @@ -88,6 +88,7 @@ ) cost = partial(mpc_objectives.quadruped_wb_obj, False, n_joints, n_contact, N) +cost_smooth = partial(mpc_objectives.quadruped_wb_smooth_cost, False, n_joints, n_contact, N) hessian_approx = None def dynamics(model, mjx_model, contact_id, body_id): @@ -105,4 +106,24 @@ def dynamics(model, mjx_model, contact_id, body_id): # dynamics = mpc_dyn_model.quadruped_wb_dynamics_learned_contact_model # dynamics = mpc_dyn_model.quadruped_wb_dynamics_explicit_contact max_torque = 40 -min_torque = -40 \ No newline at end of file +min_torque = -40 + +inequalities = partial( + mpc_objectives.quadruped_wb_inequalities, n_joints, n_contact, 0.5, 50.0, 20.0 +) +lipa_enforce_inequalities = True + +def _lipa_settings(): + from primal_dual_lipa.types import SolverSettings + return SolverSettings( + max_iterations=2000, + η0=1e9, + η_update_factor=1.1, + µ_update_factor=0.9, + cost_improvement_threshold=1e-3, + primal_violation_threshold=1e-5, + use_parallel_lqr=False, + num_parallel_line_search_steps=1, + ) + +lipa_settings = _lipa_settings() diff --git a/mpx/config/config_h1_jump_forward.py b/mpx/config/config_h1_jump_forward.py index a13822b..a9ec2cd 100644 --- a/mpx/config/config_h1_jump_forward.py +++ b/mpx/config/config_h1_jump_forward.py @@ -41,6 +41,8 @@ torque_limits = base.torque_limits cost = partial(mpc_objectives.h1_kinodynamic_obj, n_joints, n_contact, N) +cost_smooth = partial(mpc_objectives.h1_kinodynamic_smooth_cost, n_joints, n_contact, N) +inequalities = partial(mpc_objectives.h1_kinodynamic_inequalities, n_joints, n_contact, 0.7) hessian_approx = base.hessian_approx dynamics = base.dynamics MPCWrapper = base.MPCWrapper @@ -58,3 +60,37 @@ solver_mode = "fddp" max_torque = base.max_torque min_torque = base.min_torque + +lipa_enforce_inequalities = True + +def _lipa_settings(): + from primal_dual_lipa.types import SolverSettings + return SolverSettings( + max_iterations=2000, + η0=1e9, + η_update_factor=1.0, + µ_update_factor=0.9, + cost_improvement_threshold=1e-3, + primal_violation_threshold=1e-5, + num_iterative_refinement_steps=2, + use_parallel_lqr=False, + num_parallel_line_search_steps=1, + ) + +lipa_settings = _lipa_settings() + +def _lipa_settings_enforce(): + from primal_dual_lipa.types import SolverSettings + return SolverSettings( + max_iterations=500, + η0=1e5, + η_update_factor=2.0, + µ_update_factor=0.9, + cost_improvement_threshold=1e-3, + primal_violation_threshold=1e-5, + num_iterative_refinement_steps=2, + use_parallel_lqr=False, + num_parallel_line_search_steps=1, + ) + +lipa_settings_enforce = _lipa_settings_enforce() diff --git a/mpx/data/acrobot/scene.xml b/mpx/data/acrobot/scene.xml index 2ca267d..1fd4d9f 100644 --- a/mpx/data/acrobot/scene.xml +++ b/mpx/data/acrobot/scene.xml @@ -3,7 +3,7 @@