19 #include <boost/test/unit_test.hpp>
20 #include <boost/utility/binary.hpp>
24 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
34 BOOST_CHECK(subtree.size() == 6);
39 for (
size_t i = 0;
i < children.size(); ++
i)
45 for (
size_t i = 1;
i < subtree.size(); ++
i)
47 BOOST_CHECK(
model.parents[subtree[
i]] == subtree[
i - 1]);
70 BOOST_CHECK_EQUAL(
i,
model.getFrameId(
model.frames[
i].name));
72 BOOST_CHECK_EQUAL(
model.nframes,
model.getFrameId(
"NOT_A_FRAME"));
80 BOOST_CHECK(
model.supports[0] == support0_ref);
88 size_t current_id = support.size() - 2;
92 BOOST_CHECK(
parent_id == support[current_id]);
114 BOOST_REQUIRE_EQUAL(
model.mimic_joint_supports.size(), 6);
142 BOOST_CHECK(
model.nvExtendeds[
joint_id] == jmodel.nvExtended());
143 BOOST_CHECK(
model.idx_vExtendeds[
joint_id] == jmodel.idx_vExtended());
160 BOOST_CHECK(
model.cast<
double>() ==
model.cast<
double>());
161 BOOST_CHECK(
model.cast<
double>().cast<
long double>() ==
model.cast<
long double>());
175 for (
size_t k = 0; k < 20; ++k)
177 models.push_back(
Model());
180 BOOST_CHECK(
model == models.back());
184 #ifdef PINOCCHIO_WITH_HPP_FCL
188 std::string operator()(
const std::string &
n)
198 AddPrefix(
const char * _p)
210 buildModels::manipulatorGeometries(
manipulator, geomManipulator);
213 AddPrefix addManipulatorPrefix(
"manipulator/");
216 addManipulatorPrefix);
219 addManipulatorPrefix);
224 buildModels::humanoidGeometries(
humanoid, geomHumanoid);
227 AddPrefix addHumanoidPrefix(
"humanoid/");
239 humanoid.referenceConfigurations.insert(std::make_pair(
"common_key", humanoid_config_vector));
241 std::make_pair(
"common_key", manipulator_config_vector));
245 humanoid.referenceConfigurations.insert(std::make_pair(
"humanoid_key", humanoid_config_vector));
247 std::make_pair(
"manipulator_key", manipulator_config_vector));
251 SE3 aMb = SE3::Random();
264 BOOST_CHECK(
model1.referenceConfigurations.size() == 3);
265 for (
typename ConfigVectorMap::const_iterator config_it =
model1.referenceConfigurations.begin();
266 config_it !=
model1.referenceConfigurations.end(); ++config_it)
268 const std::string & config_name = config_it->first;
271 typename ConfigVectorMap::const_iterator humanoid_config =
272 humanoid.referenceConfigurations.find(config_name);
273 typename ConfigVectorMap::const_iterator manipulator_config =
274 manipulator.referenceConfigurations.find(config_name);
279 humanoid_config !=
humanoid.referenceConfigurations.end()
285 joint_model_humanoid.jointConfigSelector(humanoid_config->second)
286 == joint_model1.jointConfigSelector(config_vector));
288 joint_model_humanoid.JointMappedConfigSelector(humanoid_config->second)
289 == joint_model1.JointMappedConfigSelector(config_vector));
293 manipulator_config !=
manipulator.referenceConfigurations.end()
299 joint_model_manipulator.jointConfigSelector(manipulator_config->second)
300 == joint_model1.jointConfigSelector(config_vector));
302 joint_model_manipulator.JointMappedConfigSelector(manipulator_config->second)
303 == joint_model1.JointMappedConfigSelector(config_vector));
309 joint_model1.jointConfigSelector(neutral_config_vector)
310 == joint_model1.jointConfigSelector(config_vector));
312 joint_model1.JointMappedConfigSelector(neutral_config_vector)
313 == joint_model1.JointMappedConfigSelector(config_vector));
324 BOOST_CHECK(
model1 == model3);
325 BOOST_CHECK(
model2 == model3);
329 BOOST_CHECK(
model1.check(data1));
331 BOOST_TEST_MESSAGE(
model1);
338 "humanoid/add_manipulator",
humanoid.getJointId(
"humanoid/chest2_joint"),
345 neutral_config_vector.resize(
model.nq);
348 BOOST_CHECK(
model.referenceConfigurations.size() == 3);
349 for (
typename ConfigVectorMap::const_iterator config_it =
model.referenceConfigurations.begin();
350 config_it !=
model.referenceConfigurations.end(); ++config_it)
352 const std::string & config_name = config_it->first;
355 typename ConfigVectorMap::const_iterator humanoid_config =
356 humanoid.referenceConfigurations.find(config_name);
357 typename ConfigVectorMap::const_iterator manipulator_config =
358 manipulator.referenceConfigurations.find(config_name);
363 humanoid_config !=
humanoid.referenceConfigurations.end()
369 joint_model_humanoid.jointConfigSelector(humanoid_config->second)
370 == joint_model.jointConfigSelector(config_vector));
372 joint_model_humanoid.JointMappedConfigSelector(humanoid_config->second)
373 == joint_model.JointMappedConfigSelector(config_vector));
377 manipulator_config !=
manipulator.referenceConfigurations.end()
383 joint_model_manipulator.jointConfigSelector(manipulator_config->second)
384 == joint_model.jointConfigSelector(config_vector));
386 joint_model_manipulator.JointMappedConfigSelector(manipulator_config->second)
387 == joint_model.JointMappedConfigSelector(config_vector));
393 joint_model.jointConfigSelector(neutral_config_vector)
394 == joint_model.jointConfigSelector(config_vector));
396 joint_model.JointMappedConfigSelector(neutral_config_vector)
397 == joint_model.JointMappedConfigSelector(config_vector));
408 BOOST_CHECK(
model == model3);
409 BOOST_CHECK(
model2 == model3);
412 BOOST_TEST_MESSAGE(
model);
419 model.getJointId(
"humanoid/chest2_joint"),
420 model.parents[
model.getJointId(
"manipulator/shoulder1_joint")]);
428 BOOST_TEST_MESSAGE(
"Checking joint " << jid <<
" " <<
model.names[jid]);
431 BOOST_CHECK_EQUAL(
model.inertias[jid],
humanoid.inertias[jid]);
434 model.inertias[jid].isApprox(
436 model.inertias[jid] <<
" != "
439 BOOST_CHECK_EQUAL(
model.jointPlacements[jid],
humanoid.jointPlacements[jid]);
443 BOOST_TEST_MESSAGE(
"Checking joint " << hnj - 1 + jid <<
" " <<
model.names[hnj + jid]);
445 BOOST_CHECK_EQUAL(
model.inertias[hnj - 1 + jid],
manipulator.inertias[jid]);
448 model.jointPlacements[hnj - 1 + jid], aMb *
manipulator.jointPlacements[jid]);
450 BOOST_CHECK_EQUAL(
model.jointPlacements[hnj - 1 + jid],
manipulator.jointPlacements[jid]);
459 BOOST_CHECK_EQUAL(
parent.name, nparent.name);
468 if (
frame.parentFrame > 0)
470 BOOST_CHECK_EQUAL(
parent.name, nparent.name);
476 Inertia inertia(2., Eigen::Vector3d(0.1, 0.1, 0.1), Eigen::Matrix3d::Identity());
478 humanoid.addFrame(additional_frame);
481 double total_mass = mass_manipulator + mass_humanoid;
486 humanoid,
manipulator, geomHumanoid, geomManipulator, 0, SE3::Identity(), model4, geomModel4);
504 Model model5, gripperModel;
506 Inertia inertia(1., SE3::Vector3(0.5, 0., 0.0), SE3::Matrix3::Identity());
509 pos.translation() = SE3::LinearType(0.1, 0., 0.);
513 pos.translation() = SE3::LinearType(-0.1, 0., 0.);
517 SE3 transformManGr = SE3::Random();
527 jidG = gripperModel.
getJointId(
"right_finger");
536 Model humanoid_model;
539 static const std::vector<JointIndex> empty_index_vector;
545 std::pair<std::string, Eigen::VectorXd>(
"neutral",
neutral(humanoid_model)));
547 Model humanoid_copy_model =
548 buildReducedModel(humanoid_model, empty_index_vector, reference_config_humanoid);
550 BOOST_CHECK(humanoid_copy_model.
names == humanoid_model.
names);
551 BOOST_CHECK(humanoid_copy_model.
joints == humanoid_model.
joints);
552 BOOST_CHECK(humanoid_copy_model == humanoid_model);
556 const std::vector<JointIndex> empty_joints_to_lock;
558 const Model reduced_humanoid_model =
559 buildReducedModel(humanoid_model, empty_joints_to_lock, reference_config_humanoid);
560 BOOST_CHECK(reduced_humanoid_model.
njoints == humanoid_model.
njoints);
561 BOOST_CHECK(reduced_humanoid_model.
frames == humanoid_model.
frames);
563 BOOST_CHECK(reduced_humanoid_model.
joints == humanoid_model.
joints);
574 Model humanoid_model;
577 static const std::vector<JointIndex> empty_index_vector;
583 std::pair<std::string, Eigen::VectorXd>(
"neutral",
neutral(humanoid_model)));
585 Model humanoid_copy_model =
586 buildReducedModel(humanoid_model, empty_index_vector, reference_config_humanoid);
588 BOOST_CHECK(humanoid_copy_model.
names == humanoid_model.
names);
589 BOOST_CHECK(humanoid_copy_model.
joints == humanoid_model.
joints);
590 BOOST_CHECK(humanoid_copy_model == humanoid_model);
594 std::vector<JointIndex> joints_to_lock;
595 const std::string joint1_to_lock =
"rarm_shoulder2_joint";
596 joints_to_lock.push_back(humanoid_model.
getJointId(joint1_to_lock));
597 const std::string joint2_to_lock =
"larm_shoulder2_joint";
598 joints_to_lock.push_back(humanoid_model.
getJointId(joint2_to_lock));
600 Model reduced_humanoid_model =
603 reduced_humanoid_model.
njoints == humanoid_model.
njoints - (
int)joints_to_lock.size());
605 BOOST_CHECK(reduced_humanoid_model != humanoid_model);
607 Model reduced_humanoid_model_other_signature;
609 humanoid_model, joints_to_lock, reference_config_humanoid,
610 reduced_humanoid_model_other_signature);
611 BOOST_CHECK(reduced_humanoid_model == reduced_humanoid_model_other_signature);
614 Data data(humanoid_model), reduced_data(reduced_humanoid_model);
615 Eigen::VectorXd
q = reference_config_humanoid;
616 Eigen::VectorXd reduced_q(reduced_humanoid_model.
nq);
623 reduced_humanoid_model.
joints[
joint_id].jointConfigSelector(reduced_q) =
624 humanoid_model.
joints[reference_joint_id].jointConfigSelector(
q);
625 reduced_humanoid_model.
joints[
joint_id].JointMappedConfigSelector(reduced_q) =
626 humanoid_model.
joints[reference_joint_id].JointMappedConfigSelector(
q);
630 neutral(reduced_humanoid_model)));
638 switch (reduced_frame.
type)
651 BOOST_CHECK(
data.oMf[humanoid_frame_id].isApprox(reduced_data.oMf[
frame_id]));
656 false,
"The frame " << reduced_frame.
name <<
" is not presend in the humanoid_model");
663 BOOST_CHECK(
data.oMf[humanoid_frame_id].isApprox(reduced_data.oMf[
frame_id]));
674 VectorOfModels models;
675 for (
size_t k = 0; k < 100; ++k)
677 models.push_back(
Model());
682 #ifdef PINOCCHIO_WITH_HPP_FCL
685 Model humanoid_model;
693 buildModels::humanoidGeometries(humanoid_model, humanoid_geometry);
695 static const std::vector<JointIndex> empty_index_vector;
697 Model humanoid_copy_model;
700 humanoid_model, humanoid_geometry, empty_index_vector, reference_config_humanoid,
701 humanoid_copy_model, humanoid_copy_geometry);
703 BOOST_CHECK(humanoid_copy_model == humanoid_model);
704 BOOST_CHECK(humanoid_copy_geometry == humanoid_geometry);
706 std::vector<JointIndex> joints_to_lock;
707 const std::string joint1_to_lock =
"rarm_shoulder2_joint";
708 joints_to_lock.push_back(humanoid_model.
getJointId(joint1_to_lock));
709 const std::string joint2_to_lock =
"larm_shoulder2_joint";
710 joints_to_lock.push_back(humanoid_model.
getJointId(joint2_to_lock));
712 Model reduced_humanoid_model;
715 humanoid_model, humanoid_geometry, joints_to_lock, reference_config_humanoid,
716 reduced_humanoid_model, reduced_humanoid_geometry);
718 BOOST_CHECK(reduced_humanoid_geometry.
ngeoms == humanoid_geometry.
ngeoms);
727 BOOST_CHECK_EQUAL(go1.
name, go2.
name);
740 Data data(humanoid_model), reduced_data(reduced_humanoid_model);
741 const Eigen::VectorXd
q = reference_config_humanoid;
742 Eigen::VectorXd reduced_q(reduced_humanoid_model.
nq);
749 reduced_humanoid_model.
joints[
joint_id].jointConfigSelector(reduced_q) =
750 humanoid_model.
joints[reference_joint_id].jointConfigSelector(
q);
751 reduced_humanoid_model.
joints[
joint_id].JointMappedConfigSelector(reduced_q) =
752 humanoid_model.
joints[reference_joint_id].JointMappedConfigSelector(
q);
761 switch (reduced_frame.
type)
774 BOOST_CHECK(
data.oMf[humanoid_frame_id].isApprox(reduced_data.oMf[
frame_id]));
779 false,
"The frame " << reduced_frame.
name <<
" is not presend in the humanoid_model");
786 BOOST_CHECK(
data.oMf[humanoid_frame_id].isApprox(reduced_data.oMf[
frame_id]));
796 reduced_humanoid_model, reduced_data, reduced_humanoid_geometry, reduded_geom_data);
798 BOOST_CHECK(
geom_data.oMg.size() == reduded_geom_data.oMg.size());
801 BOOST_CHECK(
geom_data.oMg[
i].isApprox(reduded_geom_data.oMg[
i]));
805 std::vector<GeometryModel> full_geometry_models;
806 full_geometry_models.push_back(humanoid_geometry);
807 full_geometry_models.push_back(humanoid_geometry);
808 full_geometry_models.push_back(humanoid_geometry);
810 std::vector<GeometryModel> reduced_geometry_models;
812 Model reduced_humanoid_model_other_sig;
814 humanoid_model, full_geometry_models, joints_to_lock, reference_config_humanoid,
815 reduced_humanoid_model_other_sig, reduced_geometry_models);
817 BOOST_CHECK(reduced_geometry_models[0] == reduced_humanoid_geometry);
818 BOOST_CHECK(reduced_geometry_models[1] == reduced_humanoid_geometry);
819 BOOST_CHECK(reduced_geometry_models[2] == reduced_humanoid_geometry);
821 #endif // PINOCCHIO_WITH_HPP_FCL
829 size_t id_ancestor1, id_ancestor2;
831 BOOST_CHECK(ancestor == 0);
832 BOOST_CHECK(id_ancestor1 == 0);
833 BOOST_CHECK(id_ancestor2 == 0);
837 size_t id_ancestor1, id_ancestor2;
840 BOOST_CHECK(ancestor == 0);
841 BOOST_CHECK(id_ancestor1 == 0);
842 BOOST_CHECK(id_ancestor2 == 0);
846 size_t id_ancestor1, id_ancestor2;
849 BOOST_CHECK(ancestor == 0);
850 BOOST_CHECK(id_ancestor1 == 0);
851 BOOST_CHECK(id_ancestor2 == 0);
855 size_t id_ancestor1, id_ancestor2;
858 BOOST_CHECK(ancestor == 1);
860 BOOST_CHECK(
model.supports[1][id_ancestor2] == ancestor);
866 using namespace Eigen;
872 std::vector<bool> expected_cf_limits_ff({
true,
true,
true,
false,
false,
false,
false});
873 std::vector<bool> expected_cf_limits_tangent_ff({
true,
true,
true,
false,
false,
false});
874 BOOST_CHECK(cf_limits_ff == expected_cf_limits_ff);
875 BOOST_CHECK(cf_limits_tangent_ff == expected_cf_limits_tangent_ff);
880 std::vector<bool> expected_cf_limits_planar({
true,
true,
false,
false});
881 std::vector<bool> expected_cf_limits_tangent_planar({
true,
true,
false});
882 BOOST_CHECK(cf_limits_planar == expected_cf_limits_planar);
883 BOOST_CHECK(cf_limits_tangent_planar == expected_cf_limits_tangent_planar);
888 std::vector<bool> expected_cf_limits_prismatic({
true});
889 std::vector<bool> expected_cf_limits_tangent_prismatic({
true});
890 BOOST_CHECK(cf_limits_prismatic == expected_cf_limits_prismatic);
891 BOOST_CHECK(cf_limits_tangent_prismatic == expected_cf_limits_tangent_prismatic);
899 jointId =
model.addJoint(
900 jointId,
JointModelRUBZ(),
SE3(Matrix3d::Identity(), Vector3d(1.0, 0.0, 0.0)),
"Joint2");
902 std::vector<bool> expected_cf_limits_model(
904 false,
false,
false,
false,
907 std::vector<bool> model_cf_limits =
model.hasConfigurationLimit();
908 BOOST_CHECK((model_cf_limits == expected_cf_limits_model));
911 std::vector<bool> expected_cf_limits_tangent_model(
916 std::vector<bool> model_cf_limits_tangent =
model.hasConfigurationLimitInTangent();
917 BOOST_CHECK((model_cf_limits_tangent == expected_cf_limits_tangent_model));
949 BOOST_CHECK(model_mimic2 == model_exp);
984 Model humanoid_model, humanoid_mimic;
996 humanoid_mimic = humanoid_mimic.
cast<
double>();
999 index_s = humanoid_mimic.
getJointId(
"lleg_shoulder3_joint");
1000 BOOST_CHECK_EQUAL(humanoid_mimic.
idx_qs[index_s], humanoid_mimic.
joints[index_s].idx_q());
1001 BOOST_CHECK_EQUAL(humanoid_mimic.
idx_vs[index_s], humanoid_mimic.
joints[index_s].idx_v());
1005 BOOST_CHECK(humanoid_mimic_f.
check(data_f));
1006 index_s = humanoid_mimic_f.
getJointId(
"lleg_shoulder3_joint");
1007 BOOST_CHECK_EQUAL(humanoid_mimic_f.
idx_qs[index_s], humanoid_mimic_f.
joints[index_s].idx_q());
1008 BOOST_CHECK_EQUAL(humanoid_mimic_f.
idx_vs[index_s], humanoid_mimic_f.
joints[index_s].idx_v());
1020 model.addJointFrame(ffidx);
1022 model.addJointFrame(idx);
1024 model.addJointFrame(idx);
1026 model.addJointFrame(idx);
1029 boost::get<JointModelRX>(
model.joints[
model.getJointId(
"joint3")].toVariant()), 1., 0.);
1030 idx =
model.addJoint(idx, mimic, SE3::Identity(),
"joint4");
1031 model.addJointFrame(idx);
1034 const std::vector<JointIndex> joints_to_lock = {
model.getJointId(
"joint2")};
1035 Model reduced_model;
1041 Model man_model, man_mimic;
1048 buildMimicModel(man_model, {1, 3}, {2, 5}, {1., 2.}, {0., 1.}, man_mimic);
1060 BOOST_AUTO_TEST_SUITE_END()