From 2b8bd58e1c751798a3b7928a8557329290e68a53 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Wed, 22 Jun 2016 09:59:25 -0700 Subject: [PATCH] support single-scalar scale values in URDF, even though "officially" it should be a vector3. This will load quadcopter.urdf in Drake: https://github.com/RobotLocomotion/drake/blob/master/drake/examples/Quadrotor/quadrotor.urdf --- .../Importers/ImportURDFDemo/UrdfParser.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/Importers/ImportURDFDemo/UrdfParser.cpp b/examples/Importers/ImportURDFDemo/UrdfParser.cpp index 0e720a7c2..a6ec0a5c4 100644 --- a/examples/Importers/ImportURDFDemo/UrdfParser.cpp +++ b/examples/Importers/ImportURDFDemo/UrdfParser.cpp @@ -393,13 +393,22 @@ bool UrdfParser::parseGeometry(UrdfGeometry& geom, TiXmlElement* g, ErrorLogger* } geom.m_meshFileName = shape->Attribute("filename"); - - if (shape->Attribute("scale")) + geom.m_meshScale.setValue(1,1,1); + + if (shape->Attribute("scale")) { - parseVector3(geom.m_meshScale,shape->Attribute("scale"),logger); + if (!parseVector3(geom.m_meshScale,shape->Attribute("scale"),logger)) + { + logger->reportWarning("scale should be a vector3, not single scalar. Workaround activated.\n"); + std::string scalar_str = shape->Attribute("scale"); + double scaleFactor = urdfLexicalCast(scalar_str.c_str()); + if (scaleFactor) + { + geom.m_meshScale.setValue(scaleFactor,scaleFactor,scaleFactor); + } + } } else { - geom.m_meshScale.setValue(1,1,1); } } }