1 #ifndef TESSERACT_COLLISION_COLLISION_BOX_CONE_UNIT_HPP
2 #define TESSERACT_COLLISION_COLLISION_BOX_CONE_UNIT_HPP
17 Eigen::Isometry3d box_pose;
18 box_pose.setIdentity();
22 obj1_shapes.push_back(box);
23 obj1_poses.push_back(box_pose);
25 checker.addCollisionObject(
"box_link", 0, obj1_shapes, obj1_poses,
false);
26 checker.enableCollisionObject(
"box_link");
31 CollisionShapePtr thin_box = std::make_shared<tesseract_geometry::Box>(0.1, 1, 1);
32 Eigen::Isometry3d thin_box_pose;
33 thin_box_pose.setIdentity();
37 obj2_shapes.push_back(thin_box);
38 obj2_poses.push_back(thin_box_pose);
40 checker.addCollisionObject(
"thin_box_link", 0, obj2_shapes, obj2_poses);
41 checker.disableCollisionObject(
"thin_box_link");
48 Eigen::Isometry3d cone_pose;
49 cone_pose.setIdentity();
53 obj3_shapes.push_back(cone);
54 obj3_poses.push_back(cone_pose);
56 checker.addCollisionObject(
"cone_link", 0, obj3_shapes, obj3_poses);
61 CollisionShapePtr remove_box = std::make_shared<tesseract_geometry::Box>(0.1, 1, 1);
62 Eigen::Isometry3d remove_box_pose;
63 remove_box_pose.setIdentity();
67 obj4_shapes.push_back(remove_box);
68 obj4_poses.push_back(remove_box_pose);
70 checker.addCollisionObject(
"remove_box_link", 0, obj4_shapes, obj4_poses);
71 EXPECT_TRUE(checker.getCollisionObjects().size() == 4);
72 EXPECT_TRUE(checker.hasCollisionObject(
"remove_box_link"));
73 checker.removeCollisionObject(
"remove_box_link");
74 EXPECT_FALSE(checker.hasCollisionObject(
"remove_box_link"));
79 EXPECT_FALSE(checker.removeCollisionObject(
"link_does_not_exist"));
80 EXPECT_FALSE(checker.enableCollisionObject(
"link_does_not_exist"));
81 EXPECT_FALSE(checker.disableCollisionObject(
"link_does_not_exist"));
92 EXPECT_TRUE(checker.getCollisionObjects().size() == 3);
93 for (
const auto& co : checker.getCollisionObjects())
95 EXPECT_TRUE(checker.getCollisionObjectGeometries(co).size() == 1);
96 EXPECT_TRUE(checker.getCollisionObjectGeometriesTransforms(co).size() == 1);
97 for (
const auto& cgt : checker.getCollisionObjectGeometriesTransforms(co))
99 EXPECT_TRUE(cgt.isApprox(Eigen::Isometry3d::Identity(), 1e-5));
105 inline void runTest(DiscreteContactManager& checker)
116 std::vector<std::string> active_links{
"box_link",
"cone_link" };
117 checker.setActiveCollisionObjects(active_links);
118 std::vector<std::string> check_active_links = checker.getActiveCollisionObjects();
119 EXPECT_TRUE(tesseract_common::isIdentical<std::string>(active_links, check_active_links,
false));
121 EXPECT_TRUE(checker.getContactAllowedValidator() ==
nullptr);
124 EXPECT_NEAR(checker.getCollisionMarginData().getMaxCollisionMargin(), 0.5, 1e-5);
126 checker.setCollisionMarginPair(
"box_link",
"cone_link", 0.1);
130 location[
"box_link"] = Eigen::Isometry3d::Identity();
131 location[
"cone_link"] = Eigen::Isometry3d::Identity();
132 location[
"cone_link"].translation()(0) = 0.2;
133 checker.setCollisionObjectsTransform(location);
136 ContactResultMap result;
140 result.flattenMoveResults(result_vector);
143 EXPECT_NEAR(result_vector[0].distance, -0.55, 0.0001);
145 std::vector<int> idx = { 0, 1, 1 };
146 if (result_vector[0].link_names[0] !=
"box_link")
149 if (result_vector[0].single_contact_point)
151 EXPECT_NEAR(result_vector[0].nearest_points[0][0], result_vector[0].nearest_points[1][0], 0.001);
152 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][0] - (0.5)) > 0.001 &&
153 std::abs(result_vector[0].nearest_points[0][0] - (-0.05)) > 0.001);
154 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][1] - (0.0)) > 0.001 &&
155 std::abs(result_vector[0].nearest_points[0][1] - (0.0)) > 0.001);
156 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][2] - (-0.125)) > 0.001 &&
157 std::abs(result_vector[0].nearest_points[0][2] - (-0.125)) > 0.001);
161 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][0], 0.5, 0.001);
162 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][1], 0.0, 0.001);
163 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][2], -0.125, 0.001);
164 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][0], -0.05, 0.001);
165 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][1], 0.0, 0.001);
166 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][2], -0.125, 0.001);
169 EXPECT_NEAR(result_vector[0].normal[0], idx[2] * 1.0, 0.001);
170 EXPECT_NEAR(result_vector[0].normal[1], idx[2] * 0.0, 0.001);
171 EXPECT_NEAR(result_vector[0].normal[2], idx[2] * 0.0, 0.001);
176 location[
"cone_link"].translation() = Eigen::Vector3d(1, 0, 0);
178 result_vector.clear();
181 checker.setCollisionObjectsTransform(
"cone_link", location[
"cone_link"]);
183 result.flattenCopyResults(result_vector);
191 result_vector.clear();
194 EXPECT_NEAR(checker.getCollisionMarginData().getMaxCollisionMargin(), 0.251, 1e-5);
196 result.flattenMoveResults(result_vector);
199 EXPECT_NEAR(result_vector[0].distance, 0.25, 0.001);
202 if (result_vector[0].link_names[0] !=
"box_link")
205 if (result_vector[0].single_contact_point)
207 EXPECT_NEAR(result_vector[0].nearest_points[0][0], result_vector[0].nearest_points[1][0], 0.001);
208 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][0] - (0.5)) > 0.001 &&
209 std::abs(result_vector[0].nearest_points[0][0] - (0.75)) > 0.001);
210 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][1] - (0.0)) > 0.001 &&
211 std::abs(result_vector[0].nearest_points[0][1] - (0.0)) > 0.001);
212 EXPECT_FALSE(std::abs(result_vector[0].nearest_points[0][2] - (-0.125)) > 0.001 &&
213 std::abs(result_vector[0].nearest_points[0][2] - (-0.125)) > 0.001);
217 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][0], 0.5, 0.001);
218 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][1], 0.0, 0.001);
219 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[0])][2], -0.125, 0.001);
220 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][0], 0.75, 0.001);
221 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][1], 0.0, 0.001);
222 EXPECT_NEAR(result_vector[0].nearest_points[
static_cast<size_t>(idx[1])][2], -0.125, 0.001);
225 EXPECT_NEAR(result_vector[0].normal[0], idx[2] * 1.0, 0.001);
226 EXPECT_NEAR(result_vector[0].normal[1], idx[2] * 0.0, 0.001);
227 EXPECT_NEAR(result_vector[0].normal[2], idx[2] * 0.0, 0.001);
230 #endif // TESSERACT_COLLISION_COLLISION_BOX_CONE_UNIT_HPP