@@ -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
4256BOOST_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
6993BOOST_AUTO_TEST_SUITE_END ()
0 commit comments