From 39a3db9c6ac34ecb161f8f656ccae5ce3e4be7cc Mon Sep 17 00:00:00 2001
From: Rohan Budhiraja <budhiraja@laas.fr>
Date: Thu, 28 Jul 2016 15:54:40 +0200
Subject: [PATCH] remove stuff dependent on urdf

---
 include/sot-dynamic/dynamic.h |  1 -
 src/python-module-py.cpp      |  4 ----
 src/sot-dynamic.cpp           | 28 ++++++++++++++++++----------
 unitTesting/kineromeo.py      | 14 +++++++++++++-
 4 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/include/sot-dynamic/dynamic.h b/include/sot-dynamic/dynamic.h
index 20406b1..645575a 100644
--- a/include/sot-dynamic/dynamic.h
+++ b/include/sot-dynamic/dynamic.h
@@ -47,7 +47,6 @@
 /* PINOCCHIO */
 #include <pinocchio/multibody/model.hpp>
 #include <pinocchio/multibody/joint/joint-variant.hpp>
-#include <pinocchio/parsers/urdf.hpp>
 #include <pinocchio/algorithm/rnea.hpp>
 #include <pinocchio/algorithm/jacobian.hpp>
 #include <pinocchio/algorithm/frames.hpp>
diff --git a/src/python-module-py.cpp b/src/python-module-py.cpp
index 9df8e96..a333ca8 100644
--- a/src/python-module-py.cpp
+++ b/src/python-module-py.cpp
@@ -86,10 +86,6 @@ namespace dynamicgraph{
       pointer1 = PyCObject_AsVoidPtr(object);
       Dynamic* dyn_entity = (Dynamic*) pointer1;
 
-      std::string msg("Error in obtaining pinocchio model");
-      PyObject* dgpyError =
-	PyErr_NewException(const_cast<char*>(msg.c_str()), NULL, NULL);
-      
       try {
 	se3::python::ModelHandler cppModelHandle = 
 	  boost::python::extract<se3::python::ModelHandler>(pyPinocchioObject);
diff --git a/src/sot-dynamic.cpp b/src/sot-dynamic.cpp
index 13871e6..69b4ad8 100644
--- a/src/sot-dynamic.cpp
+++ b/src/sot-dynamic.cpp
@@ -286,21 +286,29 @@ dg::Vector Dynamic::getPinocchioPos(int time)
 
   if( freeFlyerPositionSIN) {
     dg::Vector qFF=freeFlyerPositionSIN.access(time);
+
+
     q.resize(qJoints.size() + 7);
-    urdf::Rotation rot;
-    rot.setFromRPY(qFF(3),qFF(4),qFF(5));
-    double x,y,z,w;
-    rot.getQuaternion(x,y,z,w);
-    q << qFF(0),qFF(1),qFF(2),x,y,z,w,qJoints;
+
+    Eigen::Quaternion<double> quat = Eigen::AngleAxisd(qFF(5),Eigen::Vector3d::UnitZ())*
+      Eigen::AngleAxisd(qFF(4),Eigen::Vector3d::UnitY())*
+      Eigen::AngleAxisd(qFF(3),Eigen::Vector3d::UnitX());
+    
+    q << qFF(0),qFF(1),qFF(2),
+      quat.x(),quat.y(),quat.z(),quat.w(),
+      qJoints;
   }
   else if (se3::nv(m_model->joints[1]) == 6){
     dg::Vector qFF = qJoints.head<6>();
-    urdf::Rotation rot;
-    rot.setFromRPY(qFF(3),qFF(4),qFF(5));
-    double x,y,z,w;
-    rot.getQuaternion(x,y,z,w);
     q.resize(qJoints.size()+1);
-    q << qFF(0),qFF(1),qFF(2),x,y,z,w,qJoints.segment(6,qJoints.size()-6);
+
+    Eigen::Quaternion<double> quat = Eigen::AngleAxisd(qFF(5),Eigen::Vector3d::UnitZ())*
+      Eigen::AngleAxisd(qFF(4),Eigen::Vector3d::UnitY())*
+      Eigen::AngleAxisd(qFF(3),Eigen::Vector3d::UnitX());
+    q << qFF(0),qFF(1),qFF(2),
+      quat.x(),quat.y(),quat.z(),quat.w(),
+      qJoints.segment(6,qJoints.size()-6);
+
     assert(q.size() == m_model->nq);
   }
   else {
diff --git a/unitTesting/kineromeo.py b/unitTesting/kineromeo.py
index 9e6304f..e7eac08 100644
--- a/unitTesting/kineromeo.py
+++ b/unitTesting/kineromeo.py
@@ -5,6 +5,7 @@
 #
 # ______________________________________________________________________________
 # ******************************************************************************
+import pinocchio as se3
 from dynamic_graph import plug
 from dynamic_graph.sot.core import *
 from dynamic_graph.sot.dynamics import *
@@ -24,7 +25,7 @@ set_printoptions(suppress=True, precision=7)
 #Define robotName, urdfpath and initialConfig
 
 robotName = 'romeo'
-urdfpath = "/local/rbudhira/git/proyan/sot-pinocchio/unitTesting/romeoNoToes.urdf"
+urdfpath = "romeoNoToes.urdf"
 
 initialConfig = (0, 0, .840252, 0, 0, 0,                                 # FF
                  0,  0,  -0.3490658,  0.6981317,  -0.3490658,   0,       # LLEG
@@ -35,13 +36,24 @@ initialConfig = (0, 0, .840252, 0, 0, 0,                                 # FF
                  1.5, -0.6,   0.5,  1.05, -0.4, -0.3, -0.2,              # RARM
                  )
 
+
+#-----------------------------------------------------------------------------
+#---- PINOCCHIO MODEL AND DATA --------------------------------------------------------------------
+#-----------------------------------------------------------------------------
+pinocchioModel = se3.buildModelFromUrdf(urdfpath,se3.JointModelFreeFlyer())
+pinocchioData = pinocchioModel.createData()
+
 #-----------------------------------------------------------------------------
 #---- DYN --------------------------------------------------------------------
 #-----------------------------------------------------------------------------
 dyn = Dynamic("dyn")
+dyn.setModel(pinocchioModel)
+dyn.setData(pinocchioData)
 
 dyn.displayModel()
 
+
+robotDim = dyn.getDimension()
 inertiaRotor = (0,)*6+(5e-4,)*31
 gearRatio =  (0,)*6+(200,)*31
 dyn.inertiaRotor.value = inertiaRotor
-- 
GitLab