Skip to content

Commit 667dcc8

Browse files
author
earlaud
committed
Fix test class
1 parent 0418e68 commit 667dcc8

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

tests/inverse_dynamics.cpp

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ class TestKinoID
5656
check_joint_limits();
5757
}
5858

59+
void check_decreasing_error(std::string name, double error)
60+
{
61+
if (errors.count(name) == 0)
62+
{
63+
errors.insert({name, error});
64+
return; // no further check
65+
}
66+
BOOST_CHECK_LE(error, errors.at(name)); // Perform check
67+
errors.at(name) = error; // Update value
68+
}
69+
5970
protected:
6071
void check_joint_limits()
6172
{
@@ -84,33 +95,39 @@ class TestKinoID
8495
Eigen::VectorXd dq;
8596
Eigen::VectorXd ddq;
8697
Eigen::VectorXd tau;
98+
99+
std::map<std::string, double> errors;
87100
};
88101

89102
BOOST_AUTO_TEST_CASE(KinodynamicsID_postureTask)
90103
{
91104
TestKinoID test(getSoloHandler(), KinodynamicsID::Settings().set_kp_posture(20.).set_w_posture(1.));
92-
const RobotModelHandler & model_handler = test.model_handler;
93105

94-
Eigen::VectorXd error = 1e12 * Eigen::VectorXd::Ones(model_handler.getModel().nv);
106+
// Easy access
107+
const RobotModelHandler & model_handler = test.model_handler;
108+
const size_t nq = model_handler.getModel().nq;
109+
const size_t nv = model_handler.getModel().nv;
95110

96-
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
111+
// Target state
112+
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(nq);
97113
test.solver.setTarget(
98-
q_target, Eigen::VectorXd::Zero(model_handler.getModel().nv), Eigen::VectorXd::Zero(model_handler.getModel().nv),
99-
{false, false, false, false}, {});
114+
q_target, Eigen::VectorXd::Zero(nv), Eigen::VectorXd::Zero(nv), {false, false, false, false}, {});
100115

116+
// Change initial state
117+
test.q = solo_q_start(model_handler);
101118
for (int i = 0; i < 10000; i++)
102119
{
103-
// Solve and get solution
120+
// Solve
104121
test.step();
105122

106-
// compensate for free fall as we only care about joint posture
123+
// compensate for free fall as we did not set any contact (we only care about joint posture)
107124
test.q.head(7) = q_target.head(7);
108125
test.dq.head(6).setZero();
109126

110127
// Check error is decreasing
111-
Eigen::VectorXd new_error = pinocchio::difference(model_handler.getModel(), test.q, q_target);
112-
BOOST_CHECK_LE(new_error.norm(), error.norm());
113-
error = new_error;
128+
Eigen::VectorXd delta_q = pinocchio::difference(model_handler.getModel(), test.q, q_target);
129+
const double error = delta_q.tail(nv - 6).norm(); // Consider only the posture not the free flyer
130+
test.check_decreasing_error("posture", error);
114131
}
115132
}
116133

0 commit comments

Comments
 (0)