@@ -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-
13389const 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