Skip to content

Commit b0ffca9

Browse files
committed
simplified code: use name attribute as identifier for xml element
1 parent 562a085 commit b0ffca9

File tree

1 file changed

+2
-65
lines changed

1 file changed

+2
-65
lines changed

urdf/src/sensor.cpp

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -86,50 +86,6 @@ SensorMap parseSensors(const std::string &xml_string, const SensorParserMap &par
8686
return parseSensors(xml_doc, parsers);
8787
}
8888

89-
90-
/** retrieve list of sensor tags that are handled by given parser */
91-
static std::set<std::string>
92-
getSensorTags(pluginlib::ClassLoader<urdf::SensorParser> &loader,
93-
const std::string &class_id)
94-
{
95-
const std::string &manifest = loader.getPluginManifestPath(class_id);
96-
97-
TiXmlDocument doc;
98-
doc.LoadFile(manifest);
99-
TiXmlElement *library = doc.RootElement();
100-
if (!library)
101-
throw std::runtime_error("Skipping manifest '" + manifest + "' which failed to parse");
102-
103-
if (library->ValueStr() != "library" &&
104-
library->ValueStr() != "class_libraries")
105-
throw std::runtime_error("Expected \"library\" or \"class_libraries\" as the root tag."
106-
"Found: " + library->ValueStr());
107-
108-
if (library->ValueStr() == "class_libraries")
109-
library = library->FirstChildElement("library");
110-
111-
std::set<std::string> results;
112-
for (; library; library = library->FirstChildElement("library"))
113-
{
114-
for (TiXmlElement* class_element = library->FirstChildElement("class");
115-
class_element; class_element = class_element->NextSiblingElement( "class" ))
116-
{
117-
// TODO: filter by class_id
118-
ROS_DEBUG_STREAM("sensor parser: " << class_id);
119-
TiXmlElement* tags = class_element->FirstChildElement("tags");
120-
for (TiXmlElement* tag = tags ? tags->FirstChildElement() : NULL;
121-
tag; tag = tag->NextSiblingElement())
122-
{
123-
ROS_DEBUG_STREAM(" sensor tag: " << tag->Value());
124-
results.insert(tag->Value());
125-
}
126-
}
127-
}
128-
if (results.empty())
129-
throw std::runtime_error("plugin manifest misses valid sensor tags");
130-
return results;
131-
}
132-
13389
const SensorParserMap& getDefaultSensorParserMap()
13490
{
13591
static boost::mutex PARSER_PLUGIN_LOCK;
@@ -145,33 +101,14 @@ const SensorParserMap& getDefaultSensorParserMap()
145101
const std::vector<std::string> &classes = PARSER_PLUGIN_LOADER->getDeclaredClasses();
146102
for (std::size_t i = 0 ; i < classes.size() ; ++i)
147103
{
148-
std::set<std::string> sensor_tags;
149-
try {
150-
sensor_tags = getSensorTags(*PARSER_PLUGIN_LOADER, classes[i]);
151-
} catch (const std::runtime_error &e) {
152-
ROS_ERROR_STREAM(e.what());
153-
continue;
154-
}
155-
156104
urdf::SensorParserSharedPtr parser;
157105
try {
158106
parser = PARSER_PLUGIN_LOADER->createInstance(classes[i]);
159107
} catch(const pluginlib::PluginlibException& ex) {
160108
ROS_ERROR_STREAM("Failed to create sensor parser: " << classes[i] << "\n" << ex.what());
161109
}
162-
163-
for (std::set<std::string>::const_iterator
164-
it = sensor_tags.begin(), end=sensor_tags.end(); it != end; ++it)
165-
{
166-
if (defaultParserMap.find(*it) == defaultParserMap.end())
167-
{
168-
defaultParserMap.insert(std::make_pair(*it, parser));
169-
}
170-
else
171-
{
172-
ROS_WARN("ambiguous sensor parser for sensor %s", it->c_str());
173-
}
174-
}
110+
defaultParserMap.insert(std::make_pair(classes[i], parser));
111+
ROS_DEBUG_STREAM("added sensor parser: " << classes[i]);
175112
}
176113
if (defaultParserMap.empty())
177114
ROS_WARN_STREAM("No sensor parsers found");

0 commit comments

Comments
 (0)