tesseract_urdf_collision_unit.cpp
Go to the documentation of this file.
3 #include <gtest/gtest.h>
4 #include <Eigen/Geometry>
6 
12 
13 TEST(TesseractURDFUnit, parse_collision) // NOLINT
14 {
16  const bool global_make_convex = false;
17  const auto parse_collision_fn = [&](const tinyxml2::XMLElement* xml_element,
18  const tesseract_common::ResourceLocator& locator) {
19  return tesseract_urdf::parseCollision(xml_element, locator, global_make_convex);
20  };
21 
22  {
23  std::string str = R"(<collision extra="0 0 0">
24  <origin xyz="1 2 3" rpy="0 0 0" />
25  <geometry>
26  <box size="1 2 3" />
27  </geometry>
28  </collision>)";
30  EXPECT_TRUE(runTest<tesseract_scene_graph::Collision::Ptr>(
31  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
32  EXPECT_TRUE(elem->geometry != nullptr);
33  EXPECT_FALSE(elem->origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
34  }
35 
36  {
37  std::string str = R"(<collision>
38  <geometry>
39  <box size="1 2 3" />
40  </geometry>"
41  </collision>)";
43  EXPECT_TRUE(runTest<tesseract_scene_graph::Collision::Ptr>(
44  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
45  EXPECT_TRUE(elem->geometry != nullptr);
46  EXPECT_TRUE(elem->origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
47  }
48 
49  {
50  std::string str = R"(<collision>
51  <geometry>
52  <mesh filename="package://tesseract_support/meshes/box_box.dae"/>
53  </geometry>"
54  </collision>)";
56  EXPECT_TRUE(runTest<tesseract_scene_graph::Collision::Ptr>(
57  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
58  EXPECT_TRUE(elem->geometry != nullptr);
59  EXPECT_TRUE(elem->origin.isApprox(Eigen::Isometry3d::Identity(), 1e-8));
61  EXPECT_EQ(std::dynamic_pointer_cast<const tesseract_geometry::CompoundMesh>(elem->geometry)->getMeshes().size(), 2);
62  }
63 
64  {
65  std::string str = R"(<collision extra="0 0 0">
66  <origin xyz="1 2 3 5" rpy="0 0 0" />
67  <geometry>
68  <box size="1 2 3" />
69  </geometry>
70  </collision>)";
72  EXPECT_FALSE(runTest<tesseract_scene_graph::Collision::Ptr>(
73  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
74  EXPECT_TRUE(elem == nullptr);
75  }
76 
77  {
78  std::string str = R"(<collision>
79  <geometry>
80  <box size="1 2 3 4" />
81  </geometry>"
82  </collision>)";
84  EXPECT_FALSE(runTest<tesseract_scene_graph::Collision::Ptr>(
85  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
86  EXPECT_TRUE(elem == nullptr);
87  }
88 
89  {
90  std::string str = R"(<collision>
91  </collision>)";
93  EXPECT_FALSE(runTest<tesseract_scene_graph::Collision::Ptr>(
94  elem, parse_collision_fn, str, tesseract_urdf::COLLISION_ELEMENT_NAME.data(), resource_locator));
95  EXPECT_TRUE(elem == nullptr);
96  }
97 }
98 
99 TEST(TesseractURDFUnit, write_collision) // NOLINT
100 {
101  { // trigger check for an assigned name and check for specified ID
102  tesseract_scene_graph::Collision::Ptr collision = std::make_shared<tesseract_scene_graph::Collision>();
103  collision->name = "test";
104  collision->origin = Eigen::Isometry3d::Identity();
105  collision->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
106  std::string text;
107  EXPECT_EQ(
108  0,
109  writeTest<tesseract_scene_graph::Collision::Ptr>(
110  collision, &tesseract_urdf::writeCollision, text, tesseract_common::getTempPath(), std::string("test"), 0));
111  EXPECT_NE(text, "");
112  }
113 
114  { // trigger check for an unassigned name and check for specified ID
115  tesseract_scene_graph::Collision::Ptr collision = std::make_shared<tesseract_scene_graph::Collision>();
116  collision->origin = Eigen::Isometry3d::Identity();
117  collision->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
118  std::string text;
119  EXPECT_EQ(
120  0,
121  writeTest<tesseract_scene_graph::Collision::Ptr>(
122  collision, &tesseract_urdf::writeCollision, text, tesseract_common::getTempPath(), std::string("test"), 0));
123  EXPECT_NE(text, "");
124  }
125 
126  { // trigger check for an orgin not identity and check for specified ID
127  tesseract_scene_graph::Collision::Ptr collision = std::make_shared<tesseract_scene_graph::Collision>();
128  collision->origin = Eigen::Isometry3d::Identity();
129  collision->origin.translation() = Eigen::Vector3d(1.0, 2.0, 3.0);
130  collision->geometry = std::make_shared<tesseract_geometry::Box>(1.0, 1.0, 1.0);
131  std::string text;
132  EXPECT_EQ(
133  0,
134  writeTest<tesseract_scene_graph::Collision::Ptr>(
135  collision, &tesseract_urdf::writeCollision, text, tesseract_common::getTempPath(), std::string("test"), 0));
136  EXPECT_NE(text, "");
137  }
138 
139  { // trigger check for nullptr input
140  tesseract_scene_graph::Collision::Ptr collision = nullptr;
141  std::string text;
142  EXPECT_EQ(1,
143  writeTest<tesseract_scene_graph::Collision::Ptr>(collision,
145  text,
147  std::string("test"),
148  -1));
149  EXPECT_EQ(text, "");
150  }
151 
152  { // trigger check for bad geometry
153  tesseract_scene_graph::Collision::Ptr collision = std::make_shared<tesseract_scene_graph::Collision>();
154  collision->name = "test";
155  collision->origin = Eigen::Isometry3d::Identity();
156  collision->geometry = nullptr;
157  std::string text;
158  EXPECT_EQ(1,
159  writeTest<tesseract_scene_graph::Collision::Ptr>(collision,
161  text,
163  std::string("test"),
164  -1));
165  EXPECT_EQ(text, "");
166  }
167 }
tesseract_geometry::GeometryType::COMPOUND_MESH
@ COMPOUND_MESH
tesseract_common::getTempPath
std::string getTempPath()
tesseract_urdf::writeCollision
tinyxml2::XMLElement * writeCollision(const std::shared_ptr< const tesseract_scene_graph::Collision > &collision, tinyxml2::XMLDocument &doc, const std::string &package_path, const std::string &link_name, int id)
writeCollision Write collision object to URDF XML
Definition: collision.cpp:90
compound_mesh.h
resource_locator.h
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
EXPECT_TRUE
#define EXPECT_TRUE(args)
tesseract_urdf::parseCollision
std::shared_ptr< tesseract_scene_graph::Collision > parseCollision(const tinyxml2::XMLElement *xml_element, const tesseract_common::ResourceLocator &locator, bool make_convex_meshes)
Parse xml element collision.
Definition: collision.cpp:45
tesseract_urdf_common_unit.h
tesseract_scene_graph::Collision::Ptr
std::shared_ptr< Collision > Ptr
tesseract_common::ResourceLocator
TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_urdf::COLLISION_ELEMENT_NAME
static constexpr std::string_view COLLISION_ELEMENT_NAME
Definition: collision.h:46
tesseract_common::GeneralResourceLocator
macros.h
box.h
EXPECT_EQ
#define EXPECT_EQ(a, b)
EXPECT_FALSE
#define EXPECT_FALSE(args)
collision.h
Parse collision from xml string.
TEST
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH TESSERACT_COMMON_IGNORE_WARNINGS_POP TEST(TesseractURDFUnit, parse_collision)
Definition: tesseract_urdf_collision_unit.cpp:13


tesseract_urdf
Author(s): Levi Armstrong
autogenerated on Thu Apr 24 2025 03:10:44