Skip to content

Commit d737d79

Browse files
author
earlaud
committed
Better type for f_target: using matrix N, 3 instead of flattened vector for ID
1 parent a5b88cc commit d737d79

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

include/simple-mpc/inverse-dynamics.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ namespace simple_mpc
2626
class KinodynamicsID
2727
{
2828
public:
29+
typedef Eigen::Matrix<double, Eigen::Dynamic, 3> MatrixN3d;
30+
2931
struct Settings
3032
{
3133

@@ -59,7 +61,7 @@ namespace simple_mpc
5961
const Eigen::Ref<const Eigen::VectorXd> & v_target,
6062
const Eigen::Ref<const Eigen::VectorXd> & a_target,
6163
const std::vector<bool> & contact_state_target,
62-
const Eigen::Ref<const Eigen::VectorXd> & f_target);
64+
const Eigen::Ref<const MatrixN3d> & f_target);
6365

6466
void solve(
6567
const double t,

src/inverse-dynamics.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ KinodynamicsID::KinodynamicsID(const RobotModelHandler & model_handler, double c
7777
const Eigen::VectorXd q_ref = model_handler.getReferenceState().head(nq);
7878
const Eigen::VectorXd v_ref = model_handler.getReferenceState().tail(nv);
7979
std::vector<bool> c_ref(n_contacts);
80-
Eigen::VectorXd f_ref = Eigen::VectorXd::Zero(3 * n_contacts);
80+
MatrixN3d f_ref = MatrixN3d::Zero(n_contacts, 3);
8181
for (int i = 0; i < n_contacts; i++)
8282
{
8383
c_ref[i] = true;
84-
f_ref[2 + 3 * i] = weight / n_contacts;
84+
f_ref(i, 2) = weight / n_contacts;
8585
}
8686
setTarget(q_ref, v_ref, v_ref, c_ref, f_ref);
8787
const tsid::solvers::HQPData & solver_data = formulation_.computeProblemData(0, q_ref, v_ref);
@@ -93,7 +93,7 @@ void KinodynamicsID::setTarget(
9393
const Eigen::Ref<const Eigen::VectorXd> & v_target,
9494
const Eigen::Ref<const Eigen::VectorXd> & a_target,
9595
const std::vector<bool> & contact_state_target,
96-
const Eigen::Ref<const Eigen::VectorXd> & f_target)
96+
const Eigen::Ref<const MatrixN3d> & f_target)
9797
{
9898
data_handler_.updateInternalData(q_target, v_target, false);
9999

@@ -119,7 +119,7 @@ void KinodynamicsID::setTarget(
119119
{
120120
formulation_.addRigidContact(tsid_contacts[i], settings_.w_contact_force, settings_.w_contact_motion, 1);
121121
}
122-
tsid_contacts[i].setForceReference(f_target.segment(i * 3, 3));
122+
tsid_contacts[i].setForceReference(f_target.row(i));
123123
active_tsid_contacts_[i] = true;
124124
}
125125
else

tests/inverse_dynamics.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
5757

5858
solver.setTarget(
5959
q_target, Eigen::VectorXd::Zero(model_handler.getModel().nv), Eigen::VectorXd::Zero(model_handler.getModel().nv),
60-
{false, false, false, false}, Eigen::VectorXd::Zero(4 * 3));
60+
{false, false, false, false}, Eigen::MatrixXd::Zero(4, 3));
6161

6262
double t = 0;
6363
Eigen::VectorXd q = solo_q_start(model_handler);
@@ -110,11 +110,11 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_contact)
110110
.set_w_contact_force(1.0));
111111

112112
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
113-
Eigen::VectorXd f_target = Eigen::VectorXd::Zero(4 * 3);
114-
f_target[2] = model_handler.getMass() * 9.81 / 4;
115-
f_target[5] = model_handler.getMass() * 9.81 / 4;
116-
f_target[8] = model_handler.getMass() * 9.81 / 4;
117-
f_target[11] = model_handler.getMass() * 9.81 / 4;
113+
Eigen::MatrixXd f_target = Eigen::MatrixXd::Zero(4, 3);
114+
f_target(0, 2) = model_handler.getMass() * 9.81 / 4;
115+
f_target(1, 2) = model_handler.getMass() * 9.81 / 4;
116+
f_target(2, 2) = model_handler.getMass() * 9.81 / 4;
117+
f_target(3, 2) = model_handler.getMass() * 9.81 / 4;
118118

119119
solver.setTarget(
120120
q_target, Eigen::VectorXd::Zero(model_handler.getModel().nv), Eigen::VectorXd::Zero(model_handler.getModel().nv),
@@ -230,11 +230,11 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_allTasks)
230230
.set_w_contact_motion(1.0));
231231

232232
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
233-
Eigen::VectorXd f_target = Eigen::VectorXd::Zero(4 * 3);
234-
f_target[2] = model_handler.getMass() * 9.81 / 4;
235-
f_target[5] = model_handler.getMass() * 9.81 / 4;
236-
f_target[8] = model_handler.getMass() * 9.81 / 4;
237-
f_target[11] = model_handler.getMass() * 9.81 / 4;
233+
Eigen::MatrixXd f_target = Eigen::MatrixXd::Zero(4, 3);
234+
f_target(0, 2) = model_handler.getMass() * 9.81 / 4;
235+
f_target(1, 2) = model_handler.getMass() * 9.81 / 4;
236+
f_target(2, 2) = model_handler.getMass() * 9.81 / 4;
237+
f_target(3, 2) = model_handler.getMass() * 9.81 / 4;
238238

239239
solver.setTarget(
240240
q_target, Eigen::VectorXd::Zero(model_handler.getModel().nv), Eigen::VectorXd::Zero(model_handler.getModel().nv),

0 commit comments

Comments
 (0)