3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
13 TEST(TesseractURDFUnit, parse_link)
16 const bool global_make_convex =
false;
17 const auto parse_link_fn =
18 [&](
const tinyxml2::XMLElement* xml_element,
20 std::unordered_map<std::string, std::shared_ptr<tesseract_scene_graph::Material>>& available_materials) {
25 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
26 std::string str = R
"(<link name="my_link" extra="0 0 0">
28 <origin xyz="0 0 0.5" rpy="0 0 0"/>
30 <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
33 <origin xyz="0 0 0" rpy="0 0 0" />
37 <material name="Cyan">
38 <color rgba="0 1.0 1.0 1.0" />
42 <origin xyz="0 0 0" rpy="0 0 0" />
44 <cylinder radius="1" length="0.5" />
49 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
54 empty_available_materials));
63 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
64 std::string str = R
"(<link name="my_link" extra="0 0 0">
66 <origin xyz="0 0 0.5" rpy="0 0 0"/>
68 <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" />
71 <origin xyz="0 0 0" rpy="0 0 0" />
75 <material name="Cyan">
76 <color rgba="0 1.0 1.0 1.0" />
80 <origin xyz="0 0 0" rpy="0 0 0" />
84 <material name="Cyan">
85 <color rgba="0 1.0 1.0 1.0" />
89 <origin xyz="0 0 0" rpy="0 0 0" />
91 <cylinder radius="1" length="0.5" />
95 <origin xyz="0 0 0" rpy="0 0 0" />
97 <cylinder radius="1" length="0.5" />
102 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
107 empty_available_materials));
112 EXPECT_TRUE(empty_available_materials.size() == 1);
116 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
117 std::string str = R
"(<link name="my_link">
119 <origin xyz="0 0 0" rpy="0 0 0" />
123 <material name="Cyan">
124 <color rgba="0 1.0 1.0 1.0" />
128 <origin xyz="0 0 0" rpy="0 0 0" />
130 <cylinder radius="1" length="0.5" />
135 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
140 empty_available_materials));
145 EXPECT_TRUE(empty_available_materials.size() == 1);
149 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
150 std::string str = R
"(<link name="my_link">
152 <origin xyz="0 0 0" rpy="0 0 0" />
156 <material name="Cyan">
157 <color rgba="0 1.0 1.0 1.0" />
161 <origin xyz="0 0 0" rpy="0 0 0" />
165 <material name="Cyan" />>
168 <origin xyz="0 0 0" rpy="0 0 0" />
170 <cylinder radius="1" length="0.5" />
174 <origin xyz="0 0 0" rpy="0 0 0" />
176 <cylinder radius="1" length="0.5" />
181 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
186 empty_available_materials));
191 EXPECT_TRUE(empty_available_materials.size() == 1);
195 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
196 std::string str = R
"(<link name="my_link">
198 <origin xyz="0 0 0" rpy="0 0 0" />
202 <material name="Cyan">
203 <color rgba="0 1.0 1.0 1.0" />
208 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
213 empty_available_materials));
218 EXPECT_TRUE(empty_available_materials.size() == 1);
222 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
223 std::string str = R
"(<link name="my_link">
225 <origin xyz="0 0 0" rpy="0 0 0" />
229 <material name="Cyan">
230 <color rgba="0 1.0 1.0 1.0" />
234 <origin xyz="0 0 0" rpy="0 0 0" />
238 <material name="Cyan" />
242 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
247 empty_available_materials));
252 EXPECT_TRUE(empty_available_materials.size() == 1);
256 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
257 std::string str = R
"(<link name="my_link">
259 <origin xyz="0 0 0" rpy="0 0 0" />
261 <cylinder radius="1" length="0.5" />
266 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
271 empty_available_materials));
280 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
281 std::string str = R
"(<link name="my_link">
283 <origin xyz="0 0 0" rpy="0 0 0" />
285 <cylinder radius="1" length="0.5" />
289 <origin xyz="0 0 0" rpy="0 0 0" />
291 <cylinder radius="1" length="0.5" />
296 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
301 empty_available_materials));
310 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
311 std::string str = R
"(<link name="my_link"/>)";
313 EXPECT_TRUE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
318 empty_available_materials));
326 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
327 std::string str = R
"(<link>
329 <origin xyz="0 0 0" rpy="0 0 0" />
333 <material name="Cyan">
334 <color rgba="0 1.0 1.0 1.0" />
339 EXPECT_FALSE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
344 empty_available_materials));
348 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
349 std::string str = R"(<link name="my_link">
351 <origin xyz="0 0 0" rpy="0 0 a" />
355 <material name="Cyan">
356 <color rgba="0 1.0 1.0 1.0" />
361 EXPECT_FALSE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
366 empty_available_materials));
370 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
371 std::string str = R"(<link name="my_link">
374 <inertia ixx="1.0" ixy="2.0" ixz="3.0" iyy="4.0" iyz="5.0" izz="6.0"/>
377 <origin xyz="0 0 0" rpy="0 0 0" />
379 <cylinder radius="1" length="0.5" />
384 EXPECT_FALSE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
389 empty_available_materials));
393 std::unordered_map<std::string, tesseract_scene_graph::Material::Ptr> empty_available_materials;
394 std::string str = R"(<link name="my_link">
396 <origin xyz="a 0 0" rpy="0 0 0" />
398 <cylinder radius="1" length="0.5" />
403 EXPECT_FALSE(runTest<tesseract_scene_graph::Link::Ptr>(elem,
408 empty_available_materials));
412 TEST(TesseractURDFUnit, write_link)
417 link->inertial = std::make_shared<tesseract_scene_graph::Inertial>();
420 collision->name =
"test";
421 collision->origin = Eigen::Isometry3d::Identity();
422 collision->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
423 link->collision.push_back(collision);
424 link->collision.push_back(collision);
427 visual->name =
"test";
428 visual->origin = Eigen::Isometry3d::Identity();
429 visual->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
430 link->visual.push_back(visual);
431 link->visual.push_back(visual);
435 writeTest<tesseract_scene_graph::Link::Ptr>(
443 link->inertial = std::make_shared<tesseract_scene_graph::Inertial>();
445 link->collision.push_back(
nullptr);
448 visual->name =
"test";
449 visual->origin = Eigen::Isometry3d::Identity();
450 visual->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
451 link->visual.push_back(visual);
455 writeTest<tesseract_scene_graph::Link::Ptr>(
463 link->inertial = std::make_shared<tesseract_scene_graph::Inertial>();
466 collision->name =
"test";
467 collision->origin = Eigen::Isometry3d::Identity();
468 collision->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
469 link->collision.push_back(collision);
471 link->visual.push_back(
nullptr);
475 writeTest<tesseract_scene_graph::Link::Ptr>(
484 writeTest<tesseract_scene_graph::Link::Ptr>(