@@ -33,20 +33,24 @@ std::string getMinimalUrdfTxt()
33
33
}
34
34
35
35
// ///////////////////////////////////////////////
36
- std::string convertUrdfStrToSdfStr (const std::string &_urdf)
36
+ std::string convertUrdfStrToSdfStr (
37
+ const std::string &_urdf,
38
+ const sdf::ParserConfig &_config = sdf::ParserConfig::GlobalConfig())
37
39
{
38
40
sdf::URDF2SDF parser_;
39
41
tinyxml2::XMLDocument sdf_result;
40
- parser_.InitModelString (_urdf, &sdf_result);
42
+ parser_.InitModelString (_urdf, _config, &sdf_result);
41
43
tinyxml2::XMLPrinter printer;
42
44
sdf_result.Accept (&printer);
43
45
return printer.CStr ();
44
46
}
45
47
46
48
// ///////////////////////////////////////////////
47
- void convertUrdfStrToSdf (const std::string &_urdf, sdf::SDF &_sdf)
49
+ void convertUrdfStrToSdf (
50
+ const std::string &_urdf, sdf::SDF &_sdf,
51
+ const sdf::ParserConfig &_config = sdf::ParserConfig::GlobalConfig())
48
52
{
49
- _sdf.SetFromString (convertUrdfStrToSdfStr (_urdf));
53
+ _sdf.SetFromString (convertUrdfStrToSdfStr (_urdf, _config ));
50
54
}
51
55
52
56
// ///////////////////////////////////////////////
@@ -57,8 +61,9 @@ TEST(URDFParser, InitModelDoc_EmptyDoc_NoThrow)
57
61
ASSERT_NO_THROW (
58
62
tinyxml2::XMLDocument doc = tinyxml2::XMLDocument ();
59
63
sdf::URDF2SDF parser_;
64
+ sdf::ParserConfig config_;
60
65
tinyxml2::XMLDocument sdf_result;
61
- parser_.InitModelDoc (&doc, &sdf_result);
66
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
62
67
); // NOLINT(whitespace/parens)
63
68
}
64
69
@@ -70,8 +75,9 @@ TEST(URDFParser, InitModelDoc_BasicModel_NoThrow)
70
75
tinyxml2::XMLDocument doc;
71
76
doc.Parse (getMinimalUrdfTxt ().c_str ());
72
77
sdf::URDF2SDF parser_;
78
+ sdf::ParserConfig config_;
73
79
tinyxml2::XMLDocument sdf_result;
74
- parser_.InitModelDoc (&doc, &sdf_result);
80
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
75
81
); // NOLINT(whitespace/parens)
76
82
}
77
83
@@ -82,9 +88,10 @@ TEST(URDFParser, ParseResults_BasicModel_ParseEqualToModel)
82
88
tinyxml2::XMLDocument doc;
83
89
doc.Parse (getMinimalUrdfTxt ().c_str ());
84
90
sdf::URDF2SDF parser_;
91
+ sdf::ParserConfig config_;
85
92
86
93
tinyxml2::XMLDocument sdf_result;
87
- parser_.InitModelDoc (&doc, &sdf_result);
94
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
88
95
89
96
tinyxml2::XMLPrinter printer;
90
97
sdf_result.Print (&printer);
@@ -117,8 +124,9 @@ TEST(URDFParser, ParseRobotOriginXYZBlank)
117
124
tinyxml2::XMLDocument doc;
118
125
doc.Parse (stream.str ().c_str ());
119
126
sdf::URDF2SDF parser_;
127
+ sdf::ParserConfig config_;
120
128
tinyxml2::XMLDocument sdf_result;
121
- parser_.InitModelDoc (&doc, &sdf_result);
129
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
122
130
tinyxml2::XMLElement *sdf = sdf_result.FirstChildElement (" sdf" );
123
131
ASSERT_NE (nullptr , sdf);
124
132
tinyxml2::XMLElement *model = sdf->FirstChildElement (" model" );
@@ -138,8 +146,9 @@ TEST(URDFParser, ParseRobotOriginRPYBlank)
138
146
tinyxml2::XMLDocument doc;
139
147
sdf::URDF2SDF parser_;
140
148
doc.Parse (stream.str ().c_str ());
149
+ sdf::ParserConfig config_;
141
150
tinyxml2::XMLDocument sdf_result;
142
- parser_.InitModelDoc (&doc, &sdf_result);
151
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
143
152
tinyxml2::XMLElement *sdf = sdf_result.FirstChildElement (" sdf" );
144
153
ASSERT_NE (nullptr , sdf);
145
154
tinyxml2::XMLElement *model = sdf->FirstChildElement (" model" );
@@ -172,8 +181,9 @@ TEST(URDFParser, ParseRobotMaterialBlank)
172
181
tinyxml2::XMLDocument doc;
173
182
doc.Parse (stream.str ().c_str ());
174
183
sdf::URDF2SDF parser;
184
+ sdf::ParserConfig config_;
175
185
tinyxml2::XMLDocument sdfXml;
176
- parser.InitModelDoc (&doc, &sdfXml);
186
+ parser.InitModelDoc (&doc, config_, &sdfXml);
177
187
auto sdfElem = sdfXml.FirstChildElement (" sdf" );
178
188
ASSERT_NE (nullptr , sdfElem);
179
189
auto modelElem = sdfElem->FirstChildElement (" model" );
@@ -214,9 +224,10 @@ TEST(URDFParser, ParseRobotMaterialName)
214
224
tinyxml2::XMLDocument doc;
215
225
doc.Parse (stream.str ().c_str ());
216
226
sdf::URDF2SDF parser;
227
+ sdf::ParserConfig config_;
217
228
218
229
tinyxml2::XMLDocument sdfXml;
219
- parser.InitModelDoc (&doc, &sdfXml);
230
+ parser.InitModelDoc (&doc, config_, &sdfXml);
220
231
221
232
auto sdfElem = sdfXml.FirstChildElement (" sdf" );
222
233
ASSERT_NE (nullptr , sdfElem);
@@ -254,8 +265,9 @@ TEST(URDFParser, ParseRobotOriginInvalidXYZ)
254
265
tinyxml2::XMLDocument doc;
255
266
sdf::URDF2SDF parser_;
256
267
doc.Parse (stream.str ().c_str ());
268
+ sdf::ParserConfig config_;
257
269
tinyxml2::XMLDocument sdf_result;
258
- parser_.InitModelDoc (&doc, &sdf_result);
270
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
259
271
tinyxml2::XMLElement *sdf = sdf_result.FirstChildElement (" sdf" );
260
272
ASSERT_NE (nullptr , sdf);
261
273
tinyxml2::XMLElement *model = sdf->FirstChildElement (" model" );
@@ -316,8 +328,9 @@ TEST(URDFParser, ParseGazeboLinkFactors)
316
328
tinyxml2::XMLDocument doc;
317
329
sdf::URDF2SDF parser_;
318
330
doc.Parse (stream.str ().c_str ());
331
+ sdf::ParserConfig config_;
319
332
tinyxml2::XMLDocument sdf_result;
320
- parser_.InitModelDoc (&doc, &sdf_result);
333
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
321
334
322
335
tinyxml2::XMLElement *tmp = sdf_result.FirstChildElement (" sdf" );
323
336
ASSERT_NE (nullptr , tmp);
@@ -355,8 +368,9 @@ TEST(URDFParser, ParseGazeboInvalidDampingFactor)
355
368
tinyxml2::XMLDocument doc;
356
369
sdf::URDF2SDF parser_;
357
370
doc.Parse (stream.str ().c_str ());
371
+ sdf::ParserConfig config_;
358
372
tinyxml2::XMLDocument sdf_result;
359
- ASSERT_THROW (parser_.InitModelDoc (&doc, &sdf_result),
373
+ ASSERT_THROW (parser_.InitModelDoc (&doc, config_, &sdf_result),
360
374
std::invalid_argument);
361
375
362
376
parser_.ListSDFExtensions ();
@@ -428,8 +442,9 @@ TEST(URDFParser, ParseGazeboJointElements)
428
442
tinyxml2::XMLDocument doc;
429
443
sdf::URDF2SDF parser_;
430
444
doc.Parse (stream.str ().c_str ());
445
+ sdf::ParserConfig config_;
431
446
tinyxml2::XMLDocument sdf_result;
432
- parser_.InitModelDoc (&doc, &sdf_result);
447
+ parser_.InitModelDoc (&doc, config_, &sdf_result);
433
448
434
449
tinyxml2::XMLElement *tmp = sdf_result.FirstChildElement (" sdf" );
435
450
ASSERT_NE (nullptr , tmp);
@@ -583,6 +598,55 @@ TEST(URDFParser, CheckFixedJointOptions_preserveFixedJoint)
583
598
ASSERT_EQ (jointType, " fixed" );
584
599
}
585
600
601
+ // ///////////////////////////////////////////////
602
+ TEST (URDFParser, CheckParserConfig_preserveFixedJoint)
603
+ {
604
+ // Convert a fixed joint with only preserveFixedJoint
605
+ // (i.e. converted to fixed joint)
606
+ std::ostringstream fixedJointPreserveFixedJoint;
607
+ fixedJointPreserveFixedJoint << " <robot name='test_robot'>"
608
+ << " <link name='link1'>"
609
+ << " <inertial>"
610
+ << " <origin xyz='0.0 0.0 0.0' rpy='0.0 0.0 0.0'/>"
611
+ << " <mass value='1.0'/>"
612
+ << " <inertia ixx='1.0' ixy='0.0' ixz='0.0'"
613
+ << " iyy='1.0' iyz='0.0' izz='1.0'/>"
614
+ << " </inertial>"
615
+ << " </link>"
616
+ << " <link name='link2'>"
617
+ << " <inertial>"
618
+ << " <origin xyz='0.0 0.0 0.0' rpy='0.0 0.0 0.0'/>"
619
+ << " <mass value='1.0'/>"
620
+ << " <inertia ixx='1.0' ixy='0.0' ixz='0.0'"
621
+ << " iyy='1.0' iyz='0.0' izz='1.0'/>"
622
+ << " </inertial>"
623
+ << " </link>"
624
+ << " <joint name='joint1_2' type='fixed'>"
625
+ << " <parent link='link1' />"
626
+ << " <child link='link2' />"
627
+ << " <origin xyz='0.0 0.0 0.0' rpy='0.0 0.0 0.0' />"
628
+ << " </joint>"
629
+ << " </robot>" ;
630
+
631
+ // Check that there is a fixed joint in the converted SDF
632
+ sdf::SDF fixedJointPreserveFixedJointSDF;
633
+
634
+ // Set the config option to preserve fixed joints.
635
+ sdf::ParserConfig config;
636
+ config.URDFSetPreserveFixedJoint (true );
637
+
638
+ convertUrdfStrToSdf (fixedJointPreserveFixedJoint.str (),
639
+ fixedJointPreserveFixedJointSDF, config);
640
+ sdf::ElementPtr elem = fixedJointPreserveFixedJointSDF.Root ();
641
+ ASSERT_NE (nullptr , elem);
642
+ ASSERT_TRUE (elem->HasElement (" model" ));
643
+ elem = elem->GetElement (" model" );
644
+ ASSERT_TRUE (elem->HasElement (" joint" ));
645
+ elem = elem->GetElement (" joint" );
646
+ std::string jointType = elem->Get <std::string>(" type" );
647
+ ASSERT_EQ (jointType, " fixed" );
648
+ }
649
+
586
650
// ///////////////////////////////////////////////
587
651
TEST (URDFParser,
588
652
CheckFixedJointOptions_preserveFixedJoint_and_disableJointLumping)
@@ -817,8 +881,9 @@ TEST(URDFParser, OutputPrecision)
817
881
</robot>)" ;
818
882
819
883
sdf::URDF2SDF parser;
884
+ sdf::ParserConfig config_;
820
885
tinyxml2::XMLDocument sdfResult;
821
- parser.InitModelString (str, &sdfResult);
886
+ parser.InitModelString (str, config_, &sdfResult);
822
887
823
888
auto root = sdfResult.RootElement ();
824
889
auto model = root->FirstChildElement (" model" );
@@ -891,8 +956,9 @@ TEST(URDFParser, ParseWhitespace)
891
956
doc.Parse (str.c_str ());
892
957
893
958
sdf::URDF2SDF parser;
959
+ sdf::ParserConfig config_;
894
960
tinyxml2::XMLDocument sdfXml;
895
- parser.InitModelDoc (&doc, &sdfXml);
961
+ parser.InitModelDoc (&doc, config_, &sdfXml);
896
962
897
963
auto root = sdfXml.RootElement ();
898
964
ASSERT_NE (nullptr , root);
0 commit comments