Skip to content

Commit a277bd5

Browse files
authored
Merge pull request #60 from Simple-Robotics/topic/terminal_constraint
Change terminal constraint to produce better jumping motions
2 parents 9da8e74 + 7ca854f commit a277bd5

File tree

2 files changed

+8
-31
lines changed

2 files changed

+8
-31
lines changed

src/fulldynamics.cpp

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include "aligator/modelling/dynamics/multibody-constraint-fwd.hpp"
55
#include <aligator/modelling/dynamics/integrator-semi-euler.hpp>
6-
#include <aligator/modelling/multibody/center-of-mass-translation.hpp>
76
#include <aligator/modelling/multibody/centroidal-momentum.hpp>
87
#include <aligator/modelling/multibody/contact-force.hpp>
98
#include <aligator/modelling/multibody/dcm-position.hpp>
@@ -26,7 +25,6 @@ namespace simple_mpc
2625
using FrameTranslationResidual = FrameTranslationResidualTpl<double>;
2726
using FrameVelocityResidual = FrameVelocityResidualTpl<double>;
2827
using DCMPositionResidual = DCMPositionResidualTpl<double>;
29-
using CenterOfMassTranslationResidual = CenterOfMassTranslationResidualTpl<double>;
3028
using IntegratorSemiImplEuler = dynamics::IntegratorSemiImplEulerTpl<double>;
3129

3230
FullDynamicsOCP::FullDynamicsOCP(const FullDynamicsSettings & settings, const RobotModelHandler & model_handler)
@@ -423,9 +421,7 @@ namespace simple_mpc
423421

424422
term_cost.addCost(
425423
"state_cost", QuadraticStateCost(ter_space, nu_, model_handler_.getReferenceState(), settings_.w_x));
426-
/* term_cost.addCost(
427-
"centroidal_cost",
428-
QuadraticResidualCost(ter_space, cent_mom, settings_.w_cent)); */
424+
term_cost.addCost("centroidal_cost", QuadraticResidualCost(ter_space, cent_mom, settings_.w_cent * 10));
429425

430426
return term_cost;
431427
}
@@ -436,30 +432,12 @@ namespace simple_mpc
436432
{
437433
throw std::runtime_error("Create problem first!");
438434
}
439-
CenterOfMassTranslationResidual com_cstr =
440-
CenterOfMassTranslationResidual(ndx_, nu_, model_handler_.getModel(), com_ref);
441435

442436
double tau = sqrt(com_ref[2] / 9.81);
443437
DCMPositionResidual dcm_cstr = DCMPositionResidual(ndx_, nu_, model_handler_.getModel(), com_ref, tau);
444438

445439
problem_->addTerminalConstraint(dcm_cstr, EqualityConstraint());
446440

447-
Motion v_ref = Motion::Zero();
448-
for (auto const & name : model_handler_.getFeetNames())
449-
{
450-
FrameVelocityResidual frame_vel = FrameVelocityResidual(
451-
ndx_, nu_, model_handler_.getModel(), v_ref, model_handler_.getFootId(name), pinocchio::LOCAL_WORLD_ALIGNED);
452-
if (settings_.force_size == 6)
453-
problem_->addTerminalConstraint(frame_vel, EqualityConstraint());
454-
else
455-
{
456-
std::vector<int> vel_id = {0, 1, 2};
457-
458-
FunctionSliceXpr vel_slice = FunctionSliceXpr(frame_vel, vel_id);
459-
problem_->addTerminalConstraint(vel_slice, EqualityConstraint());
460-
}
461-
}
462-
463441
terminal_constraint_ = true;
464442
}
465443

src/kinodynamics.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
#include <aligator/modelling/centroidal/centroidal-wrench-cone.hpp>
55
#include <aligator/modelling/dynamics/integrator-semi-euler.hpp>
66
#include <aligator/modelling/dynamics/kinodynamics-fwd.hpp>
7-
#include <aligator/modelling/multibody/center-of-mass-translation.hpp>
87
#include <aligator/modelling/multibody/centroidal-momentum-derivative.hpp>
98
#include <aligator/modelling/multibody/centroidal-momentum.hpp>
9+
#include <aligator/modelling/multibody/dcm-position.hpp>
1010
#include <aligator/modelling/multibody/frame-placement.hpp>
1111
#include <aligator/modelling/multibody/frame-translation.hpp>
1212
#include <aligator/modelling/multibody/frame-velocity.hpp>
@@ -23,8 +23,8 @@ namespace simple_mpc
2323
using FramePlacementResidual = FramePlacementResidualTpl<double>;
2424
using FrameTranslationResidual = FrameTranslationResidualTpl<double>;
2525
using FrameVelocityResidual = FrameVelocityResidualTpl<double>;
26-
using CenterOfMassTranslationResidual = CenterOfMassTranslationResidualTpl<double>;
2726
using IntegratorSemiImplEuler = dynamics::IntegratorSemiImplEulerTpl<double>;
27+
using DCMPositionResidual = DCMPositionResidualTpl<double>;
2828

2929
KinodynamicsOCP::KinodynamicsOCP(const KinodynamicsSettings & settings, const RobotModelHandler & model_handler)
3030
: Base(model_handler)
@@ -367,21 +367,20 @@ namespace simple_mpc
367367
{
368368
throw std::runtime_error("Create problem first!");
369369
}
370-
CenterOfMassTranslationResidual com_cstr =
371-
CenterOfMassTranslationResidual(ndx_, nu_, model_handler_.getModel(), com_ref);
370+
double tau = sqrt(com_ref[2] / 9.81);
371+
DCMPositionResidual dcm_cstr = DCMPositionResidual(ndx_, nu_, model_handler_.getModel(), com_ref, tau);
372372

373-
problem_->addTerminalConstraint(com_cstr, EqualityConstraint());
373+
problem_->addTerminalConstraint(dcm_cstr, EqualityConstraint());
374374
terminal_constraint_ = true;
375375
}
376376

377377
void KinodynamicsOCP::updateTerminalConstraint(const Eigen::Vector3d & com_ref)
378378
{
379379
if (terminal_constraint_)
380380
{
381-
CenterOfMassTranslationResidual * CoMres =
382-
problem_->term_cstrs_.getConstraint<CenterOfMassTranslationResidual>(0);
381+
DCMPositionResidual * DCMres = problem_->term_cstrs_.getConstraint<DCMPositionResidual>(0);
383382

384-
CoMres->setReference(com_ref);
383+
DCMres->setReference(com_ref);
385384
}
386385
}
387386

0 commit comments

Comments
 (0)