29 #include <console_bridge/console.h> 
   42                                                                  const tinyxml2::XMLElement* srdf_xml,
 
   43                                                                  const std::array<int, 3>& )
 
   45   double default_margin{ 0 };
 
   46   const tinyxml2::XMLElement* xml_element = srdf_xml->FirstChildElement(
"collision_margins");
 
   47   if (xml_element == 
nullptr)
 
   51   if (status != tinyxml2::XML_SUCCESS)
 
   52     std::throw_with_nested(std::runtime_error(
"CollisionMargins: collision_margins missing attribute " 
   53                                               "'default_margin'."));
 
   55   auto margin_data = std::make_shared<tesseract_common::CollisionMarginData>(default_margin);
 
   56   for (
const tinyxml2::XMLElement* xml_pair_element = xml_element->FirstChildElement(
"pair_margin");
 
   57        xml_pair_element != 
nullptr;
 
   58        xml_pair_element = xml_pair_element->NextSiblingElement(
"pair_margin"))
 
   60     std::string link1_name, link2_name;
 
   61     double link_pair_margin{ 0 };
 
   63     if (status != tinyxml2::XML_SUCCESS)
 
   64       std::throw_with_nested(std::runtime_error(
"parseCollisionMargins: Missing or failed to parse 'link1' " 
   68     if (status != tinyxml2::XML_SUCCESS)
 
   69       std::throw_with_nested(std::runtime_error(
"CollisionMargins: Missing or failed to parse 'link2' attribute."));
 
   71     if (!scene_graph.
getLink(link1_name))
 
   73       CONSOLE_BRIDGE_logWarn(
"parseCollisionMargins: Link '%s' is not known to URDF.", link1_name.c_str());
 
   76     if (!scene_graph.
getLink(link2_name))
 
   78       CONSOLE_BRIDGE_logWarn(
"parseCollisionMargins: Link '%s' is not known to URDF.", link2_name.c_str());
 
   82     if (status != tinyxml2::XML_SUCCESS)
 
   83       std::throw_with_nested(std::runtime_error(
"parseCollisionMargins: failed to parse link pair 'margin' " 
   86     margin_data->setCollisionMargin(link1_name, link2_name, link_pair_margin);