Skip to content

Commit b91cc41

Browse files
committed
Working tests
1 parent af4d74d commit b91cc41

File tree

5 files changed

+35
-8
lines changed

5 files changed

+35
-8
lines changed

bindings/module.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ namespace simple_mpc::python
1717
void exposeMPC();
1818
void exposeIDSolver();
1919
void exposeIKIDSolver();
20-
void exposeInterpolator();
20+
void exposeStateInterpolator();
21+
void exposeLinearInterpolator();
2122

2223
/* PYTHON MODULE */
2324
BOOST_PYTHON_MODULE(simple_mpc_pywrap)
@@ -36,7 +37,8 @@ namespace simple_mpc::python
3637
exposeMPC();
3738
exposeIDSolver();
3839
exposeIKIDSolver();
39-
exposeInterpolator();
40+
exposeStateInterpolator();
41+
exposeLinearInterpolator();
4042
}
4143

4244
} // namespace simple_mpc::python

examples/go2_fulldynamics.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,8 @@
268268

269269
for j in range(N_simu):
270270
# time.sleep(0.01)
271-
delay = j / float(N_simu)
271+
delay = j / float(N_simu) * dt
272+
272273
x_interp = state_interpolator.interpolate(delay, dt, xss)
273274
u_interp = u_interpolator.interpolate(delay, dt, uss)
274275
acc_interp = acc_interpolator.interpolate(delay, dt, ddqs)

src/fulldynamics.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ namespace simple_mpc
195195
space.ndx(), nu_, model_handler_.getModel(), Motion::Zero(), model_handler_.getFootId(name),
196196
pinocchio::LOCAL_WORLD_ALIGNED);
197197
FunctionSliceXpr vel_slice = FunctionSliceXpr(velocity_residual, vel_id);
198-
// stm.addConstraint(vel_slice, EqualityConstraint());
198+
stm.addConstraint(vel_slice, EqualityConstraint());
199199

200200
std::vector<int> frame_id = {2};
201201

@@ -205,7 +205,7 @@ namespace simple_mpc
205205

206206
FunctionSliceXpr frame_slice = FunctionSliceXpr(frame_residual, frame_id);
207207

208-
// stm.addConstraint(frame_slice, EqualityConstraint());
208+
stm.addConstraint(frame_slice, EqualityConstraint());
209209
}
210210
}
211211
}

src/interpolator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace simple_mpc
2828

2929
// Interpolate state and command trajectories
3030
if (step_nb >= xs.size() - 1)
31-
x_interp = xs[step_nb];
31+
x_interp = xs.back();
3232
else
3333
{
3434
// Compute the differential between configuration
@@ -59,7 +59,7 @@ namespace simple_mpc
5959

6060
// Interpolate state and command trajectories
6161
if (step_nb >= vecs.size() - 1)
62-
vec_interp = vecs[step_nb];
62+
vec_interp = vecs.back();
6363
else
6464
{
6565
vec_interp = vecs[step_nb + 1] * step_progress + vecs[step_nb] * (1. - step_progress);

tests/interpolator.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ BOOST_AUTO_TEST_CASE(interpolate)
3737
interpolator.interpolate(delay, timestep, xs, x_interp);
3838

3939
BOOST_CHECK(xs[2].isApprox(x_interp));
40+
41+
delay = 0.5;
42+
interpolator.interpolate(delay, timestep, xs, x_interp);
43+
BOOST_CHECK(xs.back().isApprox(x_interp));
44+
45+
delay = 0.005;
46+
interpolator.interpolate(delay, timestep, xs, x_interp);
47+
Eigen::VectorXd x_interp2(model.nq + model.nv);
48+
Eigen::VectorXd dq(model.nv);
49+
pinocchio::difference(model, xs[0].head(model.nq), xs[1].head(model.nq), dq);
50+
pinocchio::integrate(model, xs[0].head(model.nq), dq * 0.5, x_interp2.head(model.nq));
51+
x_interp2.tail(model.nv) = (xs[0].tail(model.nv) + xs[1].tail(model.nv)) * 0.5;
52+
53+
BOOST_CHECK(x_interp2.isApprox(x_interp));
4054
}
4155

4256
BOOST_AUTO_TEST_CASE(linear_interpolate)
@@ -62,8 +76,18 @@ BOOST_AUTO_TEST_CASE(linear_interpolate)
6276

6377
Eigen::VectorXd v_interp(model.nv);
6478
interpolator.interpolate(delay, timestep, vs, v_interp);
65-
6679
BOOST_CHECK(vs[2].isApprox(v_interp));
80+
81+
delay = 0.5;
82+
interpolator.interpolate(delay, timestep, vs, v_interp);
83+
BOOST_CHECK(vs.back().isApprox(v_interp));
84+
85+
delay = 0.005;
86+
interpolator.interpolate(delay, timestep, vs, v_interp);
87+
Eigen::VectorXd v_interp2(model.nv);
88+
v_interp2 = (vs[0] + vs[1]) * 0.5;
89+
90+
BOOST_CHECK(v_interp2.isApprox(v_interp));
6791
}
6892

6993
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)