Skip to content

Commit f1f7395

Browse files
author
earlaud
committed
Move ID setting in nested class
1 parent 3be8eb2 commit f1f7395

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

include/simple-mpc/inverse-dynamics.hpp

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,26 @@ namespace simple_mpc
1616
class KinodynamicsID
1717
{
1818
public:
19-
KinodynamicsID(const simple_mpc::RobotModelHandler & model_handler)
20-
: model_handler_(model_handler)
19+
struct Settings
20+
{
21+
double kp_posture = 1.0;
22+
double kp_base = 0.0;
23+
double kp_contact = 0.0;
24+
25+
double w_posture = 1e2;
26+
double w_base = 0.;
27+
double w_constact_force_ = 0.;
28+
double w_contact_motion_ = 0.;
29+
30+
static Settings Default()
31+
{
32+
return {};
33+
} // Work-around c++ bug to have a default constructor
34+
};
35+
36+
KinodynamicsID(const simple_mpc::RobotModelHandler & model_handler, const Settings settings = Settings::Default())
37+
: settings_(settings)
38+
, model_handler_(model_handler)
2139
, data_handler_(model_handler_)
2240
, robot_(model_handler_.getModel())
2341
, formulation_("tsid", robot_)
@@ -29,42 +47,33 @@ namespace simple_mpc
2947

3048
formulation_.computeProblemData(0, model_handler.getReferenceState().head(nq), Eigen::VectorXd::Zero(nv));
3149

32-
const double kp_contact = 0.0;
33-
const double kp_posture = 1.0;
34-
const double kp_base = 0.0;
35-
36-
const double w_base = 0.;
37-
const double w_posture = 1e2;
38-
const double w_forceRef_ = 0.;
39-
const double w_motionRef_ = 0.;
40-
4150
// Prepare contact point task
4251
// const Eigen::Vector3d normal {0, 0, 1};
4352
// for (std::string foot_name : model_handler_.getFeetNames()) {
4453
// std::shared_ptr<tsid::contacts::ContactPoint> cp =
4554
// std::make_shared<tsid::contacts::ContactPoint>(foot_name, robot_, foot_name, normal, 0.3, 1.0, 100.);
46-
// cp->Kp(kp_contact * Eigen::VectorXd::Ones(3));
55+
// cp->Kp(settings_.kp_contact * Eigen::VectorXd::Ones(3));
4756
// cp->Kd(2.0 * cp->Kp().cwiseSqrt());
4857
// cp->setReference(data_handler_.getFootPose(foot_name));
4958
// cp->useLocalFrame(false);
50-
// formulation_.addRigidContact(*cp, w_forceRef_, w_motionRef_, 0);
59+
// formulation_.addRigidContact(*cp, settings_.w_constact_force_, settings_.w_contact_motion_, 0);
5160
// contactPoints_.push_back(cp);
5261
// }
5362

5463
// Add the posture task
5564
postureTask_ = std::make_shared<tsid::tasks::TaskJointPosture>("task-posture", robot_);
56-
postureTask_->Kp(kp_posture * Eigen::VectorXd::Ones(nu));
65+
postureTask_->Kp(settings_.kp_posture * Eigen::VectorXd::Ones(nu));
5766
postureTask_->Kd(2.0 * postureTask_->Kp().cwiseSqrt());
58-
formulation_.addMotionTask(*postureTask_, w_posture, 1);
67+
formulation_.addMotionTask(*postureTask_, settings_.w_posture, 1);
5968

6069
samplePosture_ = tsid::trajectories::TrajectorySample(robot_.nq_actuated(), robot_.na());
6170

6271
// Add the base task
6372
baseTask_ = std::make_shared<tsid::tasks::TaskSE3Equality>("task-base", robot_, "root_joint");
64-
baseTask_->Kp(kp_base * Eigen::VectorXd::Ones(6));
73+
baseTask_->Kp(settings_.kp_base * Eigen::VectorXd::Ones(6));
6574
baseTask_->Kd(2.0 * baseTask_->Kp().cwiseSqrt());
6675
baseTask_->setReference(pose_base_);
67-
// formulation_.addMotionTask(*baseTask_, w_base, 0);
76+
// formulation_.addMotionTask(*baseTask_, settings_.w_base, 0);
6877

6978
sampleBase_ = tsid::trajectories::TrajectorySample(12, 6);
7079

@@ -100,7 +109,7 @@ namespace simple_mpc
100109
// std::string name = model_handler_.getFeetNames()[i];
101110
// if (contact_state[i]) {
102111
// if(!check_contact(name)) {
103-
// // formulation_.addRigidContact(*contactPoints_[i], w_forceRef_, w_motionRef_, 0);
112+
// // formulation_.addRigidContact(*contactPoints_[i], w_constact_force_, w_contact_motion_, 0);
104113
// }
105114
// else {
106115
// contactPoints_[i]->setForceReference(forces.segment(i * 3, 3));
@@ -135,11 +144,13 @@ namespace simple_mpc
135144
tau_res = formulation_.getActuatorForces(sol_);
136145
}
137146

147+
// Order matters to be instanciated in the right order
148+
const Settings settings_;
138149
const simple_mpc::RobotModelHandler & model_handler_;
139150
simple_mpc::RobotDataHandler data_handler_;
140-
141151
tsid::robots::RobotWrapper robot_;
142152
tsid::InverseDynamicsFormulationAccForce formulation_;
153+
143154
std::vector<std::shared_ptr<tsid::contacts::ContactPoint>> contactPoints_;
144155
std::shared_ptr<tsid::tasks::TaskJointPosture> postureTask_;
145156
std::shared_ptr<tsid::tasks::TaskSE3Equality> baseTask_;

0 commit comments

Comments
 (0)