3 #include <gtest/gtest.h>
9 #include <console_bridge/console.h>
50 const std::string& tcp_offset_name = std::get<0>(mi.
tcp_offset);
51 if (tcp_offset_name ==
"laser_callback")
52 return Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.1);
54 throw std::runtime_error(
"TCPCallback failed to find tcp!");
59 std::string path =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf";
65 std::string path =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf";
67 auto srdf = std::make_shared<SRDFModel>();
68 srdf->initFile(scene_graph, locator.
locateResource(path)->getFilePath(), locator);
75 std::string path =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf";
78 std::ostringstream ss;
85 std::string path =
"package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf";
88 std::ostringstream ss;
96 subgraph->setName(
"subgraph");
99 auto visual = std::make_shared<Visual>();
100 visual->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
101 auto collision = std::make_shared<Collision>();
102 collision->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
104 const std::string link_name1 =
"subgraph_base_link";
105 const std::string link_name2 =
"subgraph_link_1";
106 const std::string joint_name1 =
"subgraph_joint1";
107 Link link_1(link_name1);
108 link_1.
visual.push_back(visual);
110 Link link_2(link_name2);
112 Joint joint_1(joint_name1);
118 subgraph->addLink(link_1);
119 subgraph->addLink(link_2);
120 subgraph->addJoint(joint_1);
128 for (
int i = 0; i < 20; ++i)
130 SceneState random_state = state_solver->getRandomState();
133 std::vector<std::string> link_names = env.
getLinkNames();
136 for (std::size_t i = 0; i < link_names.size(); ++i)
145 std::vector<std::string> link_names = env.
getLinkNames();
147 for (
const auto& link1 : link_names)
149 for (
const auto& link2 : link_names)
169 auto env = std::make_shared<Environment>();
173 EXPECT_EQ(0, env->getCommandHistory().size());
179 bool success =
false;
188 for (
const auto& link : scene_graph->getLinks())
190 EXPECT_TRUE(scene_graph->getLinkCollisionEnabled(link->getName()));
191 EXPECT_TRUE(scene_graph->getLinkVisibility(link->getName()));
197 success = env->init(*scene_graph, srdf);
199 env->setResourceLocator(std::make_shared<tesseract_common::GeneralResourceLocator>());
207 success = env->init(urdf_string, srdf_string, std::make_shared<tesseract_common::GeneralResourceLocator>());
213 std::filesystem::path urdf_path(
214 locator.
locateResource(
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf")->getFilePath());
215 std::filesystem::path srdf_path(
216 locator.
locateResource(
"package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf")->getFilePath());
218 success = env->init(urdf_path, srdf_path, std::make_shared<tesseract_common::GeneralResourceLocator>());
231 for (
const auto& link : env->getSceneGraph()->getLinks())
233 EXPECT_TRUE(env->getSceneGraph()->getLinkCollisionEnabled(link->getName()));
234 EXPECT_TRUE(env->getSceneGraph()->getLinkVisibility(link->getName()));
237 EXPECT_EQ(env->getFindTCPOffsetCallbacks().size(), 0);
239 EXPECT_EQ(env->getFindTCPOffsetCallbacks().size(), 1);
243 std::vector<std::string> group_names_v(group_names.begin(), group_names.end());
245 EXPECT_EQ(group_names_v[0],
"manipulator");
246 EXPECT_EQ(group_names_v[1],
"manipulator_joint_group");
249 std::vector<std::string> target_joint_names = {
"joint_a1",
"joint_a2",
"joint_a3",
"joint_a4",
250 "joint_a5",
"joint_a6",
"joint_a7" };
252 std::vector<std::string> joint_names = env->getGroupJointNames(
"manipulator");
257 std::vector<std::string> joint_names = env->getGroupJointNames(
"manipulator_joint_group");
262 auto jg = env->getJointGroup(
"manipulator");
265 EXPECT_ANY_THROW(env->getJointGroup(
"does_not_exist"));
268 auto kg = env->getKinematicGroup(
"manipulator");
271 EXPECT_ANY_THROW(env->getKinematicGroup(
"does_not_exist"));
277 EXPECT_EQ(group_names_ki[0],
"manipulator");
278 EXPECT_EQ(group_names_ki[1],
"manipulator_joint_group");
281 EXPECT_TRUE(env->getDiscreteContactManager()->getContactAllowedValidator() !=
nullptr);
282 EXPECT_TRUE(env->getContinuousContactManager()->getContactAllowedValidator() !=
nullptr);
289 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteBVHManager");
290 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastBVHManager");
291 EXPECT_EQ(env->getDiscreteContactManager()->getCollisionObjects().size(), 8);
292 EXPECT_EQ(env->getContinuousContactManager()->getCollisionObjects().size(), 8);
295 env->setActiveDiscreteContactManager(
"BulletDiscreteSimpleManager");
296 env->setActiveContinuousContactManager(
"BulletCastSimpleManager");
300 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteSimpleManager");
301 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastSimpleManager");
302 EXPECT_EQ(env->getDiscreteContactManager()->getCollisionObjects().size(), 8);
303 EXPECT_EQ(env->getContinuousContactManager()->getCollisionObjects().size(), 8);
306 env->setActiveDiscreteContactManager(
"does_not_exist");
307 env->setActiveContinuousContactManager(
"does_not_exist");
311 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteSimpleManager");
312 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastSimpleManager");
313 EXPECT_EQ(env->getDiscreteContactManager()->getCollisionObjects().size(), 8);
314 EXPECT_EQ(env->getContinuousContactManager()->getCollisionObjects().size(), 8);
317 env->clearCachedDiscreteContactManager();
318 env->clearCachedContinuousContactManager();
322 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteSimpleManager");
323 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastSimpleManager");
324 EXPECT_EQ(env->getDiscreteContactManager()->getCollisionObjects().size(), 8);
325 EXPECT_EQ(env->getContinuousContactManager()->getCollisionObjects().size(), 8);
328 env->setActiveDiscreteContactManager(
"BulletDiscreteBVHManager");
329 env->setActiveContinuousContactManager(
"BulletCastBVHManager");
333 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteBVHManager");
334 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastBVHManager");
335 EXPECT_EQ(env->getDiscreteContactManager()->getCollisionObjects().size(), 8);
336 EXPECT_EQ(env->getContinuousContactManager()->getCollisionObjects().size(), 8);
341 EXPECT_EQ(env->getDiscreteContactManager(
"BulletDiscreteSimpleManager")->getName(),
"BulletDiscreteSimpleManager");
342 EXPECT_EQ(env->getContinuousContactManager(
"BulletCastSimpleManager")->getName(),
"BulletCastSimpleManager");
346 EXPECT_TRUE(env->getDiscreteContactManager(
"does_not_exist") ==
nullptr);
347 EXPECT_TRUE(env->getContinuousContactManager(
"does_not_exist") ==
nullptr);
356 auto env = std::make_shared<Environment>();
360 EXPECT_EQ(0, env->getCommandHistory().size());
365 bool success =
false;
374 for (
const auto& link : scene_graph->getLinks())
376 EXPECT_TRUE(scene_graph->getLinkCollisionEnabled(link->getName()));
377 EXPECT_TRUE(scene_graph->getLinkVisibility(link->getName()));
380 success = env->init(*scene_graph);
382 env->setResourceLocator(std::make_shared<tesseract_common::GeneralResourceLocator>());
389 success = env->init(urdf_string, std::make_shared<tesseract_common::GeneralResourceLocator>());
395 std::filesystem::path urdf_path(
396 locator.
locateResource(
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf")->getFilePath());
397 success = env->init(urdf_path, std::make_shared<tesseract_common::GeneralResourceLocator>());
410 for (
const auto& link : env->getSceneGraph()->getLinks())
412 EXPECT_TRUE(env->getSceneGraph()->getLinkCollisionEnabled(link->getName()));
413 EXPECT_TRUE(env->getSceneGraph()->getLinkVisibility(link->getName()));
416 EXPECT_TRUE(env->getDiscreteContactManager() ==
nullptr);
417 EXPECT_TRUE(env->getContinuousContactManager() ==
nullptr);
422 TEST(TesseractEnvironmentUnit, EnvInitURDFOnlyUnit)
429 TEST(TesseractEnvironmentUnit, EnvInitFailuresUnit)
431 auto rl = std::make_shared<tesseract_common::GeneralResourceLocator>();
433 auto env = std::make_shared<Environment>();
444 auto env = std::make_shared<Environment>();
452 auto env = std::make_shared<Environment>();
453 auto cmd = std::make_shared<MoveJointCommand>(
"joint_name",
"parent_link");
454 commands.push_back(cmd);
460 auto env = std::make_shared<Environment>();
461 std::string urdf_string;
467 auto env = std::make_shared<Environment>();
468 std::filesystem::path urdf_path(
"/usr/tmp/doesnotexist.urdf");
474 auto env = std::make_shared<Environment>();
475 std::string urdf_string;
482 auto env = std::make_shared<Environment>();
483 std::filesystem::path urdf_path(
"/usr/tmp/doesnotexist.urdf");
484 std::filesystem::path srdf_path(
485 rl->locateResource(
"package://tesseract_support/urdf/lbr_iiwa_14_r820.srdf")->getFilePath());
491 auto env = std::make_shared<Environment>();
493 std::string srdf_string;
499 auto env = std::make_shared<Environment>();
500 std::filesystem::path urdf_path(
501 rl->locateResource(
"package://tesseract_support/urdf/lbr_iiwa_14_r820.urdf")->getFilePath());
502 std::filesystem::path srdf_path(
"/usr/tmp/doesnotexist.srdf");
508 TEST(TesseractEnvironmentUnit, EnvCloneContactManagerUnit)
515 const std::vector<std::string>& e_active_list = env->getActiveLinkNames();
516 const std::vector<std::string>& d_active_list = discrete_manager->getActiveCollisionObjects();
517 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), d_active_list.begin()));
520 const std::vector<std::string>& c_active_list = cast_manager->getActiveCollisionObjects();
521 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), c_active_list.begin()));
529 const std::vector<std::string>& e_active_list = env->getActiveLinkNames();
530 const std::vector<std::string>& d_active_list = discrete_manager->getActiveCollisionObjects();
531 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), d_active_list.begin()));
534 const std::vector<std::string>& c_active_list = cast_manager->getActiveCollisionObjects();
535 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), c_active_list.begin()));
543 const std::vector<std::string>& e_active_list = env->getActiveLinkNames();
544 const std::vector<std::string>& d_active_list = discrete_manager->getActiveCollisionObjects();
545 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), d_active_list.begin()));
548 const std::vector<std::string>& c_active_list = cast_manager->getActiveCollisionObjects();
549 EXPECT_TRUE(std::equal(e_active_list.begin(), e_active_list.end(), c_active_list.begin()));
553 TEST(TesseractEnvironmentUnit, EnvAddAndRemoveAllowedCollisionCommandUnit)
558 int callback_counter{ 0 };
561 env->addEventCallback(0, callback);
563 env->removeEventCallback(0);
566 env->addEventCallback(0, callback);
568 env->clearEventCallbacks();
571 env->addEventCallback(0, callback);
575 std::string l1 =
"link_1";
576 std::string l2 =
"link_6";
577 std::string
r =
"Unit Test";
580 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"base_link"));
581 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_2"));
582 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_3"));
583 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_4"));
584 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_5"));
585 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_6"));
586 EXPECT_TRUE(acm->isCollisionAllowed(l1,
"link_7"));
589 EXPECT_EQ(env->getCommandHistory().size(), 3);
594 auto cmd_remove = std::make_shared<ModifyAllowedCollisionsCommand>(remove_ac, ModifyAllowedCollisionsType::REMOVE);
595 EXPECT_EQ(cmd_remove->getType(), CommandType::MODIFY_ALLOWED_COLLISIONS);
596 EXPECT_EQ(cmd_remove->getAllowedCollisionMatrix().getAllAllowedCollisions().size(), 1);
597 EXPECT_TRUE(cmd_remove->getAllowedCollisionMatrix().isCollisionAllowed(l1, l2));
605 EXPECT_EQ(env->getCommandHistory().size(), 4);
606 EXPECT_EQ(env->getCommandHistory().back(), cmd_remove);
611 auto cmd_add = std::make_shared<ModifyAllowedCollisionsCommand>(add_ac, ModifyAllowedCollisionsType::ADD);
612 EXPECT_EQ(cmd_add->getType(), CommandType::MODIFY_ALLOWED_COLLISIONS);
613 EXPECT_EQ(cmd_add->getAllowedCollisionMatrix().getAllAllowedCollisions().size(), 1);
614 EXPECT_TRUE(cmd_add->getAllowedCollisionMatrix().isCollisionAllowed(l1, l2));
622 EXPECT_EQ(env->getCommandHistory().size(), 5);
623 EXPECT_EQ(env->getCommandHistory().back(), cmd_add);
626 auto cmd_remove_link = std::make_shared<RemoveAllowedCollisionLinkCommand>(l1);
627 EXPECT_EQ(cmd_remove_link->getType(), CommandType::REMOVE_ALLOWED_COLLISION_LINK);
628 EXPECT_EQ(cmd_remove_link->getLinkName(), l1);
642 EXPECT_EQ(env->getCommandHistory().size(), 6);
643 EXPECT_EQ(env->getCommandHistory().back(), cmd_remove_link);
646 TEST(TesseractEnvironmentUnit, EnvAddandRemoveLink)
651 auto visual = std::make_shared<Visual>();
652 visual->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
653 auto collision = std::make_shared<Collision>();
654 collision->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
656 const std::string link_name1 =
"link_n1";
657 const std::string link_name2 =
"link_n2";
658 const std::string joint_name1 =
"joint_n1";
659 Link link_1(link_name1);
660 link_1.
visual.push_back(visual);
662 Link link_2(link_name2);
664 Joint joint_1(joint_name1);
671 auto cmd = std::make_shared<AddLinkCommand>(link_1);
673 EXPECT_EQ(cmd->getType(), CommandType::ADD_LINK);
681 EXPECT_EQ(env->getCommandHistory().size(), 4);
682 EXPECT_TRUE(env->getDiscreteContactManager()->hasCollisionObject(link_name1));
683 EXPECT_FALSE(env->getDiscreteContactManager()->hasCollisionObject(link_name2));
684 EXPECT_TRUE(env->getContinuousContactManager()->hasCollisionObject(link_name1));
685 EXPECT_FALSE(env->getContinuousContactManager()->hasCollisionObject(link_name2));
687 std::vector<std::string> link_names = env->getLinkNames();
688 std::vector<std::string> joint_names = env->getJointNames();
690 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) != link_names.end());
691 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(),
"joint_" + link_name1) != joint_names.end());
697 auto cmd = std::make_shared<AddLinkCommand>(link_2, joint_1);
699 EXPECT_EQ(cmd->getType(), CommandType::ADD_LINK);
707 EXPECT_EQ(env->getCommandHistory().size(), 5);
709 link_names = env->getLinkNames();
710 joint_names = env->getJointNames();
711 state = env->getState();
712 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) != link_names.end());
713 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) != joint_names.end());
721 auto cmd = std::make_shared<RemoveLinkCommand>(link_name1);
723 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_LINK);
724 EXPECT_EQ(cmd->getLinkName(), link_name1);
730 EXPECT_EQ(env->getCommandHistory().size(), 6);
731 EXPECT_FALSE(env->getDiscreteContactManager()->hasCollisionObject(link_name1));
732 EXPECT_FALSE(env->getDiscreteContactManager()->hasCollisionObject(link_name2));
733 EXPECT_FALSE(env->getContinuousContactManager()->hasCollisionObject(link_name1));
734 EXPECT_FALSE(env->getContinuousContactManager()->hasCollisionObject(link_name2));
736 link_names = env->getLinkNames();
737 joint_names = env->getJointNames();
738 state = env->getState();
739 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) == link_names.end());
740 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(),
"joint_" + link_name1) == joint_names.end());
741 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) == link_names.end());
742 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) == joint_names.end());
754 auto cmd = std::make_shared<RemoveLinkCommand>(link_name1);
756 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_LINK);
757 EXPECT_EQ(cmd->getLinkName(), link_name1);
762 EXPECT_EQ(env->getCommandHistory().size(), 6);
765 auto cmd = std::make_shared<RemoveLinkCommand>(link_name2);
767 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_LINK);
768 EXPECT_EQ(cmd->getLinkName(), link_name2);
773 EXPECT_EQ(env->getCommandHistory().size(), 6);
776 auto cmd = std::make_shared<RemoveJointCommand>(joint_name1);
778 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_JOINT);
779 EXPECT_EQ(cmd->getJointName(), joint_name1);
784 EXPECT_EQ(env->getCommandHistory().size(), 6);
787 auto cmd = std::make_shared<RemoveJointCommand>(
"joint_" + link_name1);
789 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_JOINT);
790 EXPECT_EQ(cmd->getJointName(),
"joint_" + link_name1);
795 EXPECT_EQ(env->getCommandHistory().size(), 6);
798 const std::string link_name3 =
"link_n3";
799 const std::string joint_name3 =
"joint_n3";
800 Link link_3(link_name3);
802 Joint joint_3(joint_name3);
808 EXPECT_ANY_THROW(std::make_shared<AddLinkCommand>(link_3, joint_3));
812 TEST(TesseractEnvironmentUnit, EnvAddandRemoveTrajectoryLink)
821 std::string link_name =
"traj_link";
822 std::string parent_link_name =
"base_link";
825 auto cmd = std::make_shared<AddTrajectoryLinkCommand>(link_name, parent_link_name, trajectory,
false);
827 EXPECT_EQ(cmd->getType(), CommandType::ADD_TRAJECTORY_LINK);
829 EXPECT_TRUE(cmd->getParentLinkName() == parent_link_name);
837 EXPECT_EQ(env->getCommandHistory().size(), 4);
838 EXPECT_TRUE(env->getDiscreteContactManager()->hasCollisionObject(link_name));
839 EXPECT_TRUE(env->getContinuousContactManager()->hasCollisionObject(link_name));
841 std::vector<std::string> link_names = env->getLinkNames();
842 std::vector<std::string> joint_names = env->getJointNames();
844 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name) != link_names.end());
845 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(),
"joint_" + link_name) != joint_names.end());
853 auto cmd = std::make_shared<RemoveLinkCommand>(link_name);
855 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_LINK);
856 EXPECT_EQ(cmd->getLinkName(), link_name);
862 EXPECT_EQ(env->getCommandHistory().size(), 5);
863 EXPECT_FALSE(env->getDiscreteContactManager()->hasCollisionObject(link_name));
864 EXPECT_FALSE(env->getContinuousContactManager()->hasCollisionObject(link_name));
866 link_names = env->getLinkNames();
867 joint_names = env->getJointNames();
868 state = env->getState();
869 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name) == link_names.end());
870 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(),
"joint_" + link_name) == joint_names.end());
871 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), link_name) == joint_names.end());
882 auto cmd = std::make_shared<RemoveLinkCommand>(link_name);
884 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_LINK);
885 EXPECT_EQ(cmd->getLinkName(), link_name);
890 EXPECT_EQ(env->getCommandHistory().size(), 5);
893 auto cmd = std::make_shared<RemoveJointCommand>(
"joint_" + link_name);
895 EXPECT_EQ(cmd->getType(), CommandType::REMOVE_JOINT);
896 EXPECT_EQ(cmd->getJointName(),
"joint_" + link_name);
901 EXPECT_EQ(env->getCommandHistory().size(), 5);
904 TEST(TesseractEnvironmentUnit, EnvAddKinematicsInformationCommandUnit)
911 auto cmd = std::make_shared<AddKinematicsInformationCommand>(kin_info);
914 EXPECT_EQ(cmd->getType(), CommandType::ADD_KINEMATICS_INFORMATION);
926 EXPECT_EQ(env->getCommandHistory().size(), 4);
929 TEST(TesseractEnvironmentUnit, EnvAddSceneGraphCommandUnit)
935 subgraph->setName(
"subgraph");
938 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph);
940 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
947 EXPECT_EQ(env->getCommandHistory().size(), 3);
949 Joint joint_1(
"provided_subgraph_joint");
955 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph, joint_1);
957 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
964 EXPECT_EQ(env->getCommandHistory().size(), 3);
968 const std::string link_name1 =
"subgraph_base_link";
969 const std::string link_name2 =
"subgraph_link_1";
970 const std::string joint_name1 =
"subgraph_joint1";
973 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph);
975 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
982 EXPECT_EQ(env->getCommandHistory().size(), 4);
983 EXPECT_TRUE(env->getDiscreteContactManager()->hasCollisionObject(link_name1));
984 EXPECT_FALSE(env->getDiscreteContactManager()->hasCollisionObject(link_name2));
985 EXPECT_TRUE(env->getContinuousContactManager()->hasCollisionObject(link_name1));
986 EXPECT_FALSE(env->getContinuousContactManager()->hasCollisionObject(link_name2));
989 EXPECT_TRUE(env->getJoint(
"subgraph_joint") !=
nullptr);
996 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph);
998 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
1005 EXPECT_EQ(env->getCommandHistory().size(), 4);
1009 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph,
"prefix_");
1011 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
1018 EXPECT_EQ(env->getCommandHistory().size(), 5);
1020 state = env->getState();
1021 EXPECT_TRUE(env->getJoint(
"prefix_subgraph_joint") !=
nullptr);
1022 EXPECT_TRUE(env->getLink(
"prefix_subgraph_base_link") !=
nullptr);
1033 auto cmd = std::make_shared<AddSceneGraphCommand>(*subgraph, joint_1,
"prefix2_");
1035 EXPECT_EQ(cmd->getType(), CommandType::ADD_SCENE_GRAPH);
1042 EXPECT_EQ(env->getCommandHistory().size(), 6);
1044 state = env->getState();
1045 EXPECT_TRUE(env->getJoint(
"provided_subgraph_joint") !=
nullptr);
1046 EXPECT_TRUE(env->getLink(
"prefix2_subgraph_base_link") !=
nullptr);
1052 TEST(TesseractEnvironmentUnit, EnvChangeJointLimitsCommandUnit)
1058 EXPECT_EQ(env->getCommandHistory().size(), 3);
1074 double new_lower = 1.0;
1075 double new_upper = 2.0;
1076 double new_velocity = 3.0;
1077 double new_acceleration = 4.0;
1079 int revision = env->getRevision();
1080 auto cmd_jpl = std::make_shared<ChangeJointPositionLimitsCommand>(
"joint_a1", new_lower, new_upper);
1081 EXPECT_EQ(cmd_jpl->getType(), CommandType::CHANGE_JOINT_POSITION_LIMITS);
1082 EXPECT_EQ(cmd_jpl->getLimits().size(), 1);
1083 auto it_jpl = cmd_jpl->getLimits().find(
"joint_a1");
1084 EXPECT_TRUE(it_jpl != cmd_jpl->getLimits().end());
1086 EXPECT_NEAR(it_jpl->second.first, new_lower, 1e-6);
1087 EXPECT_NEAR(it_jpl->second.second, new_upper, 1e-6);
1089 EXPECT_EQ(revision + 1, env->getRevision());
1090 EXPECT_EQ(revision + 1, env->getCommandHistory().size());
1091 EXPECT_EQ(env->getCommandHistory().back(), cmd_jpl);
1093 auto cmd_jvl = std::make_shared<ChangeJointVelocityLimitsCommand>(
"joint_a1", new_velocity);
1094 EXPECT_EQ(cmd_jvl->getType(), CommandType::CHANGE_JOINT_VELOCITY_LIMITS);
1095 EXPECT_EQ(cmd_jvl->getLimits().size(), 1);
1096 auto it_jvl = cmd_jvl->getLimits().find(
"joint_a1");
1097 EXPECT_TRUE(it_jvl != cmd_jvl->getLimits().end());
1101 EXPECT_EQ(revision + 2, env->getRevision());
1102 EXPECT_EQ(revision + 2, env->getCommandHistory().size());
1103 EXPECT_EQ(env->getCommandHistory().back(), cmd_jvl);
1105 auto cmd_jal = std::make_shared<ChangeJointAccelerationLimitsCommand>(
"joint_a1", new_acceleration);
1106 EXPECT_EQ(cmd_jal->getType(), CommandType::CHANGE_JOINT_ACCELERATION_LIMITS);
1107 EXPECT_EQ(cmd_jal->getLimits().size(), 1);
1108 auto it_jal = cmd_jal->getLimits().find(
"joint_a1");
1109 EXPECT_TRUE(it_jal != cmd_jal->getLimits().end());
1111 EXPECT_NEAR(it_jal->second, new_acceleration, 1e-6);
1113 EXPECT_EQ(revision + 3, env->getRevision());
1114 EXPECT_EQ(revision + 3, env->getCommandHistory().size());
1115 EXPECT_EQ(env->getCommandHistory().back(), cmd_jal);
1118 JointLimits new_limits = *(env->getJointLimits(
"joint_a1"));
1125 double new_lower = 1.0;
1126 double new_upper = 2.0;
1127 double new_velocity = 3.0;
1128 double new_acceleration = 4.0;
1130 std::unordered_map<std::string, std::pair<double, double> > position_limit_map;
1131 position_limit_map[
"joint_a1"] = std::make_pair(new_lower, new_upper);
1133 std::unordered_map<std::string, double> velocity_limit_map;
1134 velocity_limit_map[
"joint_a1"] = new_velocity;
1136 std::unordered_map<std::string, double> acceleration_limit_map;
1137 acceleration_limit_map[
"joint_a1"] = new_acceleration;
1139 int revision = env->getRevision();
1140 auto cmd_jpl = std::make_shared<ChangeJointPositionLimitsCommand>(position_limit_map);
1141 EXPECT_EQ(cmd_jpl->getType(), CommandType::CHANGE_JOINT_POSITION_LIMITS);
1142 EXPECT_EQ(cmd_jpl->getLimits().size(), 1);
1143 auto it_jpl = cmd_jpl->getLimits().find(
"joint_a1");
1144 EXPECT_TRUE(it_jpl != cmd_jpl->getLimits().end());
1146 EXPECT_NEAR(it_jpl->second.first, new_lower, 1e-6);
1147 EXPECT_NEAR(it_jpl->second.second, new_upper, 1e-6);
1149 EXPECT_EQ(revision + 1, env->getRevision());
1150 EXPECT_EQ(revision + 1, env->getCommandHistory().size());
1151 EXPECT_EQ(env->getCommandHistory().back(), cmd_jpl);
1153 auto cmd_jvl = std::make_shared<ChangeJointVelocityLimitsCommand>(velocity_limit_map);
1154 EXPECT_EQ(cmd_jvl->getType(), CommandType::CHANGE_JOINT_VELOCITY_LIMITS);
1155 EXPECT_EQ(cmd_jvl->getLimits().size(), 1);
1156 auto it_jvl = cmd_jvl->getLimits().find(
"joint_a1");
1157 EXPECT_TRUE(it_jvl != cmd_jvl->getLimits().end());
1161 EXPECT_EQ(revision + 2, env->getRevision());
1162 EXPECT_EQ(revision + 2, env->getCommandHistory().size());
1163 EXPECT_EQ(env->getCommandHistory().back(), cmd_jvl);
1165 auto cmd_jal = std::make_shared<ChangeJointAccelerationLimitsCommand>(acceleration_limit_map);
1166 EXPECT_EQ(cmd_jal->getType(), CommandType::CHANGE_JOINT_ACCELERATION_LIMITS);
1167 EXPECT_EQ(cmd_jal->getLimits().size(), 1);
1168 auto it_jal = cmd_jal->getLimits().find(
"joint_a1");
1169 EXPECT_TRUE(it_jal != cmd_jal->getLimits().end());
1171 EXPECT_NEAR(it_jal->second, new_acceleration, 1e-6);
1173 EXPECT_EQ(revision + 3, env->getRevision());
1174 EXPECT_EQ(revision + 3, env->getCommandHistory().size());
1175 EXPECT_EQ(env->getCommandHistory().back(), cmd_jal);
1178 JointLimits new_limits = *(env->getJointLimits(
"joint_a1"));
1186 TEST(TesseractEnvironmentUnit, EnvChangeJointOriginCommandUnit)
1192 EXPECT_EQ(env->getCommandHistory().size(), 3);
1194 const std::string link_name1 =
"link_n1";
1195 const std::string joint_name1 =
"joint_n1";
1196 Link link_1(link_name1);
1198 Joint joint_1(joint_name1);
1203 EXPECT_TRUE(env->applyCommand(std::make_shared<AddLinkCommand>(link_1, joint_1)));
1207 EXPECT_EQ(env->getCommandHistory().size(), 4);
1214 Eigen::Isometry3d new_origin = Eigen::Isometry3d::Identity();
1215 new_origin.translation()(0) += 1.234;
1217 auto cmd = std::make_shared<ChangeJointOriginCommand>(joint_name1, new_origin);
1218 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_JOINT_ORIGIN);
1219 EXPECT_EQ(cmd->getJointName(), joint_name1);
1220 EXPECT_TRUE(new_origin.isApprox(cmd->getOrigin()));
1222 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1226 EXPECT_EQ(env->getCommandHistory().size(), 5);
1229 state = env->getState();
1230 EXPECT_TRUE(env->getJoint(joint_name1)->parent_to_joint_origin_transform.isApprox(new_origin));
1237 TEST(TesseractEnvironmentUnit, EnvChangeLinkOriginCommandUnit)
1243 EXPECT_EQ(env->getCommandHistory().size(), 3);
1245 std::string link_name =
"base_link";
1246 Eigen::Isometry3d new_origin = Eigen::Isometry3d::Identity();
1247 new_origin.translation()(0) += 1.234;
1249 auto cmd = std::make_shared<ChangeLinkOriginCommand>(link_name, new_origin);
1250 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_LINK_ORIGIN);
1251 EXPECT_EQ(cmd->getLinkName(), link_name);
1252 EXPECT_TRUE(new_origin.isApprox(cmd->getOrigin()));
1253 EXPECT_ANY_THROW(env->applyCommand(cmd));
1256 TEST(TesseractEnvironmentUnit, EnvChangeLinkCollisionEnabledCommandUnit)
1263 EXPECT_EQ(env->getCommandHistory().size(), 3);
1265 std::string link_name =
"link_1";
1266 EXPECT_TRUE(env->getSceneGraph()->getLinkCollisionEnabled(link_name));
1269 auto cmd = std::make_shared<ChangeLinkCollisionEnabledCommand>(link_name,
false);
1271 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_LINK_COLLISION_ENABLED);
1273 EXPECT_EQ(cmd->getLinkName(), link_name);
1275 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1280 EXPECT_EQ(env->getCommandHistory().size(), 4);
1281 EXPECT_FALSE(env->getSceneGraph()->getLinkCollisionEnabled(link_name));
1284 auto cmd = std::make_shared<ChangeLinkCollisionEnabledCommand>(link_name,
true);
1286 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_LINK_COLLISION_ENABLED);
1288 EXPECT_EQ(cmd->getLinkName(), link_name);
1290 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1295 EXPECT_EQ(env->getCommandHistory().size(), 5);
1296 EXPECT_TRUE(env->getSceneGraph()->getLinkCollisionEnabled(link_name));
1299 TEST(TesseractEnvironmentUnit, EnvChangeLinkVisibilityCommandUnit)
1306 EXPECT_EQ(env->getCommandHistory().size(), 3);
1308 std::string link_name =
"link_1";
1309 EXPECT_TRUE(env->getSceneGraph()->getLinkVisibility(link_name));
1311 auto cmd = std::make_shared<ChangeLinkVisibilityCommand>(link_name,
false);
1313 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_LINK_VISIBILITY);
1315 EXPECT_EQ(cmd->getLinkName(), link_name);
1317 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1321 EXPECT_EQ(env->getCommandHistory().size(), 4);
1322 EXPECT_FALSE(env->getSceneGraph()->getLinkVisibility(link_name));
1325 TEST(TesseractEnvironmentUnit, EnvSetActiveContinuousContactManagerCommandUnit)
1332 EXPECT_EQ(env->getCommandHistory().size(), 3);
1334 auto cmd = std::make_shared<SetActiveContinuousContactManagerCommand>(
"BulletCastSimpleManager");
1336 EXPECT_EQ(cmd->getType(), CommandType::SET_ACTIVE_CONTINUOUS_CONTACT_MANAGER);
1337 EXPECT_EQ(cmd->getName(),
"BulletCastSimpleManager");
1339 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1343 EXPECT_EQ(env->getCommandHistory().size(), 4);
1344 EXPECT_EQ(env->getContinuousContactManager()->getName(),
"BulletCastSimpleManager");
1347 TEST(TesseractEnvironmentUnit, EnvSetActiveDiscreteContactManagerCommandUnit)
1354 EXPECT_EQ(env->getCommandHistory().size(), 3);
1356 auto cmd = std::make_shared<SetActiveDiscreteContactManagerCommand>(
"BulletDiscreteSimpleManager");
1358 EXPECT_EQ(cmd->getType(), CommandType::SET_ACTIVE_DISCRETE_CONTACT_MANAGER);
1359 EXPECT_EQ(cmd->getName(),
"BulletDiscreteSimpleManager");
1361 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1365 EXPECT_EQ(env->getCommandHistory().size(), 4);
1366 EXPECT_EQ(env->getDiscreteContactManager()->getName(),
"BulletDiscreteSimpleManager");
1369 TEST(TesseractEnvironmentUnit, EnvChangeCollisionMarginsCommandUnit)
1372 std::string link_name1 =
"link_1";
1373 std::string link_name2 =
"link_2";
1374 double margin = 0.1;
1379 EXPECT_EQ(env->getCommandHistory().size(), 3);
1380 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1383 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1393 auto cmd = std::make_shared<ChangeCollisionMarginsCommand>(pair_margin_data, overrid_type);
1395 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1396 EXPECT_FALSE(cmd->getDefaultCollisionMargin().has_value());
1397 EXPECT_EQ(cmd->getCollisionMarginPairData(), pair_margin_data);
1403 EXPECT_EQ(env->getCommandHistory().size(), 4);
1404 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1405 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1408 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1413 std::string link_name3 =
"link_3";
1414 std::string link_name4 =
"link_4";
1420 cmd = std::make_shared<ChangeCollisionMarginsCommand>(pair_margin_data, overrid_type);
1422 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1423 EXPECT_FALSE(cmd->getDefaultCollisionMargin().has_value());
1424 EXPECT_EQ(cmd->getCollisionMarginPairData(), pair_margin_data);
1430 EXPECT_EQ(env->getCommandHistory().size(), 5);
1431 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1434 env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2), 0, 1e-6);
1435 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1438 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name3, link_name4),
1441 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name3, link_name4),
1450 EXPECT_EQ(env->getCommandHistory().size(), 3);
1451 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.0, 1e-6);
1452 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.0, 1e-6);
1454 const double defaut_margin{ 0.1 };
1455 auto cmd = std::make_shared<ChangeCollisionMarginsCommand>(defaut_margin);
1457 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1458 EXPECT_TRUE(cmd->getDefaultCollisionMargin().has_value());
1459 EXPECT_NEAR(cmd->getDefaultCollisionMargin().value(), defaut_margin, 0.0001);
1460 EXPECT_TRUE(cmd->getCollisionMarginPairData().empty());
1466 EXPECT_EQ(env->getCommandHistory().size(), 4);
1467 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1468 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.1, 1e-6);
1469 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.1, 1e-6);
1473 std::string link_name1 =
"link_1";
1474 std::string link_name2 =
"link_2";
1475 double margin = 0.1;
1480 EXPECT_EQ(env->getCommandHistory().size(), 3);
1481 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1484 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1493 auto cmd = std::make_shared<ChangeCollisionMarginsCommand>(pcmd, overrid_type);
1495 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1496 EXPECT_FALSE(cmd->getDefaultCollisionMargin().has_value());
1497 EXPECT_EQ(cmd->getCollisionMarginPairData(), pcmd);
1498 EXPECT_EQ(cmd->getCollisionMarginPairOverrideType(), overrid_type);
1503 EXPECT_EQ(env->getCommandHistory().size(), 4);
1504 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1505 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1508 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1513 std::string link_name3 =
"link_3";
1514 std::string link_name4 =
"link_4";
1520 cmd = std::make_shared<ChangeCollisionMarginsCommand>(pcmd, overrid_type);
1522 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1523 EXPECT_FALSE(cmd->getDefaultCollisionMargin().has_value());
1524 EXPECT_EQ(cmd->getCollisionMarginPairData(), pcmd);
1525 EXPECT_EQ(cmd->getCollisionMarginPairOverrideType(), overrid_type);
1530 EXPECT_EQ(env->getCommandHistory().size(), 5);
1531 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1534 env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2), 0, 1e-6);
1535 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name1, link_name2),
1538 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getCollisionMargin(link_name3, link_name4),
1541 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getCollisionMargin(link_name3, link_name4),
1550 EXPECT_EQ(env->getCommandHistory().size(), 3);
1551 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.0, 1e-6);
1552 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.0, 1e-6);
1554 auto cmd = std::make_shared<ChangeCollisionMarginsCommand>(0.1);
1556 EXPECT_EQ(cmd->getType(), CommandType::CHANGE_COLLISION_MARGINS);
1557 EXPECT_NEAR(cmd->getDefaultCollisionMargin().value(), 0.1, 0.00001);
1558 EXPECT_TRUE(cmd->getCollisionMarginPairData().empty());
1564 EXPECT_EQ(env->getCommandHistory().size(), 4);
1565 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1566 EXPECT_NEAR(env->getDiscreteContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.1, 1e-6);
1567 EXPECT_NEAR(env->getContinuousContactManager()->getCollisionMarginData().getDefaultCollisionMargin(), 0.1, 1e-6);
1571 TEST(TesseractEnvironmentUnit, EnvMoveJointCommandUnit)
1577 EXPECT_EQ(env->getCommandHistory().size(), 3);
1579 const std::string link_name1 =
"link_n1";
1580 const std::string link_name2 =
"link_n2";
1581 const std::string joint_name1 =
"joint_n1";
1582 const std::string joint_name2 =
"joint_n2";
1583 Link link_1(link_name1);
1584 Link link_2(link_name2);
1586 Joint joint_1(joint_name1);
1591 Joint joint_2(joint_name2);
1597 env->applyCommand(std::make_shared<AddLinkCommand>(link_1, joint_1));
1601 EXPECT_EQ(env->getCommandHistory().size(), 4);
1607 env->applyCommand(std::make_shared<AddLinkCommand>(link_2, joint_2));
1610 EXPECT_EQ(env->getCommandHistory().size(), 5);
1612 std::vector<std::string> link_names = env->getLinkNames();
1613 std::vector<std::string> joint_names = env->getJointNames();
1614 state = env->getState();
1615 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) != link_names.end());
1616 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) != link_names.end());
1617 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) != joint_names.end());
1618 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name2) != joint_names.end());
1628 auto cmd = std::make_shared<MoveJointCommand>(joint_name1,
"tool0");
1630 EXPECT_EQ(cmd->getType(), CommandType::MOVE_JOINT);
1631 EXPECT_EQ(cmd->getJointName(), joint_name1);
1632 EXPECT_EQ(cmd->getParentLink(),
"tool0");
1634 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1636 link_names = env->getLinkNames();
1637 joint_names = env->getJointNames();
1638 state = env->getState();
1639 EXPECT_TRUE(env->getJoint(joint_name1)->parent_link_name ==
"tool0");
1640 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) != link_names.end());
1641 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) != link_names.end());
1642 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) != joint_names.end());
1643 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name2) != joint_names.end());
1654 TEST(TesseractEnvironmentUnit, EnvMoveLinkCommandUnit)
1660 EXPECT_EQ(env->getCommandHistory().size(), 3);
1662 const std::string link_name1 =
"link_n1";
1663 const std::string link_name2 =
"link_n2";
1664 const std::string joint_name1 =
"joint_n1";
1665 const std::string joint_name2 =
"joint_n2";
1666 Link link_1(link_name1);
1667 Link link_2(link_name2);
1669 Joint joint_1(joint_name1);
1674 Joint joint_2(joint_name2);
1680 env->applyCommand(std::make_shared<AddLinkCommand>(link_1, joint_1));
1684 EXPECT_EQ(env->getCommandHistory().size(), 4);
1690 env->applyCommand(std::make_shared<AddLinkCommand>(link_2, joint_2));
1693 EXPECT_EQ(env->getCommandHistory().size(), 5);
1695 std::vector<std::string> link_names = env->getLinkNames();
1696 std::vector<std::string> joint_names = env->getJointNames();
1697 state = env->getState();
1698 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) != link_names.end());
1699 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) != link_names.end());
1700 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) != joint_names.end());
1701 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name2) != joint_names.end());
1711 std::string moved_joint_name = joint_name1 +
"_moved";
1712 Joint move_link_joint = joint_1.
clone(moved_joint_name);
1715 auto cmd = std::make_shared<MoveLinkCommand>(move_link_joint);
1717 EXPECT_EQ(cmd->getType(), CommandType::MOVE_LINK);
1720 EXPECT_EQ(env->getCommandHistory().back(), cmd);
1722 link_names = env->getLinkNames();
1723 joint_names = env->getJointNames();
1724 state = env->getState();
1725 EXPECT_TRUE(env->getJoint(moved_joint_name)->parent_link_name ==
"tool0");
1726 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name1) != link_names.end());
1727 EXPECT_TRUE(std::find(link_names.begin(), link_names.end(), link_name2) != link_names.end());
1728 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name1) == joint_names.end());
1729 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), moved_joint_name) != joint_names.end());
1730 EXPECT_TRUE(std::find(joint_names.begin(), joint_names.end(), joint_name2) != joint_names.end());
1743 TEST(TesseractEnvironmentUnit, EnvCurrentStatePreservedWhenEnvChanges)
1747 auto timestamp1 = env->getTimestamp();
1749 int callback_counter{ 0 };
1752 env->addEventCallback(0, callback);
1754 env->removeEventCallback(0);
1757 env->addEventCallback(0, callback);
1759 env->clearEventCallbacks();
1762 env->addEventCallback(0, callback);
1767 for (
const auto& link_name : env->getLinkNames())
1769 EXPECT_TRUE(env->getLinkCollisionEnabled(link_name));
1774 auto current_state_timestamp1 = env->getCurrentStateTimestamp();
1777 std::unordered_map<std::string, double> joint_states;
1778 joint_states[
"joint_a1"] = 0.0;
1779 joint_states[
"joint_a2"] = 0.0;
1780 joint_states[
"joint_a3"] = 0.0;
1781 joint_states[
"joint_a4"] = -1.57;
1782 joint_states[
"joint_a5"] = 0.0;
1783 joint_states[
"joint_a6"] = 0.0;
1784 joint_states[
"joint_a7"] = 0.0;
1785 env->setState(joint_states);
1789 auto current_state_timestamp2 = env->getCurrentStateTimestamp();
1790 auto timestamp2 = env->getTimestamp();
1792 EXPECT_TRUE(current_state_timestamp2 > current_state_timestamp1);
1796 for (
auto& joint_state : joint_states)
1801 Link link(
"link_n1");
1803 Joint joint(
"joint_n1");
1808 env->applyCommand(std::make_shared<AddLinkCommand>(link, joint));
1811 auto current_state_timestamp3 = env->getCurrentStateTimestamp();
1812 auto timestamp3 = env->getTimestamp();
1814 EXPECT_TRUE(current_state_timestamp3 > current_state_timestamp2);
1817 state = env->getState();
1818 for (
auto& joint_state : joint_states)
1824 for (
const auto& link_name : env->getLinkNames())
1826 EXPECT_TRUE(env->getLinkCollisionEnabled(link_name));
1831 TEST(TesseractEnvironmentUnit, EnvResetUnit)
1837 for (
const auto& link_name : env->getLinkNames())
1839 EXPECT_TRUE(env->getLinkCollisionEnabled(link_name));
1843 EXPECT_EQ(env->getRevision(), env->getInitRevision());
1844 int init_rev = env->getInitRevision();
1846 Link link(
"link_n1");
1847 Joint joint(
"joint_n1");
1852 env->applyCommand(std::make_shared<AddLinkCommand>(link, joint));
1853 EXPECT_EQ(env->getRevision(), init_rev + 1);
1854 EXPECT_EQ(env->getInitRevision(), init_rev);
1855 EXPECT_EQ(env->getCommandHistory().size(), init_rev + 1);
1857 Commands commands = env->getCommandHistory();
1861 EXPECT_EQ(env->getRevision(), init_rev);
1862 EXPECT_EQ(env->getInitRevision(), init_rev);
1863 EXPECT_EQ(env->getCommandHistory().size(), init_rev);
1867 for (
const auto& link_name : env->getLinkNames())
1869 EXPECT_TRUE(env->getLinkCollisionEnabled(link_name));
1875 EXPECT_EQ(env->getRevision(), init_rev + 1);
1876 EXPECT_EQ(env->getInitRevision(), init_rev + 1);
1877 EXPECT_EQ(env->getCommandHistory().size(), init_rev + 1);
1881 for (
const auto& link_name : env->getLinkNames())
1883 EXPECT_TRUE(env->getLinkCollisionEnabled(link_name));
1888 TEST(TesseractEnvironmentUnit, EnvChangeNameUnit)
1892 EXPECT_EQ(env->getName(),
"kuka_lbr_iiwa_14_r820");
1894 std::string env_changed_name =
"env_unit_change_name";
1895 env->setName(env_changed_name);
1896 EXPECT_EQ(env->getName(), env_changed_name);
1897 EXPECT_EQ(env->getSceneGraph()->getName(), env_changed_name);
1906 for (
const auto& pair : base_state.
joints)
1932 for (
int i = 0; i < 10; ++i)
1944 TEST(TesseractEnvironmentUnit, EnvApplyCommandsStateSolverCompareUnit)
1953 Link link_1(
"link_n1");
1954 Commands commands{ std::make_shared<AddLinkCommand>(link_1) };
1955 EXPECT_TRUE(compare_env->applyCommands(commands));
1957 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
1958 auto compare_state_solver = compare_env->getStateSolver();
1967 Link link_1(
"link_n1");
1968 Joint joint_1(
"joint_link_n1");
1974 Commands commands{ std::make_shared<AddLinkCommand>(link_1, joint_1) };
1975 EXPECT_TRUE(compare_env->applyCommands(commands));
1977 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
1978 auto compare_state_solver = compare_env->getStateSolver();
1987 Link link_1(
"link_1");
1989 Commands commands{ std::make_shared<AddLinkCommand>(link_1,
true) };
1990 EXPECT_TRUE(compare_env->applyCommands(commands));
1991 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
1992 auto compare_state_solver = compare_env->getStateSolver();
2001 Link link_1(
"link_1");
2002 Joint joint_1(
"joint_a1");
2008 Commands commands{ std::make_shared<AddLinkCommand>(link_1, joint_1,
true) };
2009 EXPECT_TRUE(compare_env->applyCommands(commands));
2011 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2012 auto compare_state_solver = compare_env->getStateSolver();
2021 Link link_1(
"link_1");
2022 Joint joint_1(
"joint_a1");
2028 Commands commands{ std::make_shared<AddLinkCommand>(link_1, joint_1,
false) };
2031 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2032 auto compare_state_solver = compare_env->getStateSolver();
2041 Link link_1(
"link_2_does_not_exist");
2042 Joint joint_1(
"joint_a1");
2048 Commands commands{ std::make_shared<AddLinkCommand>(link_1, joint_1,
true) };
2051 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2052 auto compare_state_solver = compare_env->getStateSolver();
2061 Link link_1(
"link_2");
2062 Joint joint_1(
"joint_a1");
2068 Commands commands{ std::make_shared<AddLinkCommand>(link_1, joint_1,
false) };
2071 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2072 auto compare_state_solver = compare_env->getStateSolver();
2081 Link link_1(
"link_1");
2083 Commands commands{ std::make_shared<AddLinkCommand>(link_1,
false) };
2086 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2087 auto compare_state_solver = compare_env->getStateSolver();
2096 Joint new_joint_a1 = compare_env->getJoint(
"joint_a1")->
clone();
2099 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a1) };
2100 EXPECT_TRUE(compare_env->applyCommands(commands));
2102 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2103 auto compare_state_solver = compare_env->getStateSolver();
2112 Joint new_joint_a1 = compare_env->getJoint(
"joint_a1")->
clone();
2116 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a1) };
2117 EXPECT_TRUE(compare_env->applyCommands(commands));
2119 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2120 auto compare_state_solver = compare_env->getStateSolver();
2129 Joint new_joint_a1 = compare_env->getJoint(
"joint_a1")->
clone();
2133 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a1) };
2134 EXPECT_TRUE(compare_env->applyCommands(commands));
2136 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2137 auto compare_state_solver = compare_env->getStateSolver();
2146 Joint new_joint_a3 = compare_env->getJoint(
"joint_a3")->
clone();
2149 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a3) };
2150 EXPECT_TRUE(compare_env->applyCommands(commands));
2152 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2153 auto compare_state_solver = compare_env->getStateSolver();
2162 Joint new_joint_a3 = compare_env->getJoint(
"joint_a3")->
clone();
2166 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a3) };
2167 EXPECT_TRUE(compare_env->applyCommands(commands));
2169 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2170 auto compare_state_solver = compare_env->getStateSolver();
2179 Joint new_joint_a3 = compare_env->getJoint(
"joint_a3")->
clone();
2183 Commands commands{ std::make_shared<ReplaceJointCommand>(new_joint_a3) };
2184 EXPECT_TRUE(compare_env->applyCommands(commands));
2186 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2187 auto compare_state_solver = compare_env->getStateSolver();
2195 Joint new_joint_a3 = compare_env->getJoint(
"joint_a3")->
clone();
2199 Commands commands{ std::make_shared<MoveLinkCommand>(new_joint_a3) };
2200 EXPECT_TRUE(compare_env->applyCommands(commands));
2202 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2203 auto compare_state_solver = compare_env->getStateSolver();
2211 Commands commands{ std::make_shared<MoveJointCommand>(
"joint_a3",
"base_link") };
2212 EXPECT_TRUE(compare_env->applyCommands(commands));
2214 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2215 auto compare_state_solver = compare_env->getStateSolver();
2223 Commands commands{ std::make_shared<RemoveLinkCommand>(
"link_4") };
2224 EXPECT_TRUE(compare_env->applyCommands(commands));
2226 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2227 auto compare_state_solver = compare_env->getStateSolver();
2235 Commands commands{ std::make_shared<RemoveJointCommand>(
"joint_a3") };
2236 EXPECT_TRUE(compare_env->applyCommands(commands));
2238 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2239 auto compare_state_solver = compare_env->getStateSolver();
2247 Eigen::Isometry3d joint_origin = compare_env->getJoint(
"joint_a3")->parent_to_joint_origin_transform;
2248 joint_origin.translation() = joint_origin.translation() + Eigen::Vector3d(0, 0, 1);
2249 Commands commands{ std::make_shared<ChangeJointOriginCommand>(
"joint_a3", joint_origin) };
2250 EXPECT_TRUE(compare_env->applyCommands(commands));
2252 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2253 auto compare_state_solver = compare_env->getStateSolver();
2263 Commands commands{ std::make_shared<AddSceneGraphCommand>(*subgraph) };
2264 EXPECT_TRUE(compare_env->applyCommands(commands));
2266 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2267 auto compare_state_solver = compare_env->getStateSolver();
2276 Commands commands{ std::make_shared<AddSceneGraphCommand>(*subgraph,
"prefix_") };
2277 EXPECT_TRUE(compare_env->applyCommands(commands));
2279 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2280 auto compare_state_solver = compare_env->getStateSolver();
2289 Joint attach_joint(
"prefix_base_link_joint");
2294 Commands commands{ std::make_shared<AddSceneGraphCommand>(*subgraph, attach_joint,
"prefix_") };
2295 EXPECT_TRUE(compare_env->applyCommands(commands));
2297 auto base_state_solver = std::make_unique<KDLStateSolver>(*compare_env->getSceneGraph());
2298 auto compare_state_solver = compare_env->getStateSolver();
2304 TEST(TesseractEnvironmentUnit, EnvMultithreadedApplyCommandsTest)
2309 #pragma omp parallel for num_threads(10) shared(env)
2310 for (
long i = 0; i < 10; ++i)
2313 const int tn = omp_get_thread_num();
2314 CONSOLE_BRIDGE_logDebug(
"Thread (ID: %i): %i of %i", tn, i, 10);
2316 auto visual = std::make_shared<Visual>();
2317 visual->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
2318 auto collision = std::make_shared<Collision>();
2319 collision->geometry = std::make_shared<tesseract_geometry::Box>(1, 1, 1);
2321 const std::string link_name1 =
"link_n" + std::to_string(i);
2322 Link link_1(link_name1);
2323 link_1.
visual.push_back(visual);
2326 for (
int idx = 0; idx < 10; idx++)
2329 EXPECT_TRUE(env->applyCommand(std::make_shared<AddLinkCommand>(link_1)));
2332 EXPECT_TRUE(env->applyCommand(std::make_shared<RemoveLinkCommand>(link_1.
getName())));
2337 TEST(TesseractEnvironmentUnit, EnvClone)
2342 int callback_counter{ 0 };
2345 env->addEventCallback(0, callback);
2353 auto cmd = std::make_shared<ChangeCollisionMarginsCommand>(0.1, pair_margin_data, overrid_type);
2354 env->applyCommand(cmd);
2355 auto timestamp = env->getTimestamp();
2356 auto current_state_timestamp = env->getCurrentStateTimestamp();
2359 auto clone = env->clone();
2364 EXPECT_TRUE(current_state_timestamp == clone->getCurrentStateTimestamp());
2367 EXPECT_EQ(clone->getName(), env->getName());
2368 EXPECT_EQ(clone->getRevision(), env->getRevision());
2369 EXPECT_EQ(clone->getInitRevision(), env->getInitRevision());
2372 std::vector<std::string> link_names = env->getLinkNames();
2373 std::vector<std::string> clone_link_names = clone->getLinkNames();
2374 for (
const auto&
name : link_names)
2375 EXPECT_TRUE(std::find(clone_link_names.begin(), clone_link_names.end(),
name) != clone_link_names.end());
2378 std::vector<std::string> joint_names = env->getJointNames();
2379 std::vector<std::string> clone_joint_names = clone->getJointNames();
2380 for (
const auto&
name : joint_names)
2381 EXPECT_TRUE(std::find(clone_joint_names.begin(), clone_joint_names.end(),
name) != clone_joint_names.end());
2384 auto history = env->getCommandHistory();
2385 auto clone_history = clone->getCommandHistory();
2386 ASSERT_EQ(history.size(), clone_history.size());
2387 for (std::size_t i = 0; i < history.size(); i++)
2389 EXPECT_EQ(history[i]->getType(), clone_history[i]->getType());
2394 std::vector<std::string> active_link_names = env->getActiveLinkNames();
2395 std::vector<std::string> clone_active_link_names = clone->getActiveLinkNames();
2396 EXPECT_EQ(active_link_names.size(), clone_active_link_names.size());
2397 for (
const auto&
name : active_link_names)
2398 EXPECT_TRUE(std::find(clone_active_link_names.begin(), clone_active_link_names.end(),
name) !=
2399 clone_active_link_names.end());
2402 std::vector<std::string> static_link_names = env->getStaticLinkNames();
2403 std::vector<std::string> clone_static_link_names = clone->getStaticLinkNames();
2404 EXPECT_EQ(static_link_names.size(), clone_static_link_names.size());
2405 for (
const auto&
name : static_link_names)
2406 EXPECT_TRUE(std::find(clone_static_link_names.begin(), clone_static_link_names.end(),
name) !=
2407 clone_static_link_names.end());
2411 std::vector<std::string> active_link_names = env->getActiveLinkNames(env->getActiveJointNames());
2414 std::vector<std::string> clone_active_link_names = clone->getActiveLinkNames(env->getActiveJointNames());
2417 EXPECT_EQ(active_link_names.size(), clone_active_link_names.size());
2418 for (
const auto&
name : active_link_names)
2419 EXPECT_TRUE(std::find(clone_active_link_names.begin(), clone_active_link_names.end(),
name) !=
2420 clone_active_link_names.end());
2423 std::vector<std::string> static_link_names = env->getStaticLinkNames(env->getActiveJointNames());
2426 std::vector<std::string> clone_static_link_names = clone->getStaticLinkNames(env->getActiveJointNames());
2429 EXPECT_EQ(static_link_names.size(), clone_static_link_names.size());
2430 for (
const auto&
name : static_link_names)
2431 EXPECT_TRUE(std::find(clone_static_link_names.begin(), clone_static_link_names.end(),
name) !=
2432 clone_static_link_names.end());
2436 std::vector<std::string> active_joint_names = env->getActiveJointNames();
2437 std::vector<std::string> clone_active_joint_names = clone->getActiveJointNames();
2438 for (
const auto&
name : active_joint_names)
2439 EXPECT_TRUE(std::find(clone_active_joint_names.begin(), clone_active_joint_names.end(),
name) !=
2440 clone_active_joint_names.end());
2443 Eigen::VectorXd joint_vals = env->getState().getJointValues(active_joint_names);
2444 Eigen::VectorXd clone_joint_vals = clone->getState().getJointValues(active_joint_names);
2445 EXPECT_TRUE(joint_vals.isApprox(clone_joint_vals));
2448 EXPECT_EQ(env->getCollisionMarginData(), clone->getCollisionMarginData());
2451 TEST(TesseractEnvironmentUnit, EnvSetState)
2456 int callback_counter{ 0 };
2459 env->addEventCallback(0, callback);
2461 env->removeEventCallback(0);
2464 env->addEventCallback(0, callback);
2466 env->clearEventCallbacks();
2469 env->addEventCallback(0, callback);
2476 Eigen::Isometry3d pose;
2477 std::vector<double> std_jvals = { 0, 0, 0, 0, 0, 0, 0 };
2478 std::unordered_map<std::string, double> map_jvals;
2479 Eigen::VectorXd jvals;
2484 Eigen::VectorXd cjv = env->getCurrentJointValues();
2487 std::vector<std::string> joint_names = {
"base_link-base",
"joint_a1",
"joint_a2",
"joint_a3",
"joint_a4",
2488 "joint_a5",
"joint_a6",
"joint_a7",
"joint_a7-tool0" };
2489 std::vector<std::string> link_names = {
"base",
"base_link",
"link_1",
"link_2",
"link_3",
2490 "link_4",
"link_5",
"link_6",
"link_7",
"tool0" };
2491 std::vector<std::string> active_joint_names = {
"joint_a1",
"joint_a2",
"joint_a3",
"joint_a4",
2492 "joint_a5",
"joint_a6",
"joint_a7" };
2494 for (
const auto& jn : active_joint_names)
2497 std::vector<SceneState> states;
2499 env->setState(active_joint_names, jvals);
2500 states.push_back(env->getState());
2504 env->setState(env->getStateSolver()->getRandomState().joints);
2505 cjv = env->getCurrentJointValues(active_joint_names);
2509 states.push_back(env->getState(active_joint_names, jvals));
2510 states.push_back(env->getState(map_jvals));
2512 env->setState(env->getStateSolver()->getRandomState().joints);
2513 cjv = env->getCurrentJointValues(active_joint_names);
2517 env->setState(active_joint_names, jvals);
2518 cjv = env->getCurrentJointValues();
2520 states.push_back(env->getState());
2523 env->setState(env->getStateSolver()->getRandomState().joints);
2524 cjv = env->getCurrentJointValues();
2528 env->setState(active_joint_names, jvals);
2529 cjv = env->getCurrentJointValues(active_joint_names);
2531 states.push_back(env->getState());
2534 env->setState(env->getStateSolver()->getRandomState().joints);
2535 cjv = env->getCurrentJointValues(active_joint_names);
2539 env->setState(map_jvals);
2540 cjv = env->getCurrentJointValues();
2542 states.push_back(env->getState());
2545 for (
auto& current_state : states)
2548 EXPECT_EQ(current_state.joint_transforms.size(), 9);
2549 EXPECT_EQ(current_state.link_transforms.size(), 10);
2550 EXPECT_EQ(current_state.joints.size(), 7);
2553 for (
const auto& joint_name : joint_names)
2555 EXPECT_TRUE(current_state.joint_transforms.find(joint_name) != current_state.joint_transforms.end());
2558 for (
const auto& link_name : link_names)
2560 EXPECT_TRUE(current_state.link_transforms.find(link_name) != current_state.link_transforms.end());
2563 for (
const auto& joint_name : active_joint_names)
2565 EXPECT_TRUE(current_state.joints.find(joint_name) != current_state.joints.end());
2568 EXPECT_TRUE(current_state.link_transforms.at(
"base_link").isApprox(Eigen::Isometry3d::Identity()));
2571 Eigen::Isometry3d result = Eigen::Isometry3d::Identity();
2572 EXPECT_TRUE(current_state.link_transforms.at(
"link_1").isApprox(result));
2576 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(-0.00043624, 0, 0.36);
2577 EXPECT_TRUE(current_state.link_transforms.at(
"link_2").isApprox(result));
2581 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(-0.00043624, 0, 0.36);
2582 EXPECT_TRUE(current_state.link_transforms.at(
"link_3").isApprox(result));
2586 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.36 + 0.42);
2587 EXPECT_TRUE(current_state.link_transforms.at(
"link_4").isApprox(result));
2591 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.36 + 0.42);
2592 EXPECT_TRUE(current_state.link_transforms.at(
"link_5").isApprox(result));
2596 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.36 + 0.42 + 0.4);
2597 EXPECT_TRUE(current_state.link_transforms.at(
"link_6").isApprox(result));
2601 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.36 + 0.42 + 0.4);
2602 EXPECT_TRUE(current_state.link_transforms.at(
"link_7").isApprox(result));
2606 Eigen::Isometry3d result = Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 1.306);
2607 EXPECT_TRUE(current_state.link_transforms.at(
"tool0").isApprox(result));
2612 TEST(TesseractEnvironmentUnit, EnvSetState2)
2620 Eigen::Isometry3d pose;
2621 Eigen::VectorXd jvals;
2624 std::vector<std::string> joint_names = {
"base_link-base",
"joint_a1",
"joint_a2",
"joint_a3",
"joint_a4",
2625 "joint_a5",
"joint_a6",
"joint_a7",
"joint_a7-tool0" };
2626 std::vector<std::string> link_names = {
"base",
"base_link",
"link_1",
"link_2",
"link_3",
2627 "link_4",
"link_5",
"link_6",
"link_7",
"tool0" };
2628 std::vector<std::string> active_joint_names = {
"joint_a1",
"joint_a2",
"joint_a3",
"joint_a4",
2629 "joint_a5",
"joint_a6",
"joint_a7" };
2631 Eigen::Vector3d axis(0, 1, 0);
2633 std::vector<SceneState> states;
2635 env->setState(active_joint_names, jvals);
2636 states.push_back(env->getState());
2637 states.push_back(env->getState(active_joint_names, jvals));
2639 for (
auto& current_state : states)
2642 EXPECT_EQ(current_state.joint_transforms.size(), 9);
2643 EXPECT_EQ(current_state.link_transforms.size(), 10);
2644 EXPECT_EQ(current_state.joints.size(), 7);
2647 for (
const auto& joint_name : joint_names)
2649 EXPECT_TRUE(current_state.joint_transforms.find(joint_name) != current_state.joint_transforms.end());
2652 for (
const auto& link_name : link_names)
2654 EXPECT_TRUE(current_state.link_transforms.find(link_name) != current_state.link_transforms.end());
2658 for (
const auto& joint_name : active_joint_names)
2660 EXPECT_TRUE(current_state.joints.find(joint_name) != current_state.joints.end());
2661 EXPECT_NEAR(current_state.joints[joint_name], jvals(cnt++), 1e-5);
2664 EXPECT_TRUE(current_state.link_transforms[
"base_link"].isApprox(Eigen::Isometry3d::Identity()));
2665 EXPECT_TRUE(current_state.link_transforms[
"base"].isApprox(Eigen::Isometry3d::Identity()));
2668 Eigen::Isometry3d result = Eigen::Isometry3d::Identity();
2669 EXPECT_TRUE(current_state.link_transforms[
"link_1"].isApprox(result));
2673 Eigen::Isometry3d result = Eigen::Translation3d(-0.00043624, 0, 0.36) * Eigen::AngleAxisd(
M_PI_2, axis);
2674 EXPECT_TRUE(current_state.link_transforms[
"link_2"].isApprox(result, 1e-4));
2678 Eigen::Isometry3d result = Eigen::Translation3d(-0.00043624, 0, 0.36) * Eigen::AngleAxisd(
M_PI_2, axis);
2679 EXPECT_TRUE(current_state.link_transforms[
"link_3"].isApprox(result, 1e-4));
2683 Eigen::Isometry3d result =
2684 Eigen::Translation3d(0.42 - 0.00043624, 0, 0.36 - 0.00043624) * Eigen::AngleAxisd(
M_PI_2, axis);
2685 EXPECT_TRUE(current_state.link_transforms[
"link_4"].isApprox(result, 1e-4));
2689 Eigen::Isometry3d result =
2690 Eigen::Translation3d(0.42 - 0.00043624, 0, 0.36 - 0.00043624) * Eigen::AngleAxisd(
M_PI_2, axis);
2691 EXPECT_TRUE(current_state.link_transforms[
"link_5"].isApprox(result, 1e-4));
2695 Eigen::Isometry3d result =
2696 Eigen::Translation3d(0.42 + 0.4 - 0.00043624, 0, 0.36 - 0.00043624) * Eigen::AngleAxisd(
M_PI_2, axis);
2697 EXPECT_TRUE(current_state.link_transforms[
"link_6"].isApprox(result, 1e-4));
2701 Eigen::Isometry3d result =
2702 Eigen::Translation3d(0.42 + 0.4 - 0.00043624, 0, 0.36 - 0.00043624) * Eigen::AngleAxisd(
M_PI_2, axis);
2703 EXPECT_TRUE(current_state.link_transforms[
"link_7"].isApprox(result, 1e-4));
2707 Eigen::Isometry3d result =
2708 Eigen::Translation3d(1.306 - 0.36 - 0.00043624, 0, 0.36 - 0.00043624) * Eigen::AngleAxisd(
M_PI_2, axis);
2709 EXPECT_TRUE(current_state.link_transforms[
"tool0"].isApprox(result, 1e-4));
2714 TEST(TesseractEnvironmentUnit, EnvFindTCPUnit)
2720 Eigen::Isometry3d tcp = Eigen::Isometry3d::Identity();
2721 tcp.translation() = Eigen::Vector3d(0, 0, 0.1);
2723 Eigen::Isometry3d found_tcp = env->findTCPOffset(manip_info);
2728 Eigen::Isometry3d tcp = Eigen::Isometry3d::Identity();
2729 tcp.translation() = Eigen::Vector3d(0, 0, 0.25);
2732 Eigen::Isometry3d found_tcp = env->findTCPOffset(manip_info);
2733 EXPECT_TRUE(found_tcp.isApprox(Eigen::Isometry3d::Identity() * Eigen::Translation3d(0, 0, 0.1), 1e-6));
2739 EXPECT_ANY_THROW(env->findTCPOffset(manip_info));
2745 EXPECT_ANY_THROW(env->findTCPOffset(manip_info));
2749 TEST(TesseractEnvironmentUnit, getActiveLinkNamesRecursiveUnit)
2754 std::vector<std::string> active_links;
2756 std::vector<std::string> target_active_links = env->getActiveLinkNames();
2762 for (
const auto& c : contacts)
2764 for (
const auto& pair : c)
2766 for (
const auto&
r : pair.second)
2768 for (std::size_t j = 0; j < 2; ++j)
2770 if (!(
r.cc_time[j] < 0))
2798 for (
const auto& pair : contacts)
2800 for (
const auto&
r : pair.second)
2814 for (
const auto& pair : contacts)
2816 for (
const auto&
r : pair.second)
2830 for (
const auto& pair : contacts)
2832 for (
const auto&
r : pair.second)
2850 for (
const auto& pair : contacts)
2852 for (
const auto&
r : pair.second)
2868 for (
const auto& c : contacts)
2874 TEST(TesseractEnvironmentUnit, checkTrajectoryUnit)
2880 Link link_sphere(
"sphere_attached");
2883 visual->origin = Eigen::Isometry3d::Identity();
2884 visual->origin.translation() = Eigen::Vector3d(0.5, 0, 0.55);
2885 visual->geometry = std::make_shared<tesseract_geometry::Sphere>(0.15);
2886 link_sphere.
visual.push_back(visual);
2889 collision->origin = visual->origin;
2890 collision->geometry = visual->geometry;
2891 link_sphere.
collision.push_back(collision);
2893 Joint joint_sphere(
"joint_sphere_attached");
2898 auto cmd = std::make_shared<tesseract_environment::AddLinkCommand>(link_sphere, joint_sphere);
2903 std::vector<std::string> joint_names;
2904 joint_names.emplace_back(
"joint_a1");
2905 joint_names.emplace_back(
"joint_a2");
2906 joint_names.emplace_back(
"joint_a3");
2907 joint_names.emplace_back(
"joint_a4");
2908 joint_names.emplace_back(
"joint_a5");
2909 joint_names.emplace_back(
"joint_a6");
2910 joint_names.emplace_back(
"joint_a7");
2912 Eigen::VectorXd joint_start_pos(7);
2913 joint_start_pos(0) = -0.4;
2914 joint_start_pos(1) = 0.2762;
2915 joint_start_pos(2) = 0.0;
2916 joint_start_pos(3) = -1.3348;
2917 joint_start_pos(4) = 0.0;
2918 joint_start_pos(5) = 1.4959;
2919 joint_start_pos(6) = 0.0;
2921 Eigen::VectorXd joint_end_pos(7);
2922 joint_end_pos(0) = 0.4;
2923 joint_end_pos(1) = 0.2762;
2924 joint_end_pos(2) = 0.0;
2925 joint_end_pos(3) = -1.3348;
2926 joint_end_pos(4) = 0.0;
2927 joint_end_pos(5) = 1.4959;
2928 joint_end_pos(6) = 0.0;
2930 Eigen::VectorXd joint_pos_collision(7);
2931 joint_pos_collision(0) = 0.0;
2932 joint_pos_collision(1) = 0.2762;
2933 joint_pos_collision(2) = 0.0;
2934 joint_pos_collision(3) = -1.3348;
2935 joint_pos_collision(4) = 0.0;
2936 joint_pos_collision(5) = 1.4959;
2937 joint_pos_collision(6) = 0.0;
2941 for (
int i = 0; i < joint_start_pos.size(); ++i)
2942 traj.col(i) = Eigen::VectorXd::LinSpaced(5, joint_start_pos(i), joint_end_pos(i));
2946 for (
int i = 0; i < joint_start_pos.size(); ++i)
2947 traj2.col(i) = Eigen::VectorXd::LinSpaced(3, joint_start_pos(i), joint_pos_collision(i));
2951 for (
int i = 0; i < joint_start_pos.size(); ++i)
2952 traj3.col(i) = Eigen::VectorXd::LinSpaced(3, joint_pos_collision(i), joint_end_pos(i));
2956 traj4.row(0) = joint_pos_collision;
2957 traj4.row(1) = joint_end_pos;
2960 traj5.row(0) = joint_start_pos;
2961 traj5.row(1) = joint_pos_collision;
2963 auto discrete_manager = env->getDiscreteContactManager();
2964 auto continuous_manager = env->getContinuousContactManager();
2965 auto state_solver = env->getStateSolver();
2966 auto joint_group = env->getJointGroup(
"manipulator");
2972 config.
type = CollisionEvaluatorType::DISCRETE;
2974 std::vector<tesseract_collision::ContactResultMap> contacts;
2976 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows()));
2987 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows()));
2998 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows()));
3010 config.
type = CollisionEvaluatorType::DISCRETE;
3012 std::vector<tesseract_collision::ContactResultMap> contacts;
3014 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3027 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3036 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3047 config.
type = CollisionEvaluatorType::DISCRETE;
3049 std::vector<tesseract_collision::ContactResultMap> contacts;
3051 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows()));
3065 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows()));
3076 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows()));
3087 config.
type = CollisionEvaluatorType::DISCRETE;
3089 std::vector<tesseract_collision::ContactResultMap> contacts;
3091 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3104 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3113 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3123 config.
type = CollisionEvaluatorType::DISCRETE;
3125 std::vector<tesseract_collision::ContactResultMap> contacts;
3148 config.
type = CollisionEvaluatorType::DISCRETE;
3150 std::vector<tesseract_collision::ContactResultMap> contacts;
3173 config.
type = CollisionEvaluatorType::DISCRETE;
3175 std::vector<tesseract_collision::ContactResultMap> contacts;
3194 config.
type = CollisionEvaluatorType::DISCRETE;
3195 std::vector<tesseract_collision::ContactResultMap> contacts;
3197 checkTrajectory(contacts, *discrete_manager, *state_solver, joint_names, joint_start_pos.transpose(), config));
3206 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3209 std::vector<tesseract_collision::ContactResultMap> contacts;
3211 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3225 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3235 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3247 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj4.rows() - 1));
3256 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj5.rows() - 1));
3266 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3269 std::vector<tesseract_collision::ContactResultMap> contacts;
3271 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3285 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3295 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3307 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj4.rows() - 1));
3316 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj5.rows() - 1));
3323 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3326 std::vector<tesseract_collision::ContactResultMap> contacts;
3328 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3342 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3352 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3362 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj4.rows() - 1));
3368 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj5.rows() - 1));
3378 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3381 std::vector<tesseract_collision::ContactResultMap> contacts;
3383 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3397 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3407 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3417 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj4.rows() - 1));
3423 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj5.rows() - 1));
3430 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3433 std::vector<tesseract_collision::ContactResultMap> contacts;
3435 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3441 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3450 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3457 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3460 std::vector<tesseract_collision::ContactResultMap> contacts;
3462 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3468 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3474 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3484 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3487 std::vector<tesseract_collision::ContactResultMap> contacts;
3506 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3508 std::vector<tesseract_collision::ContactResultMap> contacts;
3510 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3525 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3536 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3548 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3550 std::vector<tesseract_collision::ContactResultMap> contacts;
3552 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3567 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3578 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3590 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3592 std::vector<tesseract_collision::ContactResultMap> contacts;
3594 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3609 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3620 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3632 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3634 std::vector<tesseract_collision::ContactResultMap> contacts;
3636 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3651 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3662 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3674 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3676 std::vector<tesseract_collision::ContactResultMap> contacts;
3678 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3684 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3693 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3700 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3702 std::vector<tesseract_collision::ContactResultMap> contacts;
3704 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3710 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3716 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(1));
3725 config.
type = CollisionEvaluatorType::DISCRETE;
3726 std::vector<tesseract_collision::ContactResultMap> contacts;
3728 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows()));
3739 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows()));
3751 config.
type = CollisionEvaluatorType::DISCRETE;
3753 std::vector<tesseract_collision::ContactResultMap> contacts;
3772 config.
type = CollisionEvaluatorType::DISCRETE;
3773 std::vector<tesseract_collision::ContactResultMap> contacts;
3783 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3785 std::vector<tesseract_collision::ContactResultMap> contacts;
3787 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3797 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3808 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3811 std::vector<tesseract_collision::ContactResultMap> contacts;
3830 config.
type = CollisionEvaluatorType::LVS_DISCRETE;
3831 std::vector<tesseract_collision::ContactResultMap> contacts;
3833 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3845 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3857 config.
type = CollisionEvaluatorType::CONTINUOUS;
3859 std::vector<tesseract_collision::ContactResultMap> contacts;
3861 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3874 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3884 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3895 config.
type = CollisionEvaluatorType::CONTINUOUS;
3897 std::vector<tesseract_collision::ContactResultMap> contacts;
3899 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 2));
3911 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 2));
3920 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 2));
3930 config.
type = CollisionEvaluatorType::CONTINUOUS;
3932 std::vector<tesseract_collision::ContactResultMap> contacts;
3934 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
3946 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
3956 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
3966 config.
type = CollisionEvaluatorType::CONTINUOUS;
3968 std::vector<tesseract_collision::ContactResultMap> contacts;
3970 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 2));
3981 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 2));
3987 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 2));
3994 config.
type = CollisionEvaluatorType::CONTINUOUS;
3996 std::vector<tesseract_collision::ContactResultMap> contacts;
4017 config.
type = CollisionEvaluatorType::CONTINUOUS;
4019 std::vector<tesseract_collision::ContactResultMap> contacts;
4040 config.
type = CollisionEvaluatorType::CONTINUOUS;
4042 std::vector<tesseract_collision::ContactResultMap> contacts;
4061 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4064 std::vector<tesseract_collision::ContactResultMap> contacts;
4066 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4079 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4089 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4100 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4103 std::vector<tesseract_collision::ContactResultMap> contacts;
4105 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 2));
4117 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 2));
4126 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 2));
4136 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4139 std::vector<tesseract_collision::ContactResultMap> contacts;
4141 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4153 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4163 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4173 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4176 std::vector<tesseract_collision::ContactResultMap> contacts;
4178 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 2));
4189 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 2));
4195 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 2));
4202 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4205 std::vector<tesseract_collision::ContactResultMap> contacts;
4226 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4229 std::vector<tesseract_collision::ContactResultMap> contacts;
4250 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4253 std::vector<tesseract_collision::ContactResultMap> contacts;
4272 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4274 std::vector<tesseract_collision::ContactResultMap> contacts;
4276 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4289 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4298 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4309 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4311 std::vector<tesseract_collision::ContactResultMap> contacts;
4313 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4326 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4335 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4345 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4347 std::vector<tesseract_collision::ContactResultMap> contacts;
4349 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4362 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4372 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4383 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4385 std::vector<tesseract_collision::ContactResultMap> contacts;
4387 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4399 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4409 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj3.rows() - 1));
4420 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4422 std::vector<tesseract_collision::ContactResultMap> contacts;
4443 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4445 std::vector<tesseract_collision::ContactResultMap> contacts;
4466 config.
type = CollisionEvaluatorType::CONTINUOUS;
4467 std::vector<tesseract_collision::ContactResultMap> contacts;
4469 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4482 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4492 config.
type = CollisionEvaluatorType::CONTINUOUS;
4494 std::vector<tesseract_collision::ContactResultMap> contacts;
4513 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4515 std::vector<tesseract_collision::ContactResultMap> contacts;
4517 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4530 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4540 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4543 std::vector<tesseract_collision::ContactResultMap> contacts;
4562 config.
type = CollisionEvaluatorType::LVS_CONTINUOUS;
4563 std::vector<tesseract_collision::ContactResultMap> contacts;
4565 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj.rows() - 1));
4578 EXPECT_EQ(contacts.size(),
static_cast<std::size_t
>(traj2.rows() - 1));
4589 config.
type = CollisionEvaluatorType::CONTINUOUS;
4590 std::vector<tesseract_collision::ContactResultMap> contacts;
4592 EXPECT_ANY_THROW(
checkTrajectory(contacts, *discrete_manager, *state_solver, joint_names, traj, config));
4596 config.
type = CollisionEvaluatorType::CONTINUOUS;
4597 std::vector<tesseract_collision::ContactResultMap> contacts;
4599 EXPECT_ANY_THROW(
checkTrajectory(contacts, *discrete_manager, *joint_group, traj, config));
4603 config.
type = CollisionEvaluatorType::DISCRETE;
4604 std::vector<tesseract_collision::ContactResultMap> contacts;
4611 config.
type = CollisionEvaluatorType::DISCRETE;
4612 std::vector<tesseract_collision::ContactResultMap> contacts;
4618 config.
type = CollisionEvaluatorType::DISCRETE;
4619 std::vector<tesseract_collision::ContactResultMap> contacts;
4621 EXPECT_ANY_THROW(
checkTrajectory(contacts, *continuous_manager, *state_solver, joint_names, traj, config));
4625 config.
type = CollisionEvaluatorType::DISCRETE;
4626 std::vector<tesseract_collision::ContactResultMap> contacts;
4628 EXPECT_ANY_THROW(
checkTrajectory(contacts, *continuous_manager, *joint_group, traj, config));
4632 config.
type = CollisionEvaluatorType::CONTINUOUS;
4633 std::vector<tesseract_collision::ContactResultMap> contacts;
4640 config.
type = CollisionEvaluatorType::CONTINUOUS;
4641 std::vector<tesseract_collision::ContactResultMap> contacts;
4650 testing::InitGoogleTest(&argc, argv);
4653 console_bridge::setLogLevel(console_bridge::LogLevel::CONSOLE_BRIDGE_LOG_DEBUG);
4655 return RUN_ALL_TESTS();