Skip to content

Commit 64c0e86

Browse files
committed
Shift code to .cpp
1 parent 41de090 commit 64c0e86

File tree

2 files changed

+43
-35
lines changed

2 files changed

+43
-35
lines changed

include/simple-mpc/mpc.hpp

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -178,42 +178,13 @@ namespace simple_mpc
178178
}
179179
}
180180

181-
const ConstVectorRef getStateDerivative(const std::size_t t)
182-
{
183-
ExplicitIntegratorData * int_data =
184-
dynamic_cast<ExplicitIntegratorData *>(&*solver_->workspace_.problem_data.stage_data[t]->dynamics_data);
185-
assert(int_data != nullptr);
186-
return int_data->continuous_data->xdot_;
187-
}
188-
189-
const Eigen::VectorXd getContactForces(const std::size_t t)
190-
{
191-
Eigen::VectorXd contact_forces;
192-
contact_forces.resize(3 * (long)ee_names_.size());
193-
194-
ExplicitIntegratorData * int_data =
195-
dynamic_cast<ExplicitIntegratorData *>(&*solver_->workspace_.problem_data.stage_data[t]->dynamics_data);
196-
assert(int_data != nullptr);
197-
MultibodyConstraintFwdData * mc_data = dynamic_cast<MultibodyConstraintFwdData *>(&*int_data->continuous_data);
198-
assert(mc_data != nullptr);
181+
const ConstVectorRef getStateDerivative(const std::size_t t);
199182

200-
std::vector<bool> contact_state = ocp_handler_->getContactState(t);
201-
202-
size_t force_id = 0;
203-
for (size_t i = 0; i < contact_state.size(); i++)
204-
{
205-
if (contact_state[i])
206-
{
207-
contact_forces.segment((long)i * 3, 3) = mc_data->constraint_datas_[force_id].contact_force.linear();
208-
force_id += 1;
209-
}
210-
else
211-
{
212-
contact_forces.segment((long)i * 3, 3).setZero();
213-
}
214-
}
215-
return contact_forces;
216-
}
183+
/**
184+
* @brief Return contact forces for a full dynamics MPC problem
185+
* @warning Only work with fulldynamics OCP handler
186+
*/
187+
const Eigen::VectorXd getContactForces(const std::size_t t);
217188

218189
void switchToWalk(const Vector6d & velocity_base);
219190

src/mpc.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,43 @@ namespace simple_mpc
342342
return ocp_handler_->getProblem();
343343
}
344344

345+
const ConstVectorRef MPC::getStateDerivative(const std::size_t t)
346+
{
347+
ExplicitIntegratorData * int_data =
348+
dynamic_cast<ExplicitIntegratorData *>(&*solver_->workspace_.problem_data.stage_data[t]->dynamics_data);
349+
assert(int_data != nullptr);
350+
return int_data->continuous_data->xdot_;
351+
}
352+
353+
const Eigen::VectorXd MPC::getContactForces(const std::size_t t)
354+
{
355+
Eigen::VectorXd contact_forces;
356+
contact_forces.resize(3 * (long)ee_names_.size());
357+
358+
ExplicitIntegratorData * int_data =
359+
dynamic_cast<ExplicitIntegratorData *>(&*solver_->workspace_.problem_data.stage_data[t]->dynamics_data);
360+
assert(int_data != nullptr);
361+
MultibodyConstraintFwdData * mc_data = dynamic_cast<MultibodyConstraintFwdData *>(&*int_data->continuous_data);
362+
assert(mc_data != nullptr);
363+
364+
std::vector<bool> contact_state = ocp_handler_->getContactState(t);
365+
366+
size_t force_id = 0;
367+
for (size_t i = 0; i < contact_state.size(); i++)
368+
{
369+
if (contact_state[i])
370+
{
371+
contact_forces.segment((long)i * 3, 3) = mc_data->constraint_datas_[force_id].contact_force.linear();
372+
force_id += 1;
373+
}
374+
else
375+
{
376+
contact_forces.segment((long)i * 3, 3).setZero();
377+
}
378+
}
379+
return contact_forces;
380+
}
381+
345382
void MPC::switchToWalk(const Vector6d & velocity_base)
346383
{
347384
now_ = WALKING;

0 commit comments

Comments
 (0)