diff --git a/CMakeLists.txt b/CMakeLists.txt index 014301b90cbaedfd83b424632d8f689d0033d1a0..0f1f954826e1e28c068a9483a7819758b0b1ece5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,7 +153,7 @@ SET(${PROJECT_NAME}_MULTIBODY_JOINT_HEADERS multibody/joint/joint-free-flyer.hpp multibody/joint/joint-variant.hpp multibody/joint/joint-generic.hpp - multibody/joint/joint-accessor.hpp + multibody/joint/joint.hpp multibody/joint/joint-basic-visitors.hpp multibody/joint/joint-basic-visitors.hxx ) @@ -168,7 +168,6 @@ SET(${PROJECT_NAME}_MULTIBODY_HEADERS multibody/constraint.hpp multibody/force-set.hpp multibody/frame.hpp - multibody/joint.hpp multibody/model.hpp multibody/model.hxx multibody/visitor.hpp @@ -209,7 +208,7 @@ IF(BUILD_PYTHON_INTERFACE) python/inertia.hpp python/joints-models.hpp python/joints-variant.hpp - python/joint-accessor.hpp + python/joint.hpp python/joint-derived.hpp python/frame.hpp python/model.hpp diff --git a/benchmark/timings-geometry.cpp b/benchmark/timings-geometry.cpp index e2973853105f7afa069b112f48e19b5202e9dfd4..66bc7073e131db99231d8c7dcbf6032b89dc2743 100644 --- a/benchmark/timings-geometry.cpp +++ b/benchmark/timings-geometry.cpp @@ -17,7 +17,6 @@ #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/spatial/se3.hpp" -#include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/visitor.hpp" #include "pinocchio/multibody/model.hpp" #include "pinocchio/algorithm/crba.hpp" diff --git a/benchmark/timings.cpp b/benchmark/timings.cpp index 31835fc452382cb83c052c9aedfa0b1eaa4a9e24..e23c37c6544f500db82ba33ebe65929e1e109fc9 100644 --- a/benchmark/timings.cpp +++ b/benchmark/timings.cpp @@ -17,7 +17,6 @@ #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/spatial/se3.hpp" -#include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/visitor.hpp" #include "pinocchio/multibody/model.hpp" #include "pinocchio/algorithm/crba.hpp" diff --git a/src/algorithm/aba.hxx b/src/algorithm/aba.hxx index 3ef1b88d0b1d19e443011760e238ebf1a3992f76..9ecb9c4c9c4a2130cae4cbaa855adf709300d1dd 100644 --- a/src/algorithm/aba.hxx +++ b/src/algorithm/aba.hxx @@ -36,7 +36,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, @@ -75,7 +75,7 @@ namespace se3 template<typename JointModel> static void algo(const JointModelBase<JointModel> & jmodel, - JointDataBase<typename JointModel::JointData> & jdata, + JointDataBase<typename JointModel::JointDataDerived> & jdata, const Model & model, Data & data) { @@ -171,7 +171,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data) { diff --git a/src/algorithm/center-of-mass.hxx b/src/algorithm/center-of-mass.hxx index 72c6e2a6accb3c52aab79a9f481e4e0a5ef846a4..10571588a4db128cc4a19ca073f170d74be17479 100644 --- a/src/algorithm/center-of-mass.hxx +++ b/src/algorithm/center-of-mass.hxx @@ -208,7 +208,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model& model, se3::Data& data, const bool computeSubtreeComs ) diff --git a/src/algorithm/compute-all-terms.hpp b/src/algorithm/compute-all-terms.hpp index f8da568b078deef5b88998806e0ed1a2b4d33146..ec83b54340c1135cecf1d319831ae5c363e01381 100644 --- a/src/algorithm/compute-all-terms.hpp +++ b/src/algorithm/compute-all-terms.hpp @@ -68,7 +68,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, @@ -128,7 +128,7 @@ namespace se3 template<typename JointModel> static void algo(const JointModelBase<JointModel> & jmodel, - JointDataBase<typename JointModel::JointData> & jdata, + JointDataBase<typename JointModel::JointDataDerived> & jdata, const Model & model, Data & data) { diff --git a/src/algorithm/crba.hxx b/src/algorithm/crba.hxx index 33ac8ebf9e1894e0cb0ef97a04770ff39f772f8e..e92988db59f2dc83abe2f9b0f3e84470cbeae5ab 100644 --- a/src/algorithm/crba.hxx +++ b/src/algorithm/crba.hxx @@ -37,7 +37,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q) @@ -60,7 +60,7 @@ namespace se3 template<typename JointModel> static void algo(const JointModelBase<JointModel> & jmodel, - JointDataBase<typename JointModel::JointData> & jdata, + JointDataBase<typename JointModel::JointDataDerived> & jdata, const Model & model, Data & data) { @@ -128,7 +128,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q) @@ -157,7 +157,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data) { diff --git a/src/algorithm/jacobian.hxx b/src/algorithm/jacobian.hxx index b3a54e8ff51d7084a5610684ee0da89f471732e2..f5fcbf3670bee0e68155323d744877722fe7e158 100644 --- a/src/algorithm/jacobian.hxx +++ b/src/algorithm/jacobian.hxx @@ -35,7 +35,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q) @@ -101,7 +101,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q) diff --git a/src/algorithm/kinematics.hxx b/src/algorithm/kinematics.hxx index d61d1c1123e7ac6c5e0149d20882f654989c3104..eb2446dd07e32b36534a3f4451799904da32c5b5 100644 --- a/src/algorithm/kinematics.hxx +++ b/src/algorithm/kinematics.hxx @@ -33,7 +33,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> &, - se3::JointDataBase<typename JointModel::JointData> &, + se3::JointDataBase<typename JointModel::JointDataDerived> &, const se3::Model &, se3::Data &) { // do nothing @@ -64,7 +64,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q) @@ -111,7 +111,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, @@ -166,7 +166,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, diff --git a/src/algorithm/rnea.hxx b/src/algorithm/rnea.hxx index d0d098aa639b813b3c37402cda3d1a57f67a07f4..fe31feac12f14f1a7cb1e965b10f99840c6d8faa 100644 --- a/src/algorithm/rnea.hxx +++ b/src/algorithm/rnea.hxx @@ -37,7 +37,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, @@ -72,7 +72,7 @@ namespace se3 template<typename JointModel> static void algo(const JointModelBase<JointModel> & jmodel, - JointDataBase<typename JointModel::JointData> & jdata, + JointDataBase<typename JointModel::JointDataDerived> & jdata, const Model & model, Data & data) { @@ -120,7 +120,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const se3::Model & model, se3::Data & data, const Eigen::VectorXd & q, @@ -154,7 +154,7 @@ namespace se3 template<typename JointModel> static void algo(const JointModelBase<JointModel> & jmodel, - JointDataBase<typename JointModel::JointData> & jdata, + JointDataBase<typename JointModel::JointDataDerived> & jdata, const Model & model, Data & data) { diff --git a/src/multibody/joint.hpp b/src/multibody/joint.hpp deleted file mode 100644 index cf8303790c6289b2496d2f2652792a739d8ec392..0000000000000000000000000000000000000000 --- a/src/multibody/joint.hpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2015 CNRS -// -// This file is part of Pinocchio -// Pinocchio is free software: you can redistribute it -// and/or modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation, either version -// 3 of the License, or (at your option) any later version. -// -// Pinocchio is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Lesser Public License for more details. You should have -// received a copy of the GNU Lesser General Public License along with -// Pinocchio If not, see -// <http://www.gnu.org/licenses/>. - -#ifndef __se3_joint_hpp__ -#define __se3_joint_hpp__ - -#include "pinocchio/multibody/joint/joint-base.hpp" -#include "pinocchio/multibody/joint/joint-dense.hpp" -#include "pinocchio/multibody/joint/joint-free-flyer.hpp" -#include "pinocchio/multibody/joint/joint-planar.hpp" -#include "pinocchio/multibody/joint/joint-prismatic.hpp" -#include "pinocchio/multibody/joint/joint-prismatic-unaligned.hpp" -#include "pinocchio/multibody/joint/joint-revolute-unaligned.hpp" -#include "pinocchio/multibody/joint/joint-revolute.hpp" -#include "pinocchio/multibody/joint/joint-spherical-ZYX.hpp" -#include "pinocchio/multibody/joint/joint-spherical.hpp" -#include "pinocchio/multibody/joint/joint-translation.hpp" -// #include "pinocchio/multibody/joint/joint-variant.hpp" - -namespace se3 -{ - enum { MAX_JOINT_NV = 6 }; -} - -#endif // ifndef __se3_joint_hpp__ diff --git a/src/multibody/joint/joint-base.hpp b/src/multibody/joint/joint-base.hpp index ca145109836e5c0a4fe15787919bff476713cecb..9a251fad2c0f3e954f09d9c871bf1cce8bbb557d 100644 --- a/src/multibody/joint/joint-base.hpp +++ b/src/multibody/joint/joint-base.hpp @@ -68,22 +68,22 @@ namespace se3 #define SE3_JOINT_TYPEDEF_ARG(prefix) \ typedef int Index; \ - typedef prefix traits<Joint>::JointData JointData; \ - typedef prefix traits<Joint>::JointModel JointModel; \ - typedef prefix traits<Joint>::Constraint_t Constraint_t; \ - typedef prefix traits<Joint>::Transformation_t Transformation_t; \ - typedef prefix traits<Joint>::Motion_t Motion_t; \ - typedef prefix traits<Joint>::Bias_t Bias_t; \ - typedef prefix traits<Joint>::F_t F_t; \ - typedef prefix traits<Joint>::U_t U_t; \ - typedef prefix traits<Joint>::D_t D_t; \ - typedef prefix traits<Joint>::UD_t UD_t; \ + typedef prefix traits<JointDerived>::JointDataDerived JointDataDerived; \ + typedef prefix traits<JointDerived>::JointModelDerived JointModelDerived; \ + typedef prefix traits<JointDerived>::Constraint_t Constraint_t; \ + typedef prefix traits<JointDerived>::Transformation_t Transformation_t; \ + typedef prefix traits<JointDerived>::Motion_t Motion_t; \ + typedef prefix traits<JointDerived>::Bias_t Bias_t; \ + typedef prefix traits<JointDerived>::F_t F_t; \ + typedef prefix traits<JointDerived>::U_t U_t; \ + typedef prefix traits<JointDerived>::D_t D_t; \ + typedef prefix traits<JointDerived>::UD_t UD_t; \ enum { \ - NQ = traits<Joint>::NQ, \ - NV = traits<Joint>::NV \ + NQ = traits<JointDerived>::NQ, \ + NV = traits<JointDerived>::NV \ }; \ - typedef prefix traits<Joint>::ConfigVector_t ConfigVector_t; \ - typedef prefix traits<Joint>::TangentVector_t TangentVector_t + typedef prefix traits<JointDerived>::ConfigVector_t ConfigVector_t; \ + typedef prefix traits<JointDerived>::TangentVector_t TangentVector_t #define SE3_JOINT_TYPEDEF SE3_JOINT_TYPEDEF_ARG() #define SE3_JOINT_TYPEDEF_TEMPLATE SE3_JOINT_TYPEDEF_ARG(typename) @@ -92,41 +92,41 @@ namespace se3 #define SE3_JOINT_TYPEDEF_NOARG() \ typedef int Index; \ - typedef traits<Joint>::JointData JointData; \ - typedef traits<Joint>::JointModel JointModel; \ - typedef traits<Joint>::Constraint_t Constraint_t; \ - typedef traits<Joint>::Transformation_t Transformation_t; \ - typedef traits<Joint>::Motion_t Motion_t; \ - typedef traits<Joint>::Bias_t Bias_t; \ - typedef traits<Joint>::F_t F_t; \ - typedef traits<Joint>::U_t U_t; \ - typedef traits<Joint>::D_t D_t; \ - typedef traits<Joint>::UD_t UD_t; \ + typedef traits<JointDerived>::JointDataDerived JointDataDerived; \ + typedef traits<JointDerived>::JointModelDerived JointModelDerived; \ + typedef traits<JointDerived>::Constraint_t Constraint_t; \ + typedef traits<JointDerived>::Transformation_t Transformation_t; \ + typedef traits<JointDerived>::Motion_t Motion_t; \ + typedef traits<JointDerived>::Bias_t Bias_t; \ + typedef traits<JointDerived>::F_t F_t; \ + typedef traits<JointDerived>::U_t U_t; \ + typedef traits<JointDerived>::D_t D_t; \ + typedef traits<JointDerived>::UD_t UD_t; \ enum { \ - NQ = traits<Joint>::NQ, \ - NV = traits<Joint>::NV \ + NQ = traits<JointDerived>::NQ, \ + NV = traits<JointDerived>::NV \ }; \ - typedef traits<Joint>::ConfigVector_t ConfigVector_t; \ - typedef traits<Joint>::TangentVector_t TangentVector_t + typedef traits<JointDerived>::ConfigVector_t ConfigVector_t; \ + typedef traits<JointDerived>::TangentVector_t TangentVector_t #define SE3_JOINT_TYPEDEF_ARG(prefix) \ typedef int Index; \ - typedef prefix traits<Joint>::JointData JointData; \ - typedef prefix traits<Joint>::JointModel JointModel; \ - typedef prefix traits<Joint>::Constraint_t Constraint_t; \ - typedef prefix traits<Joint>::Transformation_t Transformation_t; \ - typedef prefix traits<Joint>::Motion_t Motion_t; \ - typedef prefix traits<Joint>::Bias_t Bias_t; \ - typedef prefix traits<Joint>::F_t F_t; \ - typedef prefix traits<Joint>::U_t U_t; \ - typedef prefix traits<Joint>::D_t D_t; \ - typedef prefix traits<Joint>::UD_t UD_t; \ + typedef prefix traits<JointDerived>::JointDataDerived JointDataDerived; \ + typedef prefix traits<JointDerived>::JointModelDerived JointModelDerived; \ + typedef prefix traits<JointDerived>::Constraint_t Constraint_t; \ + typedef prefix traits<JointDerived>::Transformation_t Transformation_t; \ + typedef prefix traits<JointDerived>::Motion_t Motion_t; \ + typedef prefix traits<JointDerived>::Bias_t Bias_t; \ + typedef prefix traits<JointDerived>::F_t F_t; \ + typedef prefix traits<JointDerived>::U_t U_t; \ + typedef prefix traits<JointDerived>::D_t D_t; \ + typedef prefix traits<JointDerived>::UD_t UD_t; \ enum { \ - NQ = traits<Joint>::NQ, \ - NV = traits<Joint>::NV \ + NQ = traits<JointDerived>::NQ, \ + NV = traits<JointDerived>::NV \ }; \ - typedef prefix traits<Joint>::ConfigVector_t ConfigVector_t; \ - typedef prefix traits<Joint>::TangentVector_t TangentVector_t + typedef prefix traits<JointDerived>::ConfigVector_t ConfigVector_t; \ + typedef prefix traits<JointDerived>::TangentVector_t TangentVector_t #define SE3_JOINT_TYPEDEF SE3_JOINT_TYPEDEF_NOARG() #define SE3_JOINT_TYPEDEF_TEMPLATE SE3_JOINT_TYPEDEF_ARG(typename) @@ -135,22 +135,22 @@ namespace se3 #define SE3_JOINT_TYPEDEF_ARG() \ typedef int Index; \ - typedef typename traits<Joint>::JointData JointData; \ - typedef typename traits<Joint>::JointModel JointModel; \ - typedef typename traits<Joint>::Constraint_t Constraint_t; \ - typedef typename traits<Joint>::Transformation_t Transformation_t; \ - typedef typename traits<Joint>::Motion_t Motion_t; \ - typedef typename traits<Joint>::Bias_t Bias_t; \ - typedef typename traits<Joint>::F_t F_t; \ - typedef typename traits<Joint>::U_t U_t; \ - typedef typename traits<Joint>::D_t D_t; \ - typedef typename traits<Joint>::UD_t UD_t; \ + typedef typename traits<JointDerived>::JointDataDerived JointDataDerived; \ + typedef typename traits<JointDerived>::JointModelDerived JointModelDerived; \ + typedef typename traits<JointDerived>::Constraint_t Constraint_t; \ + typedef typename traits<JointDerived>::Transformation_t Transformation_t; \ + typedef typename traits<JointDerived>::Motion_t Motion_t; \ + typedef typename traits<JointDerived>::Bias_t Bias_t; \ + typedef typename traits<JointDerived>::F_t F_t; \ + typedef typename traits<JointDerived>::U_t U_t; \ + typedef typename traits<JointDerived>::D_t D_t; \ + typedef typename traits<JointDerived>::UD_t UD_t; \ enum { \ - NQ = traits<Joint>::NQ, \ - NV = traits<Joint>::NV \ + NQ = traits<JointDerived>::NQ, \ + NV = traits<JointDerived>::NV \ }; \ - typedef typename traits<Joint>::ConfigVector_t ConfigVector_t; \ - typedef typename traits<Joint>::TangentVector_t TangentVector_t + typedef typename traits<JointDerived>::ConfigVector_t ConfigVector_t; \ + typedef typename traits<JointDerived>::TangentVector_t TangentVector_t #define SE3_JOINT_TYPEDEF SE3_JOINT_TYPEDEF_ARG() #define SE3_JOINT_TYPEDEF_TEMPLATE SE3_JOINT_TYPEDEF_ARG() @@ -158,7 +158,7 @@ namespace se3 #endif #define SE3_JOINT_USE_INDEXES \ - typedef JointModelBase<JointModel> Base; \ + typedef JointModelBase<JointModelDerived> Base; \ using Base::idx_q; \ using Base::idx_v @@ -173,25 +173,25 @@ namespace se3 typedef _JointData Derived; typedef JointDataBase<_JointData> Base; - typedef typename traits<_JointData>::Joint Joint; + typedef typename traits<_JointData>::JointDerived JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; - JointData& derived() { return *static_cast<JointData*>(this); } - const JointData& derived() const { return *static_cast<const JointData*>(this); } + JointDataDerived& derived() { return *static_cast<JointDataDerived*>(this); } + const JointDataDerived& derived() const { return *static_cast<const JointDataDerived*>(this); } - const Constraint_t & S() const { return static_cast<const JointData*>(this)->S; } - const Transformation_t & M() const { return static_cast<const JointData*>(this)->M; } - const Motion_t & v() const { return static_cast<const JointData*>(this)->v; } - const Bias_t & c() const { return static_cast<const JointData*>(this)->c; } - F_t & F() { return static_cast< JointData*>(this)->F; } + const Constraint_t & S() const { return static_cast<const JointDataDerived*>(this)->S; } + const Transformation_t & M() const { return static_cast<const JointDataDerived*>(this)->M; } + const Motion_t & v() const { return static_cast<const JointDataDerived*>(this)->v; } + const Bias_t & c() const { return static_cast<const JointDataDerived*>(this)->c; } + F_t & F() { return static_cast< JointDataDerived*>(this)->F; } // [ABA CCRBA] - const U_t & U() const { return static_cast<const JointData*>(this)->U; } - U_t & U() { return static_cast<JointData*>(this)->U; } - const D_t & Dinv() const { return static_cast<const JointData*>(this)->Dinv; } - const UD_t & UDinv() const { return static_cast<const JointData*>(this)->UDinv; } + const U_t & U() const { return static_cast<const JointDataDerived*>(this)->U; } + U_t & U() { return static_cast<JointDataDerived*>(this)->U; } + const D_t & Dinv() const { return static_cast<const JointDataDerived*>(this)->Dinv; } + const UD_t & UDinv() const { return static_cast<const JointDataDerived*>(this)->UDinv; } - JointDataDense<NQ, NV> toDense() const { return static_cast<const JointData*>(this)->toDense_impl(); } + JointDataDense<NQ, NV> toDense() const { return static_cast<const JointDataDerived*>(this)->toDense_impl(); } }; // struct JointDataBase @@ -233,25 +233,25 @@ namespace se3 { typedef _JointModel Derived; typedef JointModelBase<_JointModel> Base; - typedef typename traits<_JointModel>::Joint Joint; + typedef typename traits<_JointModel>::JointDerived JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; - JointModel& derived() { return *static_cast<Derived*>(this); } - const JointModel& derived() const { return *static_cast<const Derived*>(this); } + JointModelDerived& derived() { return *static_cast<Derived*>(this); } + const JointModelDerived& derived() const { return *static_cast<const Derived*>(this); } - JointData createData() const { return derived().createData(); } + JointDataDerived createData() const { return derived().createData(); } - void calc(JointData& data, + void calc(JointDataDerived& data, const Eigen::VectorXd & qs ) const { derived().calc(data,qs); } - void calc(JointData& data, + void calc(JointDataDerived& data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { derived().calc(data,qs,vs); } - void calc_aba(JointData & data, + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I = false) const { derived().calc_aba(data, I, update_I); } diff --git a/src/multibody/joint/joint-basic-visitors.hxx b/src/multibody/joint/joint-basic-visitors.hxx index 27741f1f16d1e173091d07110981807eb5ca15d7..fe490d7cee75df105802fc91359bfa2058654bed 100644 --- a/src/multibody/joint/joint-basic-visitors.hxx +++ b/src/multibody/joint/joint-basic-visitors.hxx @@ -59,7 +59,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const Eigen::VectorXd & q ) { @@ -85,7 +85,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, const Eigen::VectorXd & q, const Eigen::VectorXd & v ) @@ -113,7 +113,7 @@ namespace se3 template<typename JointModel> static void algo(const se3::JointModelBase<JointModel> & jmodel, - se3::JointDataBase<typename JointModel::JointData> & jdata, + se3::JointDataBase<typename JointModel::JointDataDerived> & jdata, Inertia::Matrix6 & I, const bool update_I ) diff --git a/src/multibody/joint/joint-dense.hpp b/src/multibody/joint/joint-dense.hpp index 41a7bee2acc850302f5d7f938b1d1ce9062c9e8d..cc53c0070b672c78f425fa191e9c0f8852af25f2 100644 --- a/src/multibody/joint/joint-dense.hpp +++ b/src/multibody/joint/joint-dense.hpp @@ -30,8 +30,8 @@ namespace se3 NQ = _NQ, // pb NV = _NV }; - typedef JointDataDense<_NQ, _NV> JointData; - typedef JointModelDense<_NQ, _NV> JointModel; + typedef JointDataDense<_NQ, _NV> JointDataDerived; + typedef JointModelDense<_NQ, _NV> JointModelDerived; typedef ConstraintXd Constraint_t; typedef SE3 Transformation_t; typedef Motion Motion_t; @@ -47,13 +47,13 @@ namespace se3 typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<int _NQ, int _NV> struct traits< JointDataDense<_NQ, _NV > > { typedef JointDense<_NQ,_NV > Joint; }; - template<int _NQ, int _NV> struct traits< JointModelDense<_NQ, _NV > > { typedef JointDense<_NQ,_NV > Joint; }; + template<int _NQ, int _NV> struct traits< JointDataDense<_NQ, _NV > > { typedef JointDense<_NQ,_NV > JointDerived; }; + template<int _NQ, int _NV> struct traits< JointModelDense<_NQ, _NV > > { typedef JointDense<_NQ,_NV > JointDerived; }; template <int _NQ, int _NV> struct JointDataDense : public JointDataBase< JointDataDense<_NQ, _NV > > { - typedef JointDense<_NQ, _NV > Joint; + typedef JointDense<_NQ, _NV > JointDerived; typedef JointDataBase< JointDataDense<_NQ,_NV> > Base; typedef JointDataDense<_NQ,_NV> Derived; SE3_JOINT_TYPEDEF_TEMPLATE; @@ -109,7 +109,7 @@ namespace se3 template <int _NQ, int _NV> struct JointModelDense : public JointModelBase< JointModelDense<_NQ, _NV > > { - typedef JointDense<_NQ, _NV > Joint; + typedef JointDense<_NQ, _NV > JointDerived; typedef JointModelBase<JointModelDense<_NQ, _NV > > Base; SE3_JOINT_TYPEDEF_TEMPLATE; @@ -123,25 +123,25 @@ namespace se3 int nv_dyn,nq_dyn; - JointData createData() const + JointDataDerived createData() const { //assert(false && "JointModelDense is read-only, should not createData"); - return JointData(); + return JointDataDerived(); } - void calc(JointData &, + void calc(JointDataDerived &, const Eigen::VectorXd &) const { assert(false && "JointModelDense is read-only, should not perform any calc"); } - void calc(JointData &, + void calc(JointDataDerived &, const Eigen::VectorXd &, const Eigen::VectorXd &) const { assert(false && "JointModelDense is read-only, should not perform any calc"); } - void calc_aba(JointData &, + void calc_aba(JointDataDerived &, Inertia::Matrix6 &, const bool) const { diff --git a/src/multibody/joint/joint-free-flyer.hpp b/src/multibody/joint/joint-free-flyer.hpp index a405f2ffdf91365bd8dbb4234204e28427002bbd..69c4b8d0f2ea804d3ba4d28cddedb4b74112e793 100644 --- a/src/multibody/joint/joint-free-flyer.hpp +++ b/src/multibody/joint/joint-free-flyer.hpp @@ -142,8 +142,8 @@ namespace se3 NQ = 7, NV = 6 }; - typedef JointDataFreeFlyer JointData; - typedef JointModelFreeFlyer JointModel; + typedef JointDataFreeFlyer JointDataDerived; + typedef JointModelFreeFlyer JointModelDerived; typedef ConstraintIdentity Constraint_t; typedef SE3 Transformation_t; typedef Motion Motion_t; @@ -158,12 +158,12 @@ namespace se3 typedef Eigen::Matrix<double,NQ,1> ConfigVector_t; typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<> struct traits<JointDataFreeFlyer> { typedef JointFreeFlyer Joint; }; - template<> struct traits<JointModelFreeFlyer> { typedef JointFreeFlyer Joint; }; + template<> struct traits<JointDataFreeFlyer> { typedef JointFreeFlyer JointDerived; }; + template<> struct traits<JointModelFreeFlyer> { typedef JointFreeFlyer JointDerived; }; struct JointDataFreeFlyer : public JointDataBase<JointDataFreeFlyer> { - typedef JointFreeFlyer Joint; + typedef JointFreeFlyer JointDerived; SE3_JOINT_TYPEDEF; typedef Eigen::Matrix<double,6,6> Matrix6; @@ -192,7 +192,7 @@ namespace se3 struct JointModelFreeFlyer : public JointModelBase<JointModelFreeFlyer> { - typedef JointFreeFlyer Joint; + typedef JointFreeFlyer JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelFreeFlyer>::id; @@ -202,8 +202,8 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } - void calc(JointData & data, + JointDataDerived createData() const { return JointDataDerived(); } + void calc(JointDataDerived & data, const Eigen::VectorXd & qs) const { typedef Eigen::Map<const Motion_t::Quaternion_t> ConstQuaternionMap_t; @@ -215,7 +215,7 @@ namespace se3 data.M.translation (q.head<3>()); } - void calc(JointData & data, + void calc(JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -230,7 +230,7 @@ namespace se3 data.M.translation (q.head<3>()); } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I; data.Dinv = I.inverse(); diff --git a/src/multibody/joint/joint-generic.hpp b/src/multibody/joint/joint-generic.hpp index ea5d647e58e4070e2af90e50a1ba9ca792212218..1278cf05333f2bc33666b5722f8a7a62dfc20668 100644 --- a/src/multibody/joint/joint-generic.hpp +++ b/src/multibody/joint/joint-generic.hpp @@ -44,12 +44,12 @@ namespace se3 NV = -1 }; }; - template<> struct traits<JointDataGeneric> { typedef JointGeneric Joint; }; - template<> struct traits<JointModelGeneric> { typedef JointGeneric Joint; }; + template<> struct traits<JointDataGeneric> { typedef JointGeneric JointDerived; }; + template<> struct traits<JointModelGeneric> { typedef JointGeneric JointDerived; }; struct JointDataGeneric : public JointDataBase<JointDataGeneric> { - typedef JointGeneric Joint; + typedef JointGeneric JointDerived; SE3_JOINT_TYPEDEF; Constraint_t S; @@ -63,7 +63,7 @@ namespace se3 struct JointModelGeneric : public JointModelBase<JointModelGeneric> { - typedef JointGeneric Joint; + typedef JointGeneric JointDerived; SE3_JOINT_TYPEDEF; SE3_JOINT_USE_INDEXES; diff --git a/src/multibody/joint/joint-planar.hpp b/src/multibody/joint/joint-planar.hpp index 9b7667750d30f018ec2b5b3fc78919ade967e378..a7835c05d33aee34504fde485e8331f4d1ad8974 100644 --- a/src/multibody/joint/joint-planar.hpp +++ b/src/multibody/joint/joint-planar.hpp @@ -273,8 +273,8 @@ namespace se3 NQ = 3, NV = 3 }; - typedef JointDataPlanar JointData; - typedef JointModelPlanar JointModel; + typedef JointDataPlanar JointDataDerived; + typedef JointModelPlanar JointModelDerived; typedef ConstraintPlanar Constraint_t; typedef SE3 Transformation_t; typedef MotionPlanar Motion_t; @@ -289,12 +289,12 @@ namespace se3 typedef Eigen::Matrix<double,NQ,1> ConfigVector_t; typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<> struct traits<JointDataPlanar> { typedef JointPlanar Joint; }; - template<> struct traits<JointModelPlanar> { typedef JointPlanar Joint; }; + template<> struct traits<JointDataPlanar> { typedef JointPlanar JointDerived; }; + template<> struct traits<JointModelPlanar> { typedef JointPlanar JointDerived; }; struct JointDataPlanar : public JointDataBase<JointDataPlanar> { - typedef JointPlanar Joint; + typedef JointPlanar JointDerived; SE3_JOINT_TYPEDEF; Constraint_t S; @@ -319,7 +319,7 @@ namespace se3 struct JointModelPlanar : public JointModelBase<JointModelPlanar> { - typedef JointPlanar Joint; + typedef JointPlanar JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelPlanar>::id; @@ -327,9 +327,9 @@ namespace se3 using JointModelBase<JointModelPlanar>::idx_v; using JointModelBase<JointModelPlanar>::setIndexes; - JointData createData() const { return JointData(); } + JointDataDerived createData() const { return JointDataDerived(); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs) const { Eigen::VectorXd::ConstFixedSegmentReturnType<NQ>::Type & q = qs.segment<NQ>(idx_q ()); @@ -341,7 +341,7 @@ namespace se3 } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -358,7 +358,7 @@ namespace se3 data.v.theta_dot_ = q_dot(2); } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U.leftCols<2> () = I.leftCols<2> (); data.U.rightCols<1> () = I.rightCols<1> (); diff --git a/src/multibody/joint/joint-prismatic-unaligned.hpp b/src/multibody/joint/joint-prismatic-unaligned.hpp index af68a5f533146cac30ef17418e7f3c89a9f68950..45f7cb5c9c559ce2cf8cf0a63f76d382185ed84f 100644 --- a/src/multibody/joint/joint-prismatic-unaligned.hpp +++ b/src/multibody/joint/joint-prismatic-unaligned.hpp @@ -252,8 +252,8 @@ namespace se3 NQ = 1, NV = 1 }; - typedef JointDataPrismaticUnaligned JointData; - typedef JointModelPrismaticUnaligned JointModel; + typedef JointDataPrismaticUnaligned JointDataDerived; + typedef JointModelPrismaticUnaligned JointModelDerived; typedef ConstraintPrismaticUnaligned Constraint_t; typedef SE3 Transformation_t; typedef MotionPrismaticUnaligned Motion_t; @@ -269,12 +269,12 @@ namespace se3 typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<> struct traits<JointDataPrismaticUnaligned> { typedef JointPrismaticUnaligned Joint; }; - template<> struct traits<JointModelPrismaticUnaligned> { typedef JointPrismaticUnaligned Joint; }; + template<> struct traits<JointDataPrismaticUnaligned> { typedef JointPrismaticUnaligned JointDerived; }; + template<> struct traits<JointModelPrismaticUnaligned> { typedef JointPrismaticUnaligned JointDerived; }; struct JointDataPrismaticUnaligned : public JointDataBase <JointDataPrismaticUnaligned> { - typedef JointPrismaticUnaligned Joint; + typedef JointPrismaticUnaligned JointDerived; SE3_JOINT_TYPEDEF; Transformation_t M; @@ -311,7 +311,7 @@ namespace se3 struct JointModelPrismaticUnaligned : public JointModelBase <JointModelPrismaticUnaligned> { - typedef JointPrismaticUnaligned Joint; + typedef JointPrismaticUnaligned JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelPrismaticUnaligned>::id; @@ -334,9 +334,9 @@ namespace se3 assert(axis.isUnitary() && "Translation axis is not unitary"); } - JointData createData() const { return JointData(axis); } + JointDataDerived createData() const { return JointDataDerived(axis); } - void calc(JointData & data, const Eigen::VectorXd & qs) const + void calc(JointDataDerived & data, const Eigen::VectorXd & qs) const { const double & q = qs[idx_q()]; @@ -346,7 +346,7 @@ namespace se3 data.M.translation() = data.S.axis * q; } - void calc(JointData & data, + void calc(JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs) const { @@ -360,7 +360,7 @@ namespace se3 data.v.v = v; } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.block<6,3> (0,Inertia::LINEAR) * data.S.axis; data.Dinv[0] = 1./data.S.axis.dot(data.U.segment <3> (Inertia::LINEAR)); diff --git a/src/multibody/joint/joint-prismatic.hpp b/src/multibody/joint/joint-prismatic.hpp index 4f85a698b7810911feafe76343ed426774446fb8..f6e1ee47eb9caa64a01f6c2202919ef5ced7c39d 100644 --- a/src/multibody/joint/joint-prismatic.hpp +++ b/src/multibody/joint/joint-prismatic.hpp @@ -337,8 +337,8 @@ namespace se3 NQ = 1, NV = 1 }; - typedef JointDataPrismatic<axis> JointData; - typedef JointModelPrismatic<axis> JointModel; + typedef JointDataPrismatic<axis> JointDataDerived; + typedef JointModelPrismatic<axis> JointModelDerived; typedef ConstraintPrismatic<axis> Constraint_t; typedef SE3 Transformation_t; typedef MotionPrismatic<axis> Motion_t; @@ -354,13 +354,13 @@ namespace se3 typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<int axis> struct traits< JointDataPrismatic<axis> > { typedef JointPrismatic<axis> Joint; }; - template<int axis> struct traits< JointModelPrismatic<axis> > { typedef JointPrismatic<axis> Joint; }; + template<int axis> struct traits< JointDataPrismatic<axis> > { typedef JointPrismatic<axis> JointDerived; }; + template<int axis> struct traits< JointModelPrismatic<axis> > { typedef JointPrismatic<axis> JointDerived; }; template<int axis> struct JointDataPrismatic : public JointDataBase< JointDataPrismatic<axis> > { - typedef JointPrismatic<axis> Joint; + typedef JointPrismatic<axis> JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; Constraint_t S; @@ -388,7 +388,7 @@ namespace se3 template<int axis> struct JointModelPrismatic : public JointModelBase< JointModelPrismatic<axis> > { - typedef JointPrismatic<axis> Joint; + typedef JointPrismatic<axis> JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; using JointModelBase<JointModelPrismatic>::id; @@ -398,15 +398,15 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } - void calc( JointData& data, + JointDataDerived createData() const { return JointDataDerived(); } + void calc( JointDataDerived& data, const Eigen::VectorXd & qs ) const { const double & q = qs[idx_q()]; data.M.translation(JointPrismatic<axis>::cartesianTranslation(q)); } - void calc( JointData& data, + void calc( JointDataDerived& data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -417,7 +417,7 @@ namespace se3 data.v.v = v; } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.col(Inertia::LINEAR + axis); data.Dinv[0] = 1./I(Inertia::LINEAR + axis, Inertia::LINEAR + axis); diff --git a/src/multibody/joint/joint-revolute-unaligned.hpp b/src/multibody/joint/joint-revolute-unaligned.hpp index 747a55dd04addd7a5492cfb3930d67e595b3dcb9..808323bade45ad98fd3e410f7cefa020d0ca2a3d 100644 --- a/src/multibody/joint/joint-revolute-unaligned.hpp +++ b/src/multibody/joint/joint-revolute-unaligned.hpp @@ -257,8 +257,8 @@ namespace se3 NV = 1 }; - typedef JointDataRevoluteUnaligned JointData; - typedef JointModelRevoluteUnaligned JointModel; + typedef JointDataRevoluteUnaligned JointDataDerived; + typedef JointModelRevoluteUnaligned JointModelDerived; typedef ConstraintRevoluteUnaligned Constraint_t; typedef SE3 Transformation_t; typedef MotionRevoluteUnaligned Motion_t; @@ -275,12 +275,12 @@ namespace se3 }; - template<> struct traits<JointDataRevoluteUnaligned> { typedef JointRevoluteUnaligned Joint; }; - template<> struct traits<JointModelRevoluteUnaligned> { typedef JointRevoluteUnaligned Joint; }; + template<> struct traits<JointDataRevoluteUnaligned> { typedef JointRevoluteUnaligned JointDerived; }; + template<> struct traits<JointModelRevoluteUnaligned> { typedef JointRevoluteUnaligned JointDerived; }; struct JointDataRevoluteUnaligned : public JointDataBase< JointDataRevoluteUnaligned > { - typedef JointRevoluteUnaligned Joint; + typedef JointRevoluteUnaligned JointDerived; SE3_JOINT_TYPEDEF; Transformation_t M; @@ -316,7 +316,7 @@ namespace se3 struct JointModelRevoluteUnaligned : public JointModelBase< JointModelRevoluteUnaligned > { - typedef JointRevoluteUnaligned Joint; + typedef JointRevoluteUnaligned JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelRevoluteUnaligned>::id; @@ -338,8 +338,8 @@ namespace se3 assert(axis.isUnitary() && "Rotation axis is not unitary"); } - JointData createData() const { return JointData(axis); } - void calc( JointData& data, + JointDataDerived createData() const { return JointDataDerived(axis); } + void calc( JointDataDerived& data, const Eigen::VectorXd & qs ) const { const double & q = qs[idx_q()]; @@ -351,7 +351,7 @@ namespace se3 data.M.rotation(data.angleaxis.toRotationMatrix()); } - void calc( JointData& data, + void calc( JointDataDerived& data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -366,7 +366,7 @@ namespace se3 data.v.w = v; } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.block<6,3> (0,Inertia::ANGULAR) * data.angleaxis.axis(); data.Dinv[0] = 1./data.angleaxis.axis().dot(data.U.segment <3> (Inertia::ANGULAR)); diff --git a/src/multibody/joint/joint-revolute.hpp b/src/multibody/joint/joint-revolute.hpp index 8fae95fced4e922d5838a6aeb71f0d36163670f7..52a216e68b627093ed2132a542a13ccd4c8b85b8 100644 --- a/src/multibody/joint/joint-revolute.hpp +++ b/src/multibody/joint/joint-revolute.hpp @@ -373,8 +373,8 @@ namespace se3 NV = 1 }; - typedef JointDataRevolute<axis> JointData; - typedef JointModelRevolute<axis> JointModel; + typedef JointDataRevolute<axis> JointDataDerived; + typedef JointModelRevolute<axis> JointModelDerived; typedef ConstraintRevolute<axis> Constraint_t; typedef SE3 Transformation_t; typedef MotionRevolute<axis> Motion_t; @@ -390,13 +390,13 @@ namespace se3 typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<int axis> struct traits< JointDataRevolute<axis> > { typedef JointRevolute<axis> Joint; }; - template<int axis> struct traits< JointModelRevolute<axis> > { typedef JointRevolute<axis> Joint; }; + template<int axis> struct traits< JointDataRevolute<axis> > { typedef JointRevolute<axis> JointDerived; }; + template<int axis> struct traits< JointModelRevolute<axis> > { typedef JointRevolute<axis> JointDerived; }; template<int axis> struct JointDataRevolute : public JointDataBase< JointDataRevolute<axis> > { - typedef JointRevolute<axis> Joint; + typedef JointRevolute<axis> JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; Constraint_t S; @@ -422,7 +422,7 @@ namespace se3 template<int axis> struct JointModelRevolute : public JointModelBase< JointModelRevolute<axis> > { - typedef JointRevolute<axis> Joint; + typedef JointRevolute<axis> JointDerived; SE3_JOINT_TYPEDEF_TEMPLATE; using JointModelBase<JointModelRevolute>::id; @@ -432,15 +432,15 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } - void calc( JointData& data, + JointDataDerived createData() const { return JointDataDerived(); } + void calc( JointDataDerived& data, const Eigen::VectorXd & qs ) const { const double & q = qs[idx_q()]; data.M.rotation(JointRevolute<axis>::cartesianRotation(q)); } - void calc( JointData& data, + void calc( JointDataDerived& data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -451,7 +451,7 @@ namespace se3 data.v.w = v; } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.col(Inertia::ANGULAR + axis); data.Dinv[0] = 1./I(Inertia::ANGULAR + axis,Inertia::ANGULAR + axis); diff --git a/src/multibody/joint/joint-spherical-ZYX.hpp b/src/multibody/joint/joint-spherical-ZYX.hpp index 46fc7eb313c6504078216b01f80c8fbe103e3a1d..e57ca6db051ad13e9c6036beaebba36abccbce68 100644 --- a/src/multibody/joint/joint-spherical-ZYX.hpp +++ b/src/multibody/joint/joint-spherical-ZYX.hpp @@ -269,8 +269,8 @@ namespace se3 NQ = 3, NV = 3 }; - typedef JointDataSphericalZYX JointData; - typedef JointModelSphericalZYX JointModel; + typedef JointDataSphericalZYX JointDataDerived; + typedef JointModelSphericalZYX JointModelDerived; typedef JointSphericalZYX::ConstraintRotationalSubspace Constraint_t; typedef SE3 Transformation_t; typedef JointSphericalZYX::MotionSpherical Motion_t; @@ -285,12 +285,12 @@ namespace se3 typedef Eigen::Matrix<double,NQ,1> ConfigVector_t; typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<> struct traits<JointDataSphericalZYX> { typedef JointSphericalZYX Joint; }; - template<> struct traits<JointModelSphericalZYX> { typedef JointSphericalZYX Joint; }; + template<> struct traits<JointDataSphericalZYX> { typedef JointSphericalZYX JointDerived; }; + template<> struct traits<JointModelSphericalZYX> { typedef JointSphericalZYX JointDerived; }; struct JointDataSphericalZYX : public JointDataBase<JointDataSphericalZYX> { - typedef JointSphericalZYX Joint; + typedef JointSphericalZYX JointDerived; SE3_JOINT_TYPEDEF; typedef Motion::Scalar_t Scalar; @@ -321,7 +321,7 @@ namespace se3 struct JointModelSphericalZYX : public JointModelBase<JointModelSphericalZYX> { - typedef JointSphericalZYX Joint; + typedef JointSphericalZYX JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelSphericalZYX>::id; @@ -331,9 +331,9 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } + JointDataDerived createData() const { return JointDataDerived(); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs) const { Eigen::VectorXd::ConstFixedSegmentReturnType<NQ>::Type & q = qs.segment<NQ>(idx_q ()); @@ -355,7 +355,7 @@ namespace se3 data.S.matrix () << -s1, 0., 1., c1 * s2, c2, 0, c1 * c2, -s2, 0; } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -386,7 +386,7 @@ namespace se3 data.c ()(2) = -s1 * c2 * q_dot (0) * q_dot (1) - c1 * s2 * q_dot (0) * q_dot (2) - c2 * q_dot (1) * q_dot (2); } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.middleCols<3> (Inertia::ANGULAR) * data.S.matrix(); Inertia::Matrix3 tmp (data.S.matrix().transpose() * data.U.middleRows<3> (Inertia::ANGULAR)); diff --git a/src/multibody/joint/joint-spherical.hpp b/src/multibody/joint/joint-spherical.hpp index 8fa9d98446970efefb050f126348041bc0ea2004..c3acc3fad6dcb30d4a29075057410d70a495d873 100644 --- a/src/multibody/joint/joint-spherical.hpp +++ b/src/multibody/joint/joint-spherical.hpp @@ -205,8 +205,8 @@ namespace se3 NQ = 4, NV = 3 }; - typedef JointDataSpherical JointData; - typedef JointModelSpherical JointModel; + typedef JointDataSpherical JointDataDerived; + typedef JointModelSpherical JointModelDerived; typedef ConstraintRotationalSubspace Constraint_t; typedef SE3 Transformation_t; typedef MotionSpherical Motion_t; @@ -221,12 +221,12 @@ namespace se3 typedef Eigen::Matrix<double,NQ,1> ConfigVector_t; typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; - template<> struct traits<JointDataSpherical> { typedef JointSpherical Joint; }; - template<> struct traits<JointModelSpherical> { typedef JointSpherical Joint; }; + template<> struct traits<JointDataSpherical> { typedef JointSpherical JointDerived; }; + template<> struct traits<JointModelSpherical> { typedef JointSpherical JointDerived; }; struct JointDataSpherical : public JointDataBase<JointDataSpherical> { - typedef JointSpherical Joint; + typedef JointSpherical JointDerived; SE3_JOINT_TYPEDEF; typedef Eigen::Matrix<double,6,6> Matrix6; @@ -255,7 +255,7 @@ namespace se3 struct JointModelSpherical : public JointModelBase<JointModelSpherical> { - typedef JointSpherical Joint; + typedef JointSpherical JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelSpherical>::id; @@ -265,9 +265,9 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } + JointDataDerived createData() const { return JointDataDerived(); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs) const { typedef Eigen::Map<const Motion_t::Quaternion_t> ConstQuaternionMap_t; @@ -278,7 +278,7 @@ namespace se3 data.M.rotation (quat.matrix()); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -291,7 +291,7 @@ namespace se3 data.M.rotation (quat.matrix ()); } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.block<6,3> (0,Inertia::ANGULAR); data.Dinv = I.block<3,3> (Inertia::ANGULAR,Inertia::ANGULAR).inverse(); diff --git a/src/multibody/joint/joint-translation.hpp b/src/multibody/joint/joint-translation.hpp index 0d2f1f6416d233bce2a974404bbc1071be277c8a..61f0292a2bfb4a9286409c2246fe0077b3fd981a 100644 --- a/src/multibody/joint/joint-translation.hpp +++ b/src/multibody/joint/joint-translation.hpp @@ -219,8 +219,8 @@ namespace se3 NQ = 3, NV = 3 }; - typedef JointDataTranslation JointData; - typedef JointModelTranslation JointModel; + typedef JointDataTranslation JointDataDerived; + typedef JointModelTranslation JointModelDerived; typedef ConstraintTranslationSubspace Constraint_t; typedef SE3 Transformation_t; typedef MotionTranslation Motion_t; @@ -236,12 +236,12 @@ namespace se3 typedef Eigen::Matrix<double,NV,1> TangentVector_t; }; // traits JointTranslation - template<> struct traits<JointDataTranslation> { typedef JointTranslation Joint; }; - template<> struct traits<JointModelTranslation> { typedef JointTranslation Joint; }; + template<> struct traits<JointDataTranslation> { typedef JointTranslation JointDerived; }; + template<> struct traits<JointModelTranslation> { typedef JointTranslation JointDerived; }; struct JointDataTranslation : public JointDataBase<JointDataTranslation> { - typedef JointTranslation Joint; + typedef JointTranslation JointDerived; SE3_JOINT_TYPEDEF; typedef Eigen::Matrix<double,6,6> Matrix6; @@ -270,7 +270,7 @@ namespace se3 struct JointModelTranslation : public JointModelBase<JointModelTranslation> { - typedef JointTranslation Joint; + typedef JointTranslation JointDerived; SE3_JOINT_TYPEDEF; using JointModelBase<JointModelTranslation>::id; @@ -280,14 +280,14 @@ namespace se3 typedef Motion::Vector3 Vector3; typedef double Scalar_t; - JointData createData() const { return JointData(); } + JointDataDerived createData() const { return JointDataDerived(); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs) const { data.M.translation (qs.segment<NQ>(idx_q ())); } - void calc (JointData & data, + void calc (JointDataDerived & data, const Eigen::VectorXd & qs, const Eigen::VectorXd & vs ) const { @@ -295,7 +295,7 @@ namespace se3 data.v () = vs.segment<NQ> (idx_v ()); } - void calc_aba(JointData & data, Inertia::Matrix6 & I, const bool update_I) const + void calc_aba(JointDataDerived & data, Inertia::Matrix6 & I, const bool update_I) const { data.U = I.block<6,3> (0,Inertia::LINEAR); data.Dinv = I.block<3,3> (Inertia::LINEAR,Inertia::LINEAR).inverse(); diff --git a/src/multibody/joint/joint-variant.hpp b/src/multibody/joint/joint-variant.hpp index 9b0c22cb50804c38fe0c9401857b7d16e1507980..fc6b303e0f0f143bd34cac51899f724cbbabbf07 100644 --- a/src/multibody/joint/joint-variant.hpp +++ b/src/multibody/joint/joint-variant.hpp @@ -18,17 +18,30 @@ #ifndef __se3_joint_variant_hpp__ #define __se3_joint_variant_hpp__ -#include "pinocchio/multibody/joint.hpp" +#include "pinocchio/multibody/joint/joint-base.hpp" +#include "pinocchio/multibody/joint/joint-dense.hpp" +#include "pinocchio/multibody/joint/joint-free-flyer.hpp" +#include "pinocchio/multibody/joint/joint-planar.hpp" +#include "pinocchio/multibody/joint/joint-prismatic.hpp" +#include "pinocchio/multibody/joint/joint-prismatic-unaligned.hpp" +#include "pinocchio/multibody/joint/joint-revolute-unaligned.hpp" +#include "pinocchio/multibody/joint/joint-revolute.hpp" +#include "pinocchio/multibody/joint/joint-spherical-ZYX.hpp" +#include "pinocchio/multibody/joint/joint-spherical.hpp" +#include "pinocchio/multibody/joint/joint-translation.hpp" + #include <Eigen/StdVector> #include <boost/variant.hpp> namespace se3 { + enum { MAX_JOINT_NV = 6 }; + typedef boost::variant< JointModelRX, JointModelRY, JointModelRZ, JointModelRevoluteUnaligned, JointModelSpherical, JointModelSphericalZYX, JointModelPX, JointModelPY, JointModelPZ, JointModelPrismaticUnaligned, JointModelFreeFlyer, JointModelPlanar, JointModelTranslation, JointModelDense<-1,-1> > JointModelVariant; typedef boost::variant< JointDataRX, JointDataRY, JointDataRZ, JointDataRevoluteUnaligned, JointDataSpherical, JointDataSphericalZYX, JointDataPX, JointDataPY, JointDataPZ, JointDataPrismaticUnaligned, JointDataFreeFlyer, JointDataPlanar, JointDataTranslation, JointDataDense<-1,-1> > JointDataVariant; - typedef std::vector<JointModelVariant> JointModelVector; - typedef std::vector<JointDataVariant> JointDataVector; + typedef std::vector<JointModelVariant> JointModelVariantVector; + typedef std::vector<JointDataVariant> JointDataVariantVector; } // namespace se3 diff --git a/src/multibody/joint/joint-accessor.hpp b/src/multibody/joint/joint.hpp similarity index 77% rename from src/multibody/joint/joint-accessor.hpp rename to src/multibody/joint/joint.hpp index ebde21386fbaa29577d7a8c9f120aee589b2d933..43a49eedd3f6acd419c59fbe71e2c7497cdaf439 100644 --- a/src/multibody/joint/joint-accessor.hpp +++ b/src/multibody/joint/joint.hpp @@ -15,8 +15,8 @@ // Pinocchio If not, see // <http://www.gnu.org/licenses/>. -#ifndef __se3_joint_accessor_hpp__ -#define __se3_joint_accessor_hpp__ +#ifndef __se3_joint_model_hpp__ +#define __se3_joint_model_hpp__ #include "pinocchio/assert.hpp" #include "pinocchio/multibody/joint/joint-variant.hpp" @@ -25,20 +25,20 @@ namespace se3 { - struct JointAccessor; - struct JointModelAccessor; - struct JointDataAccessor; + struct Joint; + struct JointModel; + struct JointData; template<> - struct traits<JointAccessor> + struct traits<Joint> { enum { NQ = -1, // Dynamic because unknown at compilation NV = -1 }; - typedef JointDataAccessor JointData; - typedef JointModelAccessor JointModel; + typedef JointData JointDataDerived; + typedef JointModel JointModelDerived; typedef ConstraintXd Constraint_t; typedef SE3 Transformation_t; typedef Motion Motion_t; @@ -53,14 +53,14 @@ namespace se3 typedef Eigen::Matrix<double,Eigen::Dynamic,1> ConfigVector_t; typedef Eigen::Matrix<double,Eigen::Dynamic,1> TangentVector_t; }; - template<> struct traits<JointDataAccessor> { typedef JointAccessor Joint; }; - template<> struct traits<JointModelAccessor> { typedef JointAccessor Joint; }; + template<> struct traits<JointData> { typedef Joint JointDerived; }; + template<> struct traits<JointModel> { typedef Joint JointDerived; }; - struct JointDataAccessor : public JointDataBase<JointDataAccessor> , JointDataVariant + struct JointData : public JointDataBase<JointData> , JointDataVariant { typedef JointDataVariant JointDataBoostVariant; - typedef JointAccessor Joint; + typedef Joint JointDerived; SE3_JOINT_TYPEDEF; JointDataVariant& toVariant() { return *static_cast<JointDataVariant*>(this); } @@ -78,20 +78,20 @@ namespace se3 const UD_t UDinv() const { return udinv_inertia(*this); } - JointDataAccessor() : JointDataBoostVariant() {} - JointDataAccessor(const JointDataVariant & jdata ) : JointDataBoostVariant(jdata){} + JointData() : JointDataBoostVariant() {} + JointData(const JointDataVariant & jdata ) : JointDataBoostVariant(jdata){} }; - struct JointModelAccessor : public JointModelBase<JointModelAccessor> , JointModelVariant + struct JointModel : public JointModelBase<JointModel> , JointModelVariant { typedef JointModelVariant JointModelBoostVariant; - typedef JointAccessor Joint; + typedef Joint JointDerived; SE3_JOINT_TYPEDEF; SE3_JOINT_USE_INDEXES; - using JointModelBase<JointModelAccessor>::id; - using JointModelBase<JointModelAccessor>::setIndexes; + using JointModelBase<JointModel>::id; + using JointModelBase<JointModel>::setIndexes; JointModelVariant& toVariant() { return *static_cast<JointModelVariant*>(this); } const JointModelVariant& toVariant() const { return *static_cast<const JointModelVariant*>(this); } @@ -146,18 +146,18 @@ namespace se3 return ::se3::distance(*this, q0, q1); } - JointModelAccessor() : JointModelBoostVariant() {} - JointModelAccessor( const JointModelVariant & model_variant ) : JointModelBoostVariant(model_variant) + JointModel() : JointModelBoostVariant() {} + JointModel( const JointModelVariant & model_variant ) : JointModelBoostVariant(model_variant) {} - JointModelAccessor& operator=( const JointModelAccessor& other) + JointModel& operator=( const JointModel& other) { *this = other; return *this; } - JointModelAccessor& operator=( const JointModelVariant& other) + JointModel& operator=( const JointModelVariant& other) { *this = other; return *this; @@ -169,7 +169,7 @@ namespace se3 return false; } - bool operator == (const JointModelBase<JointModelAccessor> & jmodel) const + bool operator == (const JointModelBase<JointModel> & jmodel) const { return jmodel.id() == id() && jmodel.idx_q() == idx_q() @@ -192,10 +192,10 @@ namespace se3 } }; - typedef std::vector<JointDataAccessor> JointDataAccessorVector; - typedef std::vector<JointModelAccessor> JointModelAccessorVector; + typedef std::vector<JointData> JointDataVector; + typedef std::vector<JointModel> JointModelVector; } // namespace se3 -#endif // ifndef __se3_joint_accessor_hpp__ +#endif // ifndef __se3_joint_model_hpp__ diff --git a/src/multibody/model.hpp b/src/multibody/model.hpp index 31c0d630b20e454b8e969f77c9f5a4534a6f0d7e..a1ef547b4201722f367705aa2890058bf52ce255 100644 --- a/src/multibody/model.hpp +++ b/src/multibody/model.hpp @@ -26,7 +26,7 @@ #include "pinocchio/spatial/inertia.hpp" #include "pinocchio/multibody/fwd.hpp" #include "pinocchio/multibody/frame.hpp" -#include "pinocchio/multibody/joint/joint-accessor.hpp" +#include "pinocchio/multibody/joint/joint.hpp" #include "pinocchio/tools/string-generator.hpp" #include <iostream> #include <Eigen/Cholesky> @@ -75,7 +75,7 @@ namespace se3 std::vector<SE3> jointPlacements; /// \brief Model of joint <i>, encapsulated in a JointModelAccessor. - JointModelAccessorVector joints; + JointModelVector joints; /// \brief Joint parent of joint <i>, denoted <li> (li==parents[i]). std::vector<JointIndex> parents; @@ -393,7 +393,7 @@ namespace se3 const Model & model; /// \brief Vector of se3::JointData associated to the se3::JointModel stored in model, encapsulated in JointDataAccessor. - JointDataAccessorVector joints; + JointDataVector joints; /// \brief Vector of joint accelerations. std::vector<Motion> a; diff --git a/src/multibody/model.hxx b/src/multibody/model.hxx index 1373073d09d176e043ec58001eed8191cc460595..93510925818dc384d524fa56c18f097287c2951b 100644 --- a/src/multibody/model.hxx +++ b/src/multibody/model.hxx @@ -83,7 +83,7 @@ namespace se3 Model::JointIndex idx = (Model::JointIndex) (njoint ++); - joints .push_back(JointModelAccessor(j.derived())); + joints .push_back(JointModel(j.derived())); boost::get<D>(joints.back()).setIndexes(idx,nq,nv); inertias .push_back(Inertia::Zero()); @@ -115,7 +115,7 @@ namespace se3 Model::JointIndex idx = (Model::JointIndex) (njoint ++); - joints .push_back(JointModelAccessor(j.derived())); + joints .push_back(JointModel(j.derived())); boost::get<D>(joints.back()).setIndexes(idx,nq,nv); inertias .push_back(Inertia::Zero()); diff --git a/src/multibody/visitor.hpp b/src/multibody/visitor.hpp index c7b14f23f0e45459d762da2dd77fe79b37895aae..fb768442d7f2c3c932541fbd2465a8d34f2a0a9a 100644 --- a/src/multibody/visitor.hpp +++ b/src/multibody/visitor.hpp @@ -54,7 +54,7 @@ namespace se3 bf::invoke(&Visitor::template algo<D>, bf::append2(jmodel, - boost::ref(boost::get<typename D::JointData>(jdataSpec)), + boost::ref(boost::get<typename D::JointDataDerived>(jdataSpec)), static_cast<const Visitor*>(this)->args)); } diff --git a/src/python/joint-accessor.hpp b/src/python/joint-accessor.hpp deleted file mode 100644 index 19b2bd9875d5fd0347049b986d961a0719475a45..0000000000000000000000000000000000000000 --- a/src/python/joint-accessor.hpp +++ /dev/null @@ -1,102 +0,0 @@ -// -// Copyright (c) 2015 CNRS -// -// This file is part of Pinocchio -// Pinocchio is free software: you can redistribute it -// and/or modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation, either version -// 3 of the License, or (at your option) any later version. -// -// Pinocchio is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Lesser Public License for more details. You should have -// received a copy of the GNU Lesser General Public License along with -// Pinocchio If not, see -// <http://www.gnu.org/licenses/>. - -#ifndef __se3_python_joint_accessor_hpp__ -#define __se3_python_joint_accessor_hpp__ - -#include <eigenpy/exception.hpp> -#include <eigenpy/eigenpy.hpp> -#include "pinocchio/multibody/joint/joint-accessor.hpp" - - -// namespace eigenpy -// { -// template<> -// struct UnalignedEquivalentTypes<se3::JointModelAccessor> -// { -// typedef Eigen::Matrix<double, -1, 1, Eigen::DontAlign> MatrixNQd_fx; -// typedef Eigen::Matrix<double, -1, 1, Eigen::DontAlign> MatrixNVd_fx; -// }; -// } // namespace eigenpy - -namespace se3 -{ - namespace python - { - namespace bp = boost::python; - - struct JointModelAccessorPythonVisitor - : public boost::python::def_visitor< JointModelAccessorPythonVisitor > - { - // typedef eigenpy::UnalignedEquivalentTypes<JointModelAccessor>::MatrixNQd_fx MatrixNQd_fx; - // typedef eigenpy::UnalignedEquivalentTypes<JointModelAccessor>::MatrixNVd_fx MatrixNVd_fx; - - public: - - static PyObject* convert(JointModelAccessor const& jm) - { - return boost::python::incref(boost::python::object(jm).ptr()); - } - - template<class PyClass> - void visit(PyClass& cl) const - { - cl - .def(bp::init<>()) - // All are add_properties cause ReadOnly - .add_property("id",&JointModelAccessorPythonVisitor::getId) - .add_property("idx_q",&JointModelAccessorPythonVisitor::getIdx_q) - .add_property("idx_v",&JointModelAccessorPythonVisitor::getIdx_v) - .add_property("nq",&JointModelAccessorPythonVisitor::getNq) - .add_property("nv",&JointModelAccessorPythonVisitor::getNv) - - .def("setIndexes",&JointModelAccessor::setIndexes) - ; - } - - static JointIndex getId( const JointModelAccessor & self ) { return self.id(); } - static int getIdx_q(const JointModelAccessor & self) {return self.idx_q();} - static int getIdx_v(const JointModelAccessor & self) {return self.idx_v();} - static int getNq(const JointModelAccessor & self) {return self.nq();} - static int getNv(const JointModelAccessor & self) {return self.nv();} - - // static void setIndexes(JointModelAccessor & self, JointIndex id, - // int idx_q, int idx_v) - // { - // self.setIndexes(id, idx_q, idx_v); - // } - - static void expose() - { - bp::class_<JointModelAccessor>("JointModelAccessor", - "Generic Joint Model", - bp::no_init) - .def(bp::init<se3::JointModelVariant>()) - .def(JointModelAccessorPythonVisitor()) - ; - - // bp::to_python_converter< JointModelAccessor,JointModelAccessorPythonVisitor >(); - } - - }; - - - - }} // namespace se3::python - -#endif // ifndef __se3_python_joint_accessor_hpp__ - diff --git a/src/python/joint.hpp b/src/python/joint.hpp new file mode 100644 index 0000000000000000000000000000000000000000..55a1b76c192b380e9d121c43176ee3ea754d2c8d --- /dev/null +++ b/src/python/joint.hpp @@ -0,0 +1,82 @@ +// +// Copyright (c) 2015 CNRS +// +// This file is part of Pinocchio +// Pinocchio is free software: you can redistribute it +// and/or modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation, either version +// 3 of the License, or (at your option) any later version. +// +// Pinocchio is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Lesser Public License for more details. You should have +// received a copy of the GNU Lesser General Public License along with +// Pinocchio If not, see +// <http://www.gnu.org/licenses/>. + +#ifndef __se3_python_joint_hpp__ +#define __se3_python_joint_hpp__ + +#include <eigenpy/exception.hpp> +#include <eigenpy/eigenpy.hpp> +#include "pinocchio/multibody/joint/joint.hpp" + + + +namespace se3 +{ + namespace python + { + namespace bp = boost::python; + + struct JointModelPythonVisitor + : public boost::python::def_visitor< JointModelPythonVisitor > + { + + public: + + static PyObject* convert(JointModel const& jm) + { + return boost::python::incref(boost::python::object(jm).ptr()); + } + + template<class PyClass> + void visit(PyClass& cl) const + { + cl + .def(bp::init<>()) + // All are add_properties cause ReadOnly + .add_property("id",&JointModelPythonVisitor::getId) + .add_property("idx_q",&JointModelPythonVisitor::getIdx_q) + .add_property("idx_v",&JointModelPythonVisitor::getIdx_v) + .add_property("nq",&JointModelPythonVisitor::getNq) + .add_property("nv",&JointModelPythonVisitor::getNv) + + .def("setIndexes",&JointModel::setIndexes) + ; + } + + static JointIndex getId( const JointModel & self ) { return self.id(); } + static int getIdx_q(const JointModel & self) {return self.idx_q();} + static int getIdx_v(const JointModel & self) {return self.idx_v();} + static int getNq(const JointModel & self) {return self.nq();} + static int getNv(const JointModel & self) {return self.nv();} + + static void expose() + { + bp::class_<JointModel>("JointModel", + "Generic Joint Model", + bp::no_init) + .def(bp::init<se3::JointModelVariant>()) + .def(JointModelPythonVisitor()) + ; + + // bp::to_python_converter< JointModel,JointModelPythonVisitor >(); + } + + }; + +}} // namespace se3::python + +#endif // ifndef __se3_python_joint_hpp__ diff --git a/src/python/model.hpp b/src/python/model.hpp index cd5e8f24b97d6823611f3385bb05c1fbbc4a7a28..3fae0c002db9917fbb0f6f1e3811e129c3a76aca 100644 --- a/src/python/model.hpp +++ b/src/python/model.hpp @@ -155,7 +155,7 @@ namespace se3 static int nbody( ModelHandler & m ) { return m->nbody; } static std::vector<Inertia> & inertias( ModelHandler & m ) { return m->inertias; } static std::vector<SE3> & jointPlacements( ModelHandler & m ) { return m->jointPlacements; } - static JointModelAccessorVector & joints( ModelHandler & m ) { return m->joints; } + static JointModelVector & joints( ModelHandler & m ) { return m->joints; } static std::vector<Model::JointIndex> & parents( ModelHandler & m ) { return m->parents; } static std::vector<std::string> & names ( ModelHandler & m ) { return m->names; } diff --git a/src/python/python.cpp b/src/python/python.cpp index ed62970bd6e7ccc4ab550e1cbf42438f9fa1336f..6586e0f1937397e1acdd0248207d59160284dc77 100644 --- a/src/python/python.cpp +++ b/src/python/python.cpp @@ -23,7 +23,7 @@ #include "pinocchio/python/inertia.hpp" #include "pinocchio/python/joint-derived.hpp" #include "pinocchio/python/joints-variant.hpp" -#include "pinocchio/python/joint-accessor.hpp" +#include "pinocchio/python/joint.hpp" #include "pinocchio/python/frame.hpp" #include "pinocchio/python/model.hpp" @@ -65,9 +65,9 @@ namespace se3 void exposeJoints() { exposeVariants(); - JointModelAccessorPythonVisitor::expose(); - bp::class_< JointModelAccessorVector >("StdVec_JointModelAccessorVector") - .def(bp::vector_indexing_suite< JointModelAccessorVector, true >()); + JointModelPythonVisitor::expose(); + bp::class_< JointModelVector >("StdVec_JointModelVector") + .def(bp::vector_indexing_suite< JointModelVector, true >()); } void exposeModel() { diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index a59f1d911062129a17098941e36bfe480df502aa..7435edfd3c989d919c75560ed771a326b0edf18e 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -99,5 +99,4 @@ ADD_UNIT_TEST(compute-all-terms eigen3) ADD_UNIT_TEST(energy eigen3) ADD_UNIT_TEST(frames eigen3) ADD_UNIT_TEST(joint-configurations eigen3) -ADD_UNIT_TEST(joint-accessor eigen3) - +ADD_UNIT_TEST(joint eigen3) diff --git a/unittest/aba.cpp b/unittest/aba.cpp index 88c1309a2b0a39eed73d827e0bf371e167205f1e..c5c60e6a97c48577a3c5af530ec85a2ca7d4f6c0 100644 --- a/unittest/aba.cpp +++ b/unittest/aba.cpp @@ -18,7 +18,6 @@ #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/spatial/se3.hpp" -#include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/visitor.hpp" #include "pinocchio/multibody/model.hpp" #include "pinocchio/algorithm/aba.hpp" diff --git a/unittest/compute-all-terms.cpp b/unittest/compute-all-terms.cpp index bb687809b4a2c58724a8b6b776cc3677ae88333b..6577cdbd1a1468b07d8b10313b38138623eb0dc5 100644 --- a/unittest/compute-all-terms.cpp +++ b/unittest/compute-all-terms.cpp @@ -24,7 +24,6 @@ #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/spatial/se3.hpp" -#include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/visitor.hpp" #include "pinocchio/multibody/model.hpp" #include "pinocchio/algorithm/crba.hpp" diff --git a/unittest/joint-accessor.cpp b/unittest/joint.cpp similarity index 87% rename from unittest/joint-accessor.cpp rename to unittest/joint.cpp index 9a31d174c02e743e1307b94dd06c76702d51fad0..8f1724f73137c43864e1a2b72b7702babdd1cef9 100644 --- a/unittest/joint-accessor.cpp +++ b/unittest/joint.cpp @@ -25,17 +25,17 @@ #include "pinocchio/multibody/parser/sample-models.hpp" #include "pinocchio/tools/timer.hpp" -#include "pinocchio/multibody/joint/joint-accessor.hpp" +#include "pinocchio/multibody/joint/joint.hpp" #include <iostream> #define BOOST_TEST_DYN_LINK -#define BOOST_TEST_MODULE JointAccessorTest +#define BOOST_TEST_MODULE JointTest #include <boost/test/unit_test.hpp> #include <boost/utility/binary.hpp> template <typename T> -void test_joint_methods (T & jmodel, typename T::JointData & jdata) +void test_joint_methods (T & jmodel, typename T::JointDataDerived & jdata) { Eigen::VectorXd q1(Eigen::VectorXd::Random (jmodel.nq())); Eigen::VectorXd q1_dot(Eigen::VectorXd::Random (jmodel.nv())); @@ -49,14 +49,14 @@ void test_joint_methods (T & jmodel, typename T::JointData & jdata) - se3::JointModelAccessor jma(jmodel); - se3::JointDataAccessor jda(jdata); + se3::JointModel jma(jmodel); + se3::JointData jda(jdata); jma.calc(jda, q1, q1_dot); jma.calc_aba(jda, Ia, update_I); - std::string error_prefix("Joint Model Accessor on " + T::shortname()); + std::string error_prefix("JointModel on " + T::shortname()); BOOST_CHECK_MESSAGE(jmodel.nq() == jma.nq() ,std::string(error_prefix + " - nq ")); BOOST_CHECK_MESSAGE(jmodel.nv() == jma.nv() ,std::string(error_prefix + " - nv ")); @@ -85,14 +85,14 @@ void test_joint_methods (T & jmodel, typename T::JointData & jdata) BOOST_CHECK_MESSAGE((jda.UDinv()).isApprox(jdata.UDinv),std::string(error_prefix + " - Joint UDInv inertia matrix decomposition ")); } -struct TestJointAccessor{ +struct TestJoint{ template <typename T> void operator()(const T ) const { T jmodel; jmodel.setIndexes(0,0,0); - typename T::JointData jdata = jmodel.createData(); + typename T::JointDataDerived jdata = jmodel.createData(); test_joint_methods(jmodel, jdata); } @@ -107,7 +107,7 @@ struct TestJointAccessor{ { se3::JointModelRevoluteUnaligned jmodel(1.5, 1., 0.); jmodel.setIndexes(0,0,0); - se3::JointModelRevoluteUnaligned::JointData jdata = jmodel.createData(); + se3::JointModelRevoluteUnaligned::JointDataDerived jdata = jmodel.createData(); test_joint_methods(jmodel, jdata); } @@ -116,7 +116,7 @@ struct TestJointAccessor{ { se3::JointModelPrismaticUnaligned jmodel(1.5, 1., 0.); jmodel.setIndexes(0,0,0); - se3::JointModelPrismaticUnaligned::JointData jdata = jmodel.createData(); + se3::JointModelPrismaticUnaligned::JointDataDerived jdata = jmodel.createData(); test_joint_methods(jmodel, jdata); } @@ -124,7 +124,7 @@ struct TestJointAccessor{ }; -BOOST_AUTO_TEST_SUITE ( JointAccessorTest) +BOOST_AUTO_TEST_SUITE ( JointTest) BOOST_AUTO_TEST_CASE ( test_all_joints ) { @@ -136,9 +136,8 @@ BOOST_AUTO_TEST_CASE ( test_all_joints ) se3::Data data(model); - boost::mpl::for_each<JointModelVariant::types>(TestJointAccessor()); + boost::mpl::for_each<JointModelVariant::types>(TestJoint()); } -BOOST_AUTO_TEST_SUITE_END () - +BOOST_AUTO_TEST_SUITE_END () \ No newline at end of file diff --git a/unittest/joints.cpp b/unittest/joints.cpp index fe09c9a2d3adccf3e0a0624d62e9da96cf180688..ec1b05ab363da07bb2bd255aab25c9f9bd7bdc5c 100644 --- a/unittest/joints.cpp +++ b/unittest/joints.cpp @@ -635,8 +635,8 @@ BOOST_AUTO_TEST_CASE ( toJointDataDense ) JointDataRX jdata = jmodel.createData(); - JointDataDense< JointDataBase<JointModelRX::JointData>::NQ, - JointDataBase<JointModelRX::JointData>::NV + JointDataDense< JointDataBase<JointModelRX::JointDataDerived>::NQ, + JointDataBase<JointModelRX::JointDataDerived>::NV > jdd = jdata.toDense(); BOOST_CHECK(ConstraintXd(jdata.S).matrix().isApprox(jdd.S.matrix())); diff --git a/unittest/rnea.cpp b/unittest/rnea.cpp index a4150436995e92c0cc6f5d1c1f36bd597ae85fae..7a6e0075730a3ddf6800f41ce31fa3f596f121f0 100644 --- a/unittest/rnea.cpp +++ b/unittest/rnea.cpp @@ -24,7 +24,6 @@ #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/spatial/se3.hpp" -#include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/visitor.hpp" #include "pinocchio/multibody/model.hpp" #include "pinocchio/algorithm/rnea.hpp"