Skip to content

Commit e409e99

Browse files
author
earlaud
committed
Add baseTask test
1 parent f5d9bdd commit e409e99

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/inverse_dynamics.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,54 @@ BOOST_AUTO_TEST_CASE(KinodynamicsID_contact)
135135
}
136136
}
137137

138+
BOOST_AUTO_TEST_CASE(KinodynamicsID_baseTask)
139+
{
140+
RobotModelHandler model_handler = getSoloHandler();
141+
RobotDataHandler data_handler(model_handler);
142+
143+
KinodynamicsID solver(
144+
model_handler, KinodynamicsID::Settings()
145+
.set_kp_base(7.)
146+
.set_kp_contact(10.0)
147+
.set_w_base(100.0)
148+
.set_w_contact_force(1.0)
149+
.set_w_contact_motion(1.0));
150+
151+
// No need to set target as KinodynamicsID sets it by default to reference state
152+
const Eigen::VectorXd q_target = model_handler.getReferenceState().head(model_handler.getModel().nq);
153+
154+
double t = 0;
155+
double dt = 1e-3;
156+
Eigen::VectorXd q = solo_q_start(model_handler);
157+
Eigen::VectorXd v = Eigen::VectorXd::Random(model_handler.getModel().nv);
158+
Eigen::VectorXd a = Eigen::VectorXd::Random(model_handler.getModel().nv);
159+
Eigen::VectorXd tau = Eigen::VectorXd::Zero(model_handler.getModel().nv - 6);
160+
161+
Eigen::VectorXd error = 1e12 * Eigen::VectorXd::Ones(6);
162+
const int N_STEP = 10000;
163+
for (int i = 0; i < N_STEP; i++)
164+
{
165+
// Solve and get solution
166+
solver.solve(t, q, v, tau);
167+
a = solver.getAccelerations();
168+
169+
// Integrate
170+
t += dt;
171+
q = pinocchio::integrate(model_handler.getModel(), q, (v + a / 2. * dt) * dt);
172+
v += a * dt;
173+
174+
// Check error is decreasing
175+
Eigen::VectorXd new_error = pinocchio::difference(model_handler.getModel(), q, q_target).head(6);
176+
if (i > N_STEP / 10) // Weird transitional phenomenon at first ...
177+
BOOST_CHECK(
178+
new_error.norm() < error.norm() || new_error.norm() < 2e-2); // Either strictly decreasing or close to target
179+
if (i > 9 * N_STEP / 10)
180+
BOOST_CHECK(new_error.norm() < 2e-2); // Should have converged by now
181+
182+
error = new_error;
183+
}
184+
}
185+
138186
BOOST_AUTO_TEST_CASE(KinodynamicsID_allTasks)
139187
{
140188
RobotModelHandler model_handler = getSoloHandler();

0 commit comments

Comments
 (0)