41
41
#include < sot/core/matrix-homogeneous.hh>
42
42
43
43
#include < sot-pattern-generator/pg.h>
44
+ #include < jrl/dynamics/urdf/parser.hh>
44
45
45
46
using namespace std ;
46
47
namespace dynamicgraph {
@@ -549,6 +550,58 @@ namespace dynamicgraph {
549
550
return false ;
550
551
}
551
552
553
+ bool PatternGenerator::buildModelUrdf ( void )
554
+ {
555
+ jrl::dynamics::urdf::Parser parser;
556
+
557
+ // Creating the humanoid robot.
558
+ dynamicsJRLJapan::ObjectFactory aRobotDynamicsObjectConstructor;
559
+ CjrlHumanoidDynamicRobot * aHDR = 0 ;
560
+
561
+ // Parsing the file.
562
+ string RobotFileName = m_urdfDirectory + m_urdfMainFile;
563
+
564
+ std::map<std::string, std::string>::const_iterator it = specialJoints_.begin ();
565
+ for (;it!=specialJoints_.end ();++it) {
566
+ parser.specifyREPName (it->first , it->second );
567
+ }
568
+ aHDR = parser.parse (RobotFileName);
569
+ bool ok=true ;
570
+
571
+ if (aHDR!=0 )
572
+ {
573
+ CjrlFoot * rightFoot = aHDR->rightFoot ();
574
+ if (rightFoot!=0 )
575
+ {
576
+ vector3d AnkleInFoot;
577
+ rightFoot->getAnklePositionInLocalFrame (AnkleInFoot);
578
+ m_AnkleSoilDistance = fabs (AnkleInFoot[2 ]);
579
+ }
580
+ else ok=false ;
581
+ }
582
+ else ok=false ;
583
+ if (!ok)
584
+ {
585
+ SOT_THROW ExceptionPatternGenerator ( ExceptionPatternGenerator::PATTERN_GENERATOR_JRL,
586
+ " Error while creating humanoid robot dynamical model." ,
587
+ " (PG creation process for object %s)." ,
588
+ getName ().c_str ());
589
+ }
590
+ try
591
+ {
592
+ m_PGI = PatternGeneratorJRL::patternGeneratorInterfaceFactory (aHDR);
593
+ }
594
+ catch (...)
595
+ {
596
+ SOT_THROW ExceptionPatternGenerator ( ExceptionPatternGenerator::PATTERN_GENERATOR_JRL,
597
+ " Error while allocating the Pattern Generator." ,
598
+ " (PG creation process for object %s)." ,
599
+ getName ().c_str ());
600
+ }
601
+ m_init = true ;
602
+ return false ;
603
+ }
604
+
552
605
PatternGenerator::
553
606
~PatternGenerator ( void )
554
607
{
@@ -596,6 +649,21 @@ namespace dynamicgraph {
596
649
m_PreviewControlParametersFile = filename;
597
650
}
598
651
652
+ void PatternGenerator::
653
+ setUrdfDirectory ( const std::string& filename )
654
+ {
655
+ m_urdfDirectory = filename;
656
+ }
657
+ void PatternGenerator::
658
+ setUrdfMainFile ( const std::string& filename )
659
+ {
660
+ m_urdfMainFile = filename;
661
+ }
662
+ void PatternGenerator::
663
+ addJointMapping (const std::string &link, const std::string &repName)
664
+ {
665
+ specialJoints_[link] = repName;
666
+ }
599
667
600
668
/* --- COMPUTE -------------------------------------------------------------- */
601
669
/* --- COMPUTE -------------------------------------------------------------- */
@@ -1235,6 +1303,19 @@ namespace dynamicgraph {
1235
1303
makeCommandVoid1 (*this ,&PatternGenerator::setVrmlMainFile,
1236
1304
docCommandVoid1 (" Set VRML main file." ,
1237
1305
" string (file name)" )));
1306
+ addCommand (" setUrdfDir" ,
1307
+ makeCommandVoid1 (*this ,&PatternGenerator::setUrdfDirectory,
1308
+ docCommandVoid1 (" Set Urdf directory." ,
1309
+ " string (path name)" )));
1310
+ addCommand (" setUrdf" ,
1311
+ makeCommandVoid1 (*this ,&PatternGenerator::setUrdfMainFile,
1312
+ docCommandVoid1 (" Set Urdf main file." ,
1313
+ " string (file name)" )));
1314
+ addCommand (" addJointMapping" ,
1315
+ makeCommandVoid2 (*this ,&PatternGenerator::addJointMapping,
1316
+ docCommandVoid1 (" Map link names." ,
1317
+ " string (link name)"
1318
+ " string (rep name)" )));
1238
1319
addCommand (" setXmlSpec" ,
1239
1320
makeCommandVoid1 (*this ,&PatternGenerator::setXmlSpecificitiesFile,
1240
1321
docCommandVoid1 (" Set Xml file for specicifities." ,
@@ -1253,6 +1334,10 @@ namespace dynamicgraph {
1253
1334
makeCommandVoid0 (*this ,
1254
1335
(void (PatternGenerator::*) (void ))&PatternGenerator::buildModel,
1255
1336
docCommandVoid0 (" From the files, parse and build." )));
1337
+ addCommand (" buildModelUrdf" ,
1338
+ makeCommandVoid0 (*this ,
1339
+ (void (PatternGenerator::*) (void ))&PatternGenerator::buildModelUrdf,
1340
+ docCommandVoid0 (" From the files, parse and build." )));
1256
1341
addCommand (" initState" ,
1257
1342
makeCommandVoid0 (*this ,
1258
1343
(void (PatternGenerator::*) (void ))&PatternGenerator::InitState,
@@ -1359,6 +1444,16 @@ namespace dynamicgraph {
1359
1444
{ cmdArgs>>filename; setVrmlDirectory ( filename ); }
1360
1445
else if ( cmdLine == " setVrml" )
1361
1446
{ cmdArgs>>filename; setVrmlMainFile ( filename ); }
1447
+ else if ( cmdLine == " setUrdfDir" )
1448
+ { cmdArgs>>filename; setUrdfDirectory ( filename ); }
1449
+ else if ( cmdLine == " setUrdf" )
1450
+ { cmdArgs>>filename; setUrdfMainFile ( filename ); }
1451
+ else if ( cmdLine == " addJointMapping" )
1452
+ {
1453
+ std::string link, repName;
1454
+ cmdArgs>> link >> repName;
1455
+ addJointMapping ( link, repName); }
1456
+
1362
1457
else if ( cmdLine == " setXmlSpec" )
1363
1458
{ cmdArgs>>filename; setXmlSpecificitiesFile ( filename ); }
1364
1459
else if ( cmdLine == " setXmlRank" )
@@ -1370,6 +1465,8 @@ namespace dynamicgraph {
1370
1465
cmdArgs>>filename; setParamPreviewFile ( filename );
1371
1466
cmdArgs>>filename; setVrmlDirectory ( filename );
1372
1467
cmdArgs>>filename; setVrmlMainFile ( filename );
1468
+ cmdArgs>>filename; setUrdfDirectory ( filename );
1469
+ cmdArgs>>filename; setUrdfMainFile ( filename );
1373
1470
cmdArgs>>filename; setXmlSpecificitiesFile ( filename );
1374
1471
cmdArgs>>filename; setXmlRankFile ( filename );
1375
1472
}
@@ -1385,14 +1482,18 @@ namespace dynamicgraph {
1385
1482
else if ( " xmlspecificity" == filetype ) { os << m_xmlSpecificitiesFile << std::endl; }
1386
1483
else if ( " xmlrank" == filetype ) { os << m_xmlRankFile << std::endl; }
1387
1484
else if ( " vrmlmain" == filetype ) { os << m_vrmlMainFile << std::endl; }
1485
+ else if ( " urdfmain" == filetype ) { os << m_urdfMainFile << std::endl; }
1486
+ else if ( " urdfdir" == filetype ) { os << m_urdfDirectory << std::endl; }
1388
1487
else filespecified = false ;
1389
1488
}
1390
1489
if ( ! filespecified )
1391
1490
{
1392
1491
os << " - VRML Directory:\t\t\t " << m_vrmlDirectory <<endl
1393
1492
<< " - XML Specificities File:\t\t " << m_xmlSpecificitiesFile <<endl
1394
1493
<< " - XML Rank File:\t\t\t " << m_xmlRankFile <<endl
1395
- << " - VRML Main File:\t\t\t " << m_vrmlMainFile <<endl;
1494
+ << " - VRML Main File:\t\t\t " << m_vrmlMainFile <<endl
1495
+ << " - Urdf Directory:\t\t\t " << m_urdfDirectory <<endl
1496
+ << " - Urdf Main File:\t\t\t " << m_urdfMainFile <<endl;
1396
1497
}
1397
1498
}
1398
1499
else if ( cmdLine == " buildModel" )
0 commit comments