srdf_model.cpp
Go to the documentation of this file.
1 
29 #include <boost/serialization/access.hpp>
30 #include <boost/serialization/array.hpp>
31 #include <boost/serialization/shared_ptr.hpp>
32 #include <boost/serialization/nvp.hpp>
33 #include <unordered_map>
34 #include <vector>
35 #include <utility>
36 #include <console_bridge/console.h>
37 #include <fstream>
38 #include <tinyxml2.h>
39 #include <boost/algorithm/string/classification.hpp>
40 #include <boost/algorithm/string/split.hpp>
41 #include <yaml-cpp/yaml.h>
43 
44 #include <tesseract_srdf/groups.h>
49 #include <tesseract_srdf/configs.h>
51 #include <tesseract_srdf/utils.h>
52 #include <tesseract_common/utils.h>
59 
60 namespace tesseract_srdf
61 {
63  const std::string& filename,
64  const tesseract_common::ResourceLocator& locator)
65 {
66  // get the entire file
67  tesseract_common::Resource::Ptr resource = locator.locateResource(filename);
68  std::string xml_string;
69  std::fstream xml_file(filename.c_str(), std::fstream::in);
70  if (xml_file.is_open() && resource)
71  {
72  while (xml_file.good())
73  {
74  std::string line;
75  std::getline(xml_file, line);
76  xml_string += (line + "\n");
77  }
78  xml_file.close();
79  try
80  {
81  initString(scene_graph, xml_string, *resource);
82  }
83  catch (...)
84  {
85  std::throw_with_nested(std::runtime_error("SRDF: Failed to parse file '" + filename + "'!"));
86  }
87  }
88  else
89  {
90  std::throw_with_nested(std::runtime_error("SRDF: Failed to open file '" + filename + "'!"));
91  }
92 }
93 
95  const std::string& xmlstring,
96  const tesseract_common::ResourceLocator& locator)
97 {
98  tinyxml2::XMLDocument xml_doc;
99  int status = xml_doc.Parse(xmlstring.c_str());
100  if (status != tinyxml2::XML_SUCCESS)
101  std::throw_with_nested(std::runtime_error("SRDF: Failed to create XMLDocument from xml string!"));
102 
103  clear();
104 
105  const tinyxml2::XMLElement* srdf_xml = xml_doc.FirstChildElement("robot");
106  if (srdf_xml == nullptr)
107  std::throw_with_nested(std::runtime_error("SRDF: Missing 'robot' element in the xml file!"));
108 
109  if (srdf_xml == nullptr || std::strncmp(srdf_xml->Name(), "robot", 5) != 0)
110  std::throw_with_nested(std::runtime_error("SRDF: Missing 'robot' element in the xml file!")); // LCOV_EXCL_LINE
111 
112  // get the robot name
113  status = tesseract_common::QueryStringAttributeRequired(srdf_xml, "name", name);
114  if (status != tinyxml2::XML_SUCCESS)
115  std::throw_with_nested(std::runtime_error("SRDF: Missing or failed to parse attribute 'name'!"));
116 
117  if (name != scene_graph.getName())
118  CONSOLE_BRIDGE_logError("Semantic description is not specified for the same robot as the URDF");
119 
120  std::string version_string;
121  status = tesseract_common::QueryStringAttribute(srdf_xml, "version", version_string);
122  if (status != tinyxml2::XML_NO_ATTRIBUTE && status != tinyxml2::XML_SUCCESS)
123  {
124  std::throw_with_nested(std::runtime_error("SRDF: Failed to parse attribute 'version'!")); // LCOV_EXCL_LINE
125  }
126  else if (status != tinyxml2::XML_NO_ATTRIBUTE)
127  {
128  std::vector<std::string> tokens;
129  boost::split(tokens, version_string, boost::is_any_of("."), boost::token_compress_on);
130  if (tokens.size() < 2 || tokens.size() > 3 || !tesseract_common::isNumeric(tokens))
131  std::throw_with_nested(std::runtime_error("SRDF: Failed to parse attribute 'version'!"));
132 
135  if (tokens.size() == 3)
137  else
138  version[2] = 0;
139  }
140  else
141  {
142  CONSOLE_BRIDGE_logDebug("SRDF Parser: The version number warning can be suppressed by adding the attribute: "
143  "version=%i.%i.%i",
144  version[0],
145  version[1],
146  version[2]);
147  }
148 
149  std::tuple<GroupNames, ChainGroups, JointGroups, LinkGroups> groups_info;
150  try
151  {
152  groups_info = parseGroups(scene_graph, srdf_xml, version);
153  }
154  catch (...)
155  {
156  std::throw_with_nested(std::runtime_error("SRDF: Error parsing srdf groups for robot '" + name + "'!"));
157  }
158 
159  kinematics_information.group_names = std::get<0>(groups_info);
160  kinematics_information.chain_groups = std::get<1>(groups_info);
161  kinematics_information.joint_groups = std::get<2>(groups_info);
162  kinematics_information.link_groups = std::get<3>(groups_info);
163 
164  try
165  {
168  }
169  catch (...)
170  {
171  std::throw_with_nested(std::runtime_error("SRDF: Error parsing srdf groups states for robot '" + name + "'!"));
172  }
173 
174  try
175  {
176  kinematics_information.group_tcps = parseGroupTCPs(scene_graph, srdf_xml, version);
177  }
178  catch (...)
179  {
180  std::throw_with_nested(
181  std::runtime_error("SRDF: Error parsing srdf groups tool center points for robot '" + name + "'!"));
182  }
183 
184  try
185  {
186  for (const tinyxml2::XMLElement* xml_element = srdf_xml->FirstChildElement("kinematics_plugin_config");
187  xml_element != nullptr;
188  xml_element = xml_element->NextSiblingElement("kinematics_plugin_config"))
189  {
192  }
193  }
194  catch (...)
195  {
196  std::throw_with_nested(
197  std::runtime_error("SRDF: Error parsing srdf kinematics plugin config for robot '" + name + "'!"));
198  }
199 
200  try
201  {
202  for (const tinyxml2::XMLElement* xml_element = srdf_xml->FirstChildElement("calibration_config");
203  xml_element != nullptr;
204  xml_element = xml_element->NextSiblingElement("calibration_config"))
205  {
206  tesseract_common::CalibrationInfo info = parseCalibrationConfig(scene_graph, locator, xml_element, version);
207  calibration_info.insert(info);
208  }
209  }
210  catch (...)
211  {
212  std::throw_with_nested(std::runtime_error("SRDF: Error parsing srdf calibration config for robot '" + name + "'!"));
213  }
214 
215  try
216  {
217  acm = parseDisabledCollisions(scene_graph, srdf_xml, version);
218  }
219  catch (...)
220  {
221  std::throw_with_nested(
222  std::runtime_error("SRDF: Error parsing srdf disabled collisions for robot '" + name + "'!"));
223  }
224 
225  try
226  {
227  collision_margin_data = parseCollisionMargins(scene_graph, srdf_xml, version);
228  }
229  catch (...)
230  {
231  std::throw_with_nested(
232  std::runtime_error("SRDF: Error parsing srdf collision margin data for robot '" + name + "'!"));
233  }
234 
235  try
236  {
237  for (const tinyxml2::XMLElement* xml_element = srdf_xml->FirstChildElement("contact_managers_plugin_config");
238  xml_element != nullptr;
239  xml_element = xml_element->NextSiblingElement("contact_managers_plugin_config"))
240  {
242  parseContactManagersPluginConfig(locator, xml_element, version);
244  }
245  }
246  catch (...)
247  {
248  std::throw_with_nested(
249  std::runtime_error("SRDF: Error parsing srdf contact managers plugin config for robot '" + name + "'!"));
250  }
251 }
252 
253 bool SRDFModel::saveToFile(const std::string& file_path) const
254 {
255  tinyxml2::XMLDocument doc;
256  tinyxml2::XMLElement* xml_root = doc.NewElement("robot");
257  xml_root->SetAttribute("name", name.c_str());
258  xml_root->SetAttribute(
259  "version",
260  (std::to_string(version[0]) + "." + std::to_string(version[1]) + "." + std::to_string(version[2])).c_str());
261 
262  for (const auto& chain : kinematics_information.chain_groups)
263  {
264  tinyxml2::XMLElement* xml_group = doc.NewElement("group");
265  xml_group->SetAttribute("name", chain.first.c_str());
266  for (const auto& pair : chain.second) // <chain base_link="base_link" tip_link="tool0" />
267  {
268  tinyxml2::XMLElement* xml_pair = doc.NewElement("chain");
269  xml_pair->SetAttribute("base_link", pair.first.c_str());
270  xml_pair->SetAttribute("tip_link", pair.second.c_str());
271  xml_group->InsertEndChild(xml_pair);
272  }
273  xml_root->InsertEndChild(xml_group);
274  }
275 
276  for (const auto& joint : kinematics_information.joint_groups)
277  {
278  tinyxml2::XMLElement* xml_group = doc.NewElement("group");
279  xml_group->SetAttribute("name", joint.first.c_str());
280  for (const auto& joint_name : joint.second) // <chain base_link="base_link" tip_link="tool0" />
281  {
282  tinyxml2::XMLElement* xml_joint = doc.NewElement("joint");
283  xml_joint->SetAttribute("name", joint_name.c_str());
284  xml_group->InsertEndChild(xml_joint);
285  }
286  xml_root->InsertEndChild(xml_group);
287  }
288 
289  for (const auto& link : kinematics_information.link_groups)
290  {
291  tinyxml2::XMLElement* xml_group = doc.NewElement("group");
292  xml_group->SetAttribute("name", link.first.c_str());
293  for (const auto& link_name : link.second) // <chain base_link="base_link" tip_link="tool0" />
294  {
295  tinyxml2::XMLElement* xml_link = doc.NewElement("link");
296  xml_link->SetAttribute("name", link_name.c_str());
297  xml_group->InsertEndChild(xml_link);
298  }
299  xml_root->InsertEndChild(xml_group);
300  }
301 
302  for (const auto& group_state : kinematics_information.group_states)
303  {
304  for (const auto& joint_state : group_state.second) // <chain base_link="base_link" tip_link="tool0" />
305  {
306  tinyxml2::XMLElement* xml_group_state = doc.NewElement("group_state");
307  xml_group_state->SetAttribute("name", joint_state.first.c_str());
308  xml_group_state->SetAttribute("group", group_state.first.c_str());
309 
310  for (const auto& joint : joint_state.second)
311  {
312  tinyxml2::XMLElement* xml_joint = doc.NewElement("joint");
313  xml_joint->SetAttribute("name", joint.first.c_str());
314  xml_joint->SetAttribute("value", joint.second);
315  xml_group_state->InsertEndChild(xml_joint);
316  }
317  xml_root->InsertEndChild(xml_group_state);
318  }
319  }
320 
321  Eigen::IOFormat eigen_format(Eigen::StreamPrecision, Eigen::DontAlignCols, " ", " ");
322  for (const auto& group_tcp : kinematics_information.group_tcps)
323  {
324  tinyxml2::XMLElement* xml_group_tcps = doc.NewElement("group_tcps");
325  xml_group_tcps->SetAttribute("group", group_tcp.first.c_str());
326 
327  for (const auto& tcp : group_tcp.second)
328  {
329  tinyxml2::XMLElement* xml_tcp = doc.NewElement("tcp");
330  xml_tcp->SetAttribute("name", tcp.first.c_str());
331 
332  std::stringstream xyz_string;
333  xyz_string << tcp.second.translation().format(eigen_format);
334  xml_tcp->SetAttribute("xyz", xyz_string.str().c_str());
335 
336  std::stringstream wxyz_string;
337  Eigen::Quaterniond q(tcp.second.linear());
338  wxyz_string << Eigen::Vector4d(q.w(), q.x(), q.y(), q.z()).format(eigen_format);
339 
340  xml_tcp->SetAttribute("wxyz", wxyz_string.str().c_str());
341  xml_group_tcps->InsertEndChild(xml_tcp);
342  }
343  xml_root->InsertEndChild(xml_group_tcps);
344  }
345 
347  {
348  std::filesystem::path p(file_path);
349  std::ofstream fout(p.parent_path().append("kinematics_plugin_config.yaml").string());
350  YAML::Node config;
352  fout << config;
353  tinyxml2::XMLElement* xml_kin_plugin_entry = doc.NewElement("kinematics_plugin_config");
354  xml_kin_plugin_entry->SetAttribute("filename", "kinematics_plugin_config.yaml");
355  xml_root->InsertEndChild(xml_kin_plugin_entry);
356  }
357 
359  {
360  std::filesystem::path p(file_path);
361  std::ofstream fout(p.parent_path().append("contact_managers_plugin_config.yaml").string());
362  YAML::Node config;
364  fout << config;
365  tinyxml2::XMLElement* xml_kin_plugin_entry = doc.NewElement("contact_managers_plugin_config");
366  xml_kin_plugin_entry->SetAttribute("filename", "contact_managers_plugin_config.yaml");
367  xml_root->InsertEndChild(xml_kin_plugin_entry);
368  }
369 
370  if (!calibration_info.empty())
371  {
372  std::filesystem::path p(file_path);
373  std::ofstream fout(p.parent_path().append("calibration_config.yaml").string());
374  YAML::Node config;
376  fout << config;
377  tinyxml2::XMLElement* xml_cal_info_entry = doc.NewElement("calibration_config");
378  xml_cal_info_entry->SetAttribute("filename", "calibration_config.yaml");
379  xml_root->InsertEndChild(xml_cal_info_entry);
380  }
381 
382  // Write the ACM
383  const auto allowed_collision_entries = acm.getAllAllowedCollisions();
384  auto acm_keys = getAlphabeticalACMKeys(allowed_collision_entries);
385  for (const auto& key : acm_keys)
386  {
387  tinyxml2::XMLElement* xml_acm_entry = doc.NewElement("disable_collisions");
388  xml_acm_entry->SetAttribute("link1", key.get().first.c_str());
389  xml_acm_entry->SetAttribute("link2", key.get().second.c_str());
390  xml_acm_entry->SetAttribute("reason", allowed_collision_entries.at(key.get()).c_str());
391  xml_root->InsertEndChild(xml_acm_entry);
392  }
393 
394  if (collision_margin_data != nullptr)
395  {
396  tinyxml2::XMLElement* xml_cm_entry = doc.NewElement("collision_margins");
397  xml_cm_entry->SetAttribute("default_margin", collision_margin_data->getDefaultCollisionMargin());
398  for (const auto& entry : collision_margin_data->getCollisionMarginPairData().getCollisionMargins())
399  {
400  tinyxml2::XMLElement* xml_cm_pair_entry = doc.NewElement("pair_margin");
401  xml_cm_pair_entry->SetAttribute("link1", entry.first.first.c_str());
402  xml_cm_pair_entry->SetAttribute("link2", entry.first.second.c_str());
403  xml_cm_pair_entry->SetAttribute("margin", entry.second);
404  xml_cm_entry->InsertEndChild(xml_cm_pair_entry);
405 
406  xml_root->InsertEndChild(xml_cm_entry);
407  }
408  }
409 
410  doc.InsertFirstChild(xml_root);
411  int status = doc.SaveFile(file_path.c_str());
412  if (status != tinyxml2::XML_SUCCESS)
413  {
414  // LCOV_EXCL_START
415  CONSOLE_BRIDGE_logError("Failed to save SRDF XML File: %s", file_path.c_str());
416  return false;
417  // LCOV_EXCL_STOP
418  }
419 
420  return true;
421 }
422 
424 {
425  name = "undefined";
426  version = { { 1, 0, 0 } };
430  collision_margin_data = nullptr;
431 }
432 
433 bool SRDFModel::operator==(const SRDFModel& rhs) const
434 {
435  bool equal = true;
436  equal &= name == rhs.name;
437  equal &= tesseract_common::isIdenticalArray<int, 3>(version, rhs.version);
440  equal &= acm == rhs.acm;
442  equal &= calibration_info == rhs.calibration_info;
443 
444  return equal;
445 }
446 bool SRDFModel::operator!=(const SRDFModel& rhs) const { return !operator==(rhs); }
447 
448 template <class Archive>
449 void SRDFModel::serialize(Archive& ar, const unsigned int /*version*/)
450 {
451  ar& BOOST_SERIALIZATION_NVP(name);
452  ar& BOOST_SERIALIZATION_NVP(version);
453  ar& BOOST_SERIALIZATION_NVP(kinematics_information);
454  ar& BOOST_SERIALIZATION_NVP(contact_managers_plugin_info);
455  ar& BOOST_SERIALIZATION_NVP(acm);
456  ar& BOOST_SERIALIZATION_NVP(collision_margin_data);
457  ar& BOOST_SERIALIZATION_NVP(calibration_info);
458 }
459 
460 } // namespace tesseract_srdf
461 
464 BOOST_CLASS_EXPORT_IMPLEMENT(tesseract_srdf::SRDFModel)
tesseract_common::CalibrationInfo::CONFIG_KEY
static const std::string CONFIG_KEY
tesseract_common::ContactManagersPluginInfo::empty
bool empty() const
tesseract_srdf::SRDFModel::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: srdf_model.cpp:449
tesseract_common::CalibrationInfo::empty
bool empty() const
yaml_extenstions.h
graph.h
tesseract_srdf::parseGroupTCPs
GroupTCPs parseGroupTCPs(const tesseract_scene_graph::SceneGraph &scene_graph, const tinyxml2::XMLElement *srdf_xml, const std::array< int, 3 > &version)
Parse groups tool center points from srdf xml element.
Definition: group_tool_center_points.cpp:47
tesseract_srdf
Main namespace.
Definition: collision_margins.h:43
tesseract_common::QueryStringAttributeRequired
int QueryStringAttributeRequired(const tinyxml2::XMLElement *xml_element, const char *name, std::string &value)
tesseract_srdf::SRDFModel::name
std::string name
The name of the srdf model.
Definition: srdf_model.h:94
tesseract_srdf::parseGroupStates
GroupJointStates parseGroupStates(const tesseract_scene_graph::SceneGraph &scene_graph, const GroupNames &group_names, const tinyxml2::XMLElement *srdf_xml, const std::array< int, 3 > &version)
Parse groups states from srdf xml element.
Definition: group_states.cpp:38
tesseract_srdf::KinematicsInformation::group_tcps
GroupTCPs group_tcps
A map of group tool center points.
Definition: kinematics_information.h:88
tesseract_srdf::parseContactManagersPluginConfig
tesseract_common::ContactManagersPluginInfo parseContactManagersPluginConfig(const tesseract_common::ResourceLocator &locator, const tinyxml2::XMLElement *xml_element, const std::array< int, 3 > &version)
Parse contact managers plugin config xml element.
Definition: configs.cpp:123
tesseract_srdf::SRDFModel::contact_managers_plugin_info
tesseract_common::ContactManagersPluginInfo contact_managers_plugin_info
The contact managers plugin information.
Definition: srdf_model.h:103
tesseract_common::AllowedCollisionMatrix::getAllAllowedCollisions
const AllowedCollisionEntries & getAllAllowedCollisions() const
tesseract_common::ContactManagersPluginInfo::clear
void clear()
tesseract_srdf::SRDFModel::clear
void clear()
Clear the model.
Definition: srdf_model.cpp:423
utils.h
tesseract_srdf::SRDFModel::saveToFile
bool saveToFile(const std::string &file_path) const
Save the model to a file.
Definition: srdf_model.cpp:253
group_states.h
Parse group states data from srdf file.
resource_locator.h
tesseract_common::pointersEqual
bool pointersEqual(const std::shared_ptr< T > &p1, const std::shared_ptr< T > &p2)
TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_ARCHIVES_INSTANTIATE(Type)
collision_margin_data.h
tesseract_common::ResourceLocator::locateResource
virtual std::shared_ptr< Resource > locateResource(const std::string &url) const=0
tesseract_srdf::SRDFModel::collision_margin_data
std::shared_ptr< tesseract_common::CollisionMarginData > collision_margin_data
Collision margin data.
Definition: srdf_model.h:109
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_srdf::SRDFModel::kinematics_information
KinematicsInformation kinematics_information
Contact information related to kinematics.
Definition: srdf_model.h:100
tesseract_scene_graph::SceneGraph
tesseract_srdf::SRDFModel
Representation of semantic information about the robot.
Definition: srdf_model.h:54
tesseract_srdf::parseCollisionMargins
std::shared_ptr< tesseract_common::CollisionMarginData > parseCollisionMargins(const tesseract_scene_graph::SceneGraph &scene_graph, const tinyxml2::XMLElement *srdf_xml, const std::array< int, 3 > &version)
Parse allowed collisions from srdf xml element.
Definition: collision_margins.cpp:41
tesseract_common::toNumeric< int >
template bool toNumeric< int >(const std::string &, int &)
configs.h
tesseract_scene_graph::SceneGraph::getName
const std::string & getName() const
tesseract_srdf::SRDFModel::initString
void initString(const tesseract_scene_graph::SceneGraph &scene_graph, const std::string &xmlstring, const tesseract_common::ResourceLocator &locator)
Load Model from a XML-string.
Definition: srdf_model.cpp:94
utils.h
Tesseract SRDF utility functions.
tesseract_common::KinematicsPluginInfo::insert
void insert(const KinematicsPluginInfo &other)
tesseract_srdf::KinematicsInformation::link_groups
LinkGroups link_groups
A map of link groups.
Definition: kinematics_information.h:82
tesseract_srdf::SRDFModel::initFile
void initFile(const tesseract_scene_graph::SceneGraph &scene_graph, const std::string &filename, const tesseract_common::ResourceLocator &locator)
Load Model given a filename.
Definition: srdf_model.cpp:62
tesseract_srdf::KinematicsInformation::group_names
EIGEN_MAKE_ALIGNED_OPERATOR_NEW GroupNames group_names
A set of group names.
Definition: kinematics_information.h:73
tesseract_srdf::SRDFModel::version
std::array< int, 3 > version
The version number major.minor[.patch].
Definition: srdf_model.h:97
tesseract_common::CalibrationInfo
tesseract_srdf::parseKinematicsPluginConfig
tesseract_common::KinematicsPluginInfo parseKinematicsPluginConfig(const tesseract_common::ResourceLocator &locator, const tinyxml2::XMLElement *xml_element, const std::array< int, 3 > &version)
Parse kinematics plugin config xml element.
Definition: configs.cpp:98
tesseract_srdf::parseGroups
std::tuple< GroupNames, ChainGroups, JointGroups, LinkGroups > parseGroups(const tesseract_scene_graph::SceneGraph &scene_graph, const tinyxml2::XMLElement *srdf_xml, const std::array< int, 3 > &version)
Parse groups from srdf xml element.
Definition: groups.cpp:40
serialization.h
tesseract_common::ContactManagersPluginInfo
tesseract_common::ResourceLocator
tesseract_srdf::SRDFModel::acm
tesseract_common::AllowedCollisionMatrix acm
The allowed collision matrix.
Definition: srdf_model.h:106
tesseract_srdf::SRDFModel::operator!=
bool operator!=(const SRDFModel &rhs) const
Definition: srdf_model.cpp:446
disabled_collisions.h
Parse disabled collision data from srdf file.
tesseract_common::KinematicsPluginInfo
tesseract_common::QueryStringAttribute
int QueryStringAttribute(const tinyxml2::XMLElement *xml_element, const char *name, std::string &value)
tesseract_srdf::parseDisabledCollisions
tesseract_common::AllowedCollisionMatrix parseDisabledCollisions(const tesseract_scene_graph::SceneGraph &scene_graph, const tinyxml2::XMLElement *srdf_xml, const std::array< int, 3 > &version)
Parse allowed collisions from srdf xml element.
Definition: disabled_collisions.cpp:40
tesseract_srdf::SRDFModel::operator==
bool operator==(const SRDFModel &rhs) const
Definition: srdf_model.cpp:433
tesseract_srdf::getAlphabeticalACMKeys
std::vector< std::reference_wrapper< const tesseract_common::LinkNamesPair > > getAlphabeticalACMKeys(const tesseract_common::AllowedCollisionEntries &allowed_collision_entries)
Returns an alphabetically sorted vector of ACM keys (the link pairs)
Definition: utils.cpp:53
tesseract_srdf::KinematicsInformation::joint_groups
JointGroups joint_groups
A map of joint groups.
Definition: kinematics_information.h:79
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_common::isNumeric
bool isNumeric(const std::string &s)
tesseract_common::ContactManagersPluginInfo::insert
void insert(const ContactManagersPluginInfo &other)
tesseract_srdf::KinematicsInformation::clear
void clear()
Clear the kinematics information.
Definition: kinematics_information.cpp:44
tesseract_common::Resource::Ptr
std::shared_ptr< Resource > Ptr
tesseract_common::AllowedCollisionMatrix::clearAllowedCollisions
void clearAllowedCollisions()
yaml_utils.h
groups.h
Parse groups data from srdf file.
tesseract_common::ContactManagersPluginInfo::CONFIG_KEY
static const std::string CONFIG_KEY
tesseract_srdf::parseCalibrationConfig
tesseract_common::CalibrationInfo parseCalibrationConfig(const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_common::ResourceLocator &locator, const tinyxml2::XMLElement *xml_element, const std::array< int, 3 > &version)
Parse calibration config xml element.
Definition: configs.cpp:65
srdf_model.h
Parse srdf xml.
tesseract_srdf::SRDFModel::calibration_info
tesseract_common::CalibrationInfo calibration_info
The calibration information.
Definition: srdf_model.h:112
collision_margins.h
Parse collision margin data from srdf file.
macros.h
tesseract_common::CalibrationInfo::insert
void insert(const CalibrationInfo &other)
tesseract_srdf::KinematicsInformation::chain_groups
ChainGroups chain_groups
A map of chains groups.
Definition: kinematics_information.h:76
tesseract_srdf::KinematicsInformation::group_states
GroupJointStates group_states
A map of group states.
Definition: kinematics_information.h:85
tesseract_srdf::KinematicsInformation::kinematics_plugin_info
tesseract_common::KinematicsPluginInfo kinematics_plugin_info
The kinematics plugin information.
Definition: kinematics_information.h:91
group_tool_center_points.h
Parse group tool center points data from srdf file.
eigen_serialization.h
tesseract_common::KinematicsPluginInfo::CONFIG_KEY
static const std::string CONFIG_KEY
tesseract_common::KinematicsPluginInfo::empty
bool empty() const


tesseract_srdf
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:04