14 #include <boost/test/unit_test.hpp>
15 #include <boost/utility/binary.hpp>
19 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
23 using namespace Eigen;
31 model.lowerPositionLimit.head<3>().
fill(-1.);
32 model.upperPositionLimit.head<3>().
fill(1.);
40 using namespace Eigen;
48 model.lowerPositionLimit.head<3>().
fill(-1.);
49 model.upperPositionLimit.head<3>().
fill(1.);
58 BOOST_CHECK(
data.oMi[
i] == data_ref.oMi[
i]);
59 BOOST_CHECK(
data.liMi[
i] == data_ref.liMi[
i]);
65 using namespace Eigen;
73 model.lowerPositionLimit.head<3>().
fill(-1.);
74 model.upperPositionLimit.head<3>().
fill(1.);
76 VectorXd
v(VectorXd::Zero(
model.nv));
82 BOOST_CHECK(
data.v[
i] == Motion::Zero());
88 using namespace Eigen;
95 model.lowerPositionLimit.head<3>().
fill(-1.);
96 model.upperPositionLimit.head<3>().
fill(1.);
99 const std::vector<JointIndex> test_joints{
100 0, 1,
model.getJointId(
"rleg_elbow_joint"),
model.getJointId(
"lleg_elbow_joint"),
111 BOOST_CHECK(placement_world.isApprox(placement_local));
116 BOOST_CHECK(placement_world.isIdentity());
117 BOOST_CHECK(placement_local.isIdentity());
123 BOOST_CHECK(placement_world.isApprox(
data.oMi[j]));
124 BOOST_CHECK(placement_local.isApprox(
data.oMi[j]));
130 BOOST_CHECK(placement_world.isApprox(
data.oMi[
i].inverse()));
131 BOOST_CHECK(placement_local.isApprox(
data.oMi[
i].inverse()));
139 using namespace Eigen;
147 model.lowerPositionLimit.head<3>().
fill(-1.);
148 model.upperPositionLimit.head<3>().
fill(1.);
150 VectorXd
v(VectorXd::Zero(
model.nv));
151 VectorXd
a(VectorXd::Zero(
model.nv));
157 BOOST_CHECK(
data.v[
i] == Motion::Zero());
158 BOOST_CHECK(
data.a[
i] == Motion::Zero());
164 using namespace Eigen;
172 model.lowerPositionLimit.head<3>().
fill(-1.);
173 model.upperPositionLimit.head<3>().
fill(1.);
175 VectorXd
v(VectorXd::Random(
model.nv));
184 BOOST_CHECK(
SE3(
data.oMi[
i].rotation(), Eigen::Vector3d::Zero())
192 using namespace Eigen;
200 model.lowerPositionLimit.head<3>().
fill(-1.);
201 model.upperPositionLimit.head<3>().
fill(1.);
203 VectorXd
v(VectorXd::Random(
model.nv));
204 VectorXd
a(VectorXd::Random(
model.nv));
213 BOOST_CHECK(
SE3(
data.oMi[
i].rotation(), Eigen::Vector3d::Zero())
221 using namespace Eigen;
229 model.lowerPositionLimit.head<3>().
fill(-1.);
230 model.upperPositionLimit.head<3>().
fill(1.);
232 VectorXd
v(VectorXd::Random(
model.nv));
233 VectorXd
a(VectorXd::Random(
model.nv));
245 linear =
acc.linear() + vel.angular().cross(vel.linear());
246 acc_classical_local.linear() = linear;
253 linear = acc_classical_world.linear() + vel_world.angular().cross(vel_world.linear());
254 acc_classical_world.linear() = linear;
258 Motion vel_aligned =
SE3(
data.oMi[
i].rotation(), Eigen::Vector3d::Zero()).act(vel);
259 Motion acc_classical_aligned =
SE3(
data.oMi[
i].rotation(), Eigen::Vector3d::Zero()).act(
acc);
260 linear = acc_classical_aligned.linear() + vel_aligned.angular().cross(vel_aligned.linear());
261 acc_classical_aligned.linear() = linear;
263 BOOST_CHECK(acc_classical_aligned.isApprox(
270 using namespace Eigen;
277 jointId =
model.addJoint(
278 jointId,
JointModelRZ(),
SE3(Matrix3d::Identity(), Vector3d(1.0, 0.0, 0.0)),
"Joint2");
284 q << M_PI / 2.0, 0.0;
294 v_local.linear() = Vector3d(0.0, 1.0, 0.0);
295 v_local.angular() = Vector3d(0.0, 0.0, 1.0);
298 v_world.linear() = Vector3d::Zero();
299 v_world.angular() = Vector3d(0.0, 0.0, 1.0);
302 v_align.linear() = Vector3d(-1.0, 0.0, 0.0);
303 v_align.angular() = Vector3d(0.0, 0.0, 1.0);
307 ac_local.linear() = Vector3d(-1.0, 0.0, 0.0);
308 ac_local.angular() = Vector3d::Zero();
310 Motion ac_world = Motion::Zero();
313 ac_align.linear() = Vector3d(0.0, -1.0, 0.0);
314 ac_align.angular() = Vector3d::Zero();
346 const Eigen::MatrixXd &
G = mimic_test_case.
G;
349 Eigen::VectorXd
v = Eigen::VectorXd::Random(
model_mimic.nv);
350 Eigen::VectorXd
a = Eigen::VectorXd::Random(
model_mimic.nv);
366 BOOST_CHECK(dataFKRed.oMi[
i].isApprox(dataFKFull.oMi[
i]));
367 BOOST_CHECK(dataFKRed.liMi[
i].isApprox(dataFKFull.liMi[
i]));
373 BOOST_AUTO_TEST_SUITE_END()