@@ -29,11 +29,13 @@ TEST(SDFParser, UrdfGazeboExtensionURDFTest)
29
29
const std::string urdfTestFile =
30
30
sdf::testing::TestFile (" integration" , " urdf_gazebo_extensions.urdf" );
31
31
32
- sdf::SDFPtr robot ( new sdf::SDF ()) ;
33
- sdf::init (robot );
34
- ASSERT_TRUE ( sdf::readFile (urdfTestFile, robot)) ;
32
+ sdf::Root root ;
33
+ auto errors = root. Load (urdfTestFile );
34
+ EXPECT_TRUE (errors. empty ()) << errors ;
35
35
36
- sdf::ElementPtr model = robot->Root ()->GetElement (" model" );
36
+ auto modelDom = root.Model ();
37
+ ASSERT_NE (nullptr , modelDom);
38
+ sdf::ElementPtr model = modelDom->Element ();
37
39
for (sdf::ElementPtr joint = model->GetElement (" joint" ); joint;
38
40
joint = joint->GetNextElement (" joint" ))
39
41
{
@@ -299,4 +301,97 @@ TEST(SDFParser, UrdfGazeboExtensionURDFTest)
299
301
checkElementPoses (" light" );
300
302
checkElementPoses (" projector" );
301
303
checkElementPoses (" sensor" );
304
+
305
+ // Check that //model/frame elements are added for reduced joints
306
+ EXPECT_EQ (14u , modelDom->FrameCount ());
307
+
308
+ EXPECT_TRUE (modelDom->FrameNameExists (" issue378_link_joint" ));
309
+ EXPECT_TRUE (modelDom->FrameNameExists (" jCamera" ));
310
+ EXPECT_TRUE (modelDom->FrameNameExists (" jointSensorNoPose" ));
311
+ EXPECT_TRUE (modelDom->FrameNameExists (" jointSensorPose" ));
312
+ EXPECT_TRUE (modelDom->FrameNameExists (" jointSensorPoseRelative" ));
313
+ EXPECT_TRUE (modelDom->FrameNameExists (" jointSensorPoseTwoLevel" ));
314
+ EXPECT_TRUE (modelDom->FrameNameExists (" jointSensorPoseTwoLevel2" ));
315
+
316
+ EXPECT_TRUE (modelDom->FrameNameExists (" issue378_link" ));
317
+ EXPECT_TRUE (modelDom->FrameNameExists (" Camera" ));
318
+ EXPECT_TRUE (modelDom->FrameNameExists (" linkSensorNoPose" ));
319
+ EXPECT_TRUE (modelDom->FrameNameExists (" linkSensorPose" ));
320
+ EXPECT_TRUE (modelDom->FrameNameExists (" linkSensorPoseRelative" ));
321
+ EXPECT_TRUE (modelDom->FrameNameExists (" linkSensorPoseTwoLevel" ));
322
+ EXPECT_TRUE (modelDom->FrameNameExists (" linkSensorPoseTwoLevel2" ));
323
+ }
324
+
325
+ // ///////////////////////////////////////////////
326
+ TEST (SDFParser, FixedJointExample)
327
+ {
328
+ const std::string urdfTestFile =
329
+ sdf::testing::TestFile (" integration" , " fixed_joint_example.urdf" );
330
+
331
+ sdf::Root root;
332
+ auto errors = root.Load (urdfTestFile);
333
+ EXPECT_TRUE (errors.empty ()) << errors;
334
+
335
+ auto model = root.Model ();
336
+ ASSERT_NE (nullptr , model);
337
+ EXPECT_EQ (" fixed_joint_example" , model->Name ());
338
+
339
+ EXPECT_EQ (2u , model->LinkCount ());
340
+ EXPECT_TRUE (model->LinkNameExists (" base" ));
341
+ EXPECT_TRUE (model->LinkNameExists (" rotary_link" ));
342
+
343
+ // Expect MassMatrix3 values to match for links
344
+ auto link1 = model->LinkByName (" base" );
345
+ auto link2 = model->LinkByName (" rotary_link" );
346
+ ASSERT_NE (nullptr , link1);
347
+ ASSERT_NE (nullptr , link2);
348
+ auto massMatrix1 = link1->Inertial ().MassMatrix ();
349
+ auto massMatrix2 = link2->Inertial ().MassMatrix ();
350
+ EXPECT_DOUBLE_EQ (massMatrix1.Mass (), massMatrix2.Mass ());
351
+ EXPECT_EQ (massMatrix1.Moi (), massMatrix2.Moi ());
352
+
353
+ EXPECT_EQ (1u , model->JointCount ());
354
+ EXPECT_TRUE (model->JointNameExists (" rotary_joint" ));
355
+
356
+ EXPECT_EQ (2u , model->FrameCount ());
357
+ ASSERT_TRUE (model->FrameNameExists (" intermediate_joint" ));
358
+ ASSERT_TRUE (model->FrameNameExists (" intermediate_link" ));
359
+
360
+ const std::string j = " intermediate_joint" ;
361
+ const std::string l = " intermediate_link" ;
362
+ std::string body;
363
+ EXPECT_TRUE (model->FrameByName (j)->ResolveAttachedToBody (body).empty ());
364
+ EXPECT_EQ (" base" , body);
365
+ EXPECT_TRUE (model->FrameByName (l)->ResolveAttachedToBody (body).empty ());
366
+ EXPECT_EQ (" base" , body);
367
+ }
368
+
369
+ // ///////////////////////////////////////////////
370
+ TEST (SDFParser, FixedJointSimple)
371
+ {
372
+ const std::string urdfTestFile =
373
+ sdf::testing::TestFile (" integration" , " fixed_joint_simple.urdf" );
374
+
375
+ sdf::Root root;
376
+ auto errors = root.Load (urdfTestFile);
377
+ EXPECT_TRUE (errors.empty ()) << errors;
378
+
379
+ auto model = root.Model ();
380
+ ASSERT_NE (nullptr , model);
381
+ EXPECT_EQ (" fixed_joint_simple" , model->Name ());
382
+
383
+ EXPECT_EQ (1u , model->LinkCount ());
384
+ EXPECT_TRUE (model->LinkNameExists (" base" ));
385
+
386
+ auto link = model->LinkByName (" base" );
387
+ ASSERT_NE (nullptr , link );
388
+ auto massMatrix = link ->Inertial ().MassMatrix ();
389
+ EXPECT_DOUBLE_EQ (2.0 , massMatrix.Mass ());
390
+ EXPECT_EQ (2.0 * gz::math::Matrix3d::Identity, massMatrix.Moi ());
391
+
392
+ EXPECT_EQ (0u , model->JointCount ());
393
+
394
+ EXPECT_EQ (2u , model->FrameCount ());
395
+ ASSERT_TRUE (model->FrameNameExists (" fixed_joint" ));
396
+ ASSERT_TRUE (model->FrameNameExists (" child_link" ));
302
397
}
0 commit comments