Skip to content

Commit b201f2c

Browse files
author
earlaud
committed
Default set target run in centroidal constructor
1 parent 98acfac commit b201f2c

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/inverse-dynamics/centroidal.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,39 @@ namespace simple_mpc
3434
feet_tracked_.push_back(false);
3535
trackingSamples_.emplace_back(12, 6);
3636
}
37+
38+
// By default initialize target in reference state
39+
const size_t nq = model_handler_.getModel().nq;
40+
const size_t nv = model_handler_.getModel().nv;
41+
const Eigen::VectorXd q_ref = model_handler.getReferenceState().head(nq);
42+
const Eigen::VectorXd v_ref = model_handler.getReferenceState().tail(nv);
43+
data_handler_.updateInternalData(q_ref, v_ref, false);
44+
const Eigen::Vector3d com_pos{data_handler_.getData().com[0].head<3>()};
45+
const Eigen::Vector3d com_vel{0, 0, 0};
46+
FeetPoseVector feet_pose(n_contacts);
47+
FeetVelocityVector feet_vel(n_contacts);
48+
std::vector<bool> feet_contact(n_contacts);
49+
std::vector<TargetContactForce> feet_force;
50+
for (int i = 0; i < n_contacts; i++)
51+
{
52+
// By default initialize all foot in contact with same amount of force
53+
feet_contact[i] = true;
54+
const RobotModelHandler::FootType foot_type = model_handler.getFootType(i);
55+
if (foot_type == RobotModelHandler::POINT)
56+
feet_force.push_back(TargetContactForce::Zero(3));
57+
else if (foot_type == RobotModelHandler::QUAD)
58+
feet_force.push_back(TargetContactForce::Zero(6));
59+
else
60+
assert(false);
61+
feet_force[i][2] = 9.81 * model_handler_.getMass() / n_contacts; // Weight on Z axis
62+
feet_pose[i] = data_handler_.getFootRefPose(i);
63+
feet_vel[i].setZero();
64+
}
65+
setTarget(com_pos, com_vel, feet_pose, feet_vel, feet_contact, feet_force);
66+
67+
// Dry run to initialize solver data & output
68+
const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData(0, q_ref, v_ref);
69+
last_solution_ = solver_->solve(solver_data);
3770
}
3871

3972
void CentroidalID::setTarget(

0 commit comments

Comments
 (0)