joint-revolute-unbounded.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2016-2020 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_multibody_joint_revolute_unbounded_hpp__
6 #define __pinocchio_multibody_joint_revolute_unbounded_hpp__
7 
8 #include "pinocchio/math/fwd.hpp"
13 
14 namespace pinocchio
15 {
16 
17  template<typename Scalar, int Options, int axis>
19 
20  template<typename _Scalar, int _Options, int axis>
21  struct traits<JointRevoluteUnboundedTpl<_Scalar, _Options, axis>>
22  {
23  enum
24  {
25  NQ = 2,
26  NV = 1
27  };
28  typedef _Scalar Scalar;
29  enum
30  {
31  Options = _Options
32  };
39 
40  // [ABA]
41  typedef Eigen::Matrix<Scalar, 6, NV, Options> U_t;
42  typedef Eigen::Matrix<Scalar, NV, NV, Options> D_t;
43  typedef Eigen::Matrix<Scalar, 6, NV, Options> UD_t;
44 
45  typedef Eigen::Matrix<Scalar, NQ, 1, Options> ConfigVector_t;
46  typedef Eigen::Matrix<Scalar, NV, 1, Options> TangentVector_t;
47 
49  };
50 
51  template<typename _Scalar, int _Options, int axis>
52  struct traits<JointDataRevoluteUnboundedTpl<_Scalar, _Options, axis>>
53  {
55  typedef _Scalar Scalar;
56  };
57 
58  template<typename _Scalar, int _Options, int axis>
59  struct traits<JointModelRevoluteUnboundedTpl<_Scalar, _Options, axis>>
60  {
62  typedef _Scalar Scalar;
63  };
64 
65  template<typename _Scalar, int _Options, int axis>
67  : public JointDataBase<JointDataRevoluteUnboundedTpl<_Scalar, _Options, axis>>
68  {
69  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
73 
74  ConfigVector_t joint_q;
75  TangentVector_t joint_v;
76 
77  Constraint_t S;
78  Transformation_t M;
79  Motion_t v;
80  Bias_t c;
81 
82  // [ABA] specific data
83  U_t U;
84  D_t Dinv;
85  UD_t UDinv;
86  D_t StU;
87 
89  : joint_q(Scalar(1), Scalar(0))
90  , joint_v(TangentVector_t::Zero())
91  , M((Scalar)0, (Scalar)1)
92  , v((Scalar)0)
93  , U(U_t::Zero())
94  , Dinv(D_t::Zero())
95  , UDinv(UD_t::Zero())
96  , StU(D_t::Zero())
97  {
98  }
99 
100  static std::string classname()
101  {
102  return std::string("JointDataRUB") + axisLabel<axis>();
103  }
104  std::string shortname() const
105  {
106  return classname();
107  }
108 
109  }; // struct JointDataRevoluteUnbounded
110 
111  template<typename NewScalar, typename Scalar, int Options, int axis>
113  {
115  };
116 
117  template<typename _Scalar, int _Options, int axis>
119  : public JointModelBase<JointModelRevoluteUnboundedTpl<_Scalar, _Options, axis>>
120  {
121  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
125 
127  using Base::id;
128  using Base::idx_q;
129  using Base::idx_v;
130  using Base::setIndexes;
131 
132  JointDataDerived createData() const
133  {
134  return JointDataDerived();
135  }
136 
137  const std::vector<bool> hasConfigurationLimit() const
138  {
139  return {false, false};
140  }
141 
142  const std::vector<bool> hasConfigurationLimitInTangent() const
143  {
144  return {false};
145  }
146 
147  template<typename ConfigVector>
148  void calc(JointDataDerived & data, const typename Eigen::MatrixBase<ConfigVector> & qs) const
149  {
150  data.joint_q = qs.template segment<NQ>(idx_q());
151 
152  const Scalar & ca = data.joint_q[0];
153  const Scalar & sa = data.joint_q[1];
154 
155  data.M.setValues(sa, ca);
156  }
157 
158  template<typename TangentVector>
159  void
160  calc(JointDataDerived & data, const Blank, const typename Eigen::MatrixBase<TangentVector> & vs)
161  const
162  {
163  data.joint_v[0] = vs[idx_v()];
164  data.v.angularRate() = data.joint_v[0];
165  }
166 
167  template<typename ConfigVector, typename TangentVector>
168  void calc(
169  JointDataDerived & data,
170  const typename Eigen::MatrixBase<ConfigVector> & qs,
171  const typename Eigen::MatrixBase<TangentVector> & vs) const
172  {
173  calc(data, qs.derived());
174  data.joint_v[0] = vs[idx_v()];
175  data.v.angularRate() = data.joint_v[0];
176  }
177 
178  template<typename VectorLike, typename Matrix6Like>
179  void calc_aba(
180  JointDataDerived & data,
181  const Eigen::MatrixBase<VectorLike> & armature,
182  const Eigen::MatrixBase<Matrix6Like> & I,
183  const bool update_I) const
184  {
185  data.U = I.col(Inertia::ANGULAR + axis);
186  data.Dinv[0] =
187  (Scalar)(1) / (I(Inertia::ANGULAR + axis, Inertia::ANGULAR + axis) + armature[0]);
188  data.UDinv.noalias() = data.U * data.Dinv[0];
189 
190  if (update_I)
191  PINOCCHIO_EIGEN_CONST_CAST(Matrix6Like, I).noalias() -= data.UDinv * data.U.transpose();
192  }
193 
194  static std::string classname()
195  {
196  return std::string("JointModelRUB") + axisLabel<axis>();
197  }
198  std::string shortname() const
199  {
200  return classname();
201  }
202 
204  template<typename NewScalar>
206  {
208  ReturnType res;
209  res.setIndexes(id(), idx_q(), idx_v());
210  return res;
211  }
212 
213  }; // struct JointModelRevoluteUnboundedTpl
214 
216  {
217  template<typename ConfigVectorIn, typename Scalar, typename ConfigVectorOut>
218  static void run(
219  const Eigen::MatrixBase<ConfigVectorIn> & q,
220  const Scalar & scaling,
221  const Scalar & offset,
222  const Eigen::MatrixBase<ConfigVectorOut> & dest)
223  {
224  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(ConfigVectorIn, 2);
225  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(ConfigVectorOut, 2);
226 
227  const typename ConfigVectorIn::Scalar & ca = q(0);
228  const typename ConfigVectorIn::Scalar & sa = q(1);
229 
230  const typename ConfigVectorIn::Scalar & theta = math::atan2(sa, ca);
231  const typename ConfigVectorIn::Scalar & theta_transform = scaling * theta + offset;
232 
233  ConfigVectorOut & dest_ = PINOCCHIO_EIGEN_CONST_CAST(ConfigVectorOut, dest);
234  SINCOS(theta_transform, &dest_.coeffRef(1), &dest_.coeffRef(0));
235  }
236  };
237 
238  template<typename Scalar, int Options, int axis>
240  {
242  };
243 
247 
251 
255 
256 } // namespace pinocchio
257 
258 #include <boost/type_traits.hpp>
259 
260 namespace boost
261 {
262  template<typename Scalar, int Options, int axis>
263  struct has_nothrow_constructor<::pinocchio::JointModelRevoluteUnboundedTpl<Scalar, Options, axis>>
264  : public integral_constant<bool, true>
265  {
266  };
267 
268  template<typename Scalar, int Options, int axis>
269  struct has_nothrow_copy<::pinocchio::JointModelRevoluteUnboundedTpl<Scalar, Options, axis>>
270  : public integral_constant<bool, true>
271  {
272  };
273 
274  template<typename Scalar, int Options, int axis>
275  struct has_nothrow_constructor<::pinocchio::JointDataRevoluteUnboundedTpl<Scalar, Options, axis>>
276  : public integral_constant<bool, true>
277  {
278  };
279 
280  template<typename Scalar, int Options, int axis>
281  struct has_nothrow_copy<::pinocchio::JointDataRevoluteUnboundedTpl<Scalar, Options, axis>>
282  : public integral_constant<bool, true>
283  {
284  };
285 } // namespace boost
286 
287 #endif // ifndef __pinocchio_multibody_joint_revolute_unbounded_hpp__
pinocchio::JointDataRevoluteUnboundedTpl::StU
D_t StU
Definition: joint-revolute-unbounded.hpp:86
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Bias_t
MotionZeroTpl< Scalar, Options > Bias_t
Definition: joint-revolute-unbounded.hpp:38
PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE
#define PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE
Definition: joint-data-base.hpp:137
sincos.hpp
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::UD_t
Eigen::Matrix< Scalar, 6, NV, Options > UD_t
Definition: joint-revolute-unbounded.hpp:43
pinocchio::traits< JointModelRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:62
pinocchio::JointDataRevoluteUnboundedTpl::U
U_t U
Definition: joint-revolute-unbounded.hpp:83
pinocchio::MotionRevoluteTpl
Definition: joint-revolute.hpp:20
pinocchio::JointDataRevoluteUnboundedTpl::shortname
std::string shortname() const
Definition: joint-revolute-unbounded.hpp:104
pinocchio::idx_q
int idx_q(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxQVisitor to get the index in the full model configuration space...
pinocchio::JointModelBase
Definition: joint-model-base.hpp:75
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Constraint_t
JointMotionSubspaceRevoluteTpl< Scalar, Options, axis > Constraint_t
Definition: joint-revolute-unbounded.hpp:35
pinocchio::idx_v
int idx_v(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxVVisitor to get the index in the full model tangent space corre...
pinocchio::Options
Options
Definition: joint-configuration.hpp:1116
pinocchio::JointModelRevoluteUnboundedTpl::JointDerived
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:122
pinocchio::UnboundedRevoluteAffineTransform::run
static void run(const Eigen::MatrixBase< ConfigVectorIn > &q, const Scalar &scaling, const Scalar &offset, const Eigen::MatrixBase< ConfigVectorOut > &dest)
Definition: joint-revolute-unbounded.hpp:218
pinocchio::JointModelRevoluteUnboundedTpl::classname
static std::string classname()
Definition: joint-revolute-unbounded.hpp:194
PINOCCHIO_EIGEN_CONST_CAST
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
Definition: eigen-macros.hpp:51
pinocchio::JointDataBase
Definition: joint-data-base.hpp:161
pinocchio::JointDataRevoluteUnboundedTpl::c
Bias_t c
Definition: joint-revolute-unbounded.hpp:80
pinocchio::traits< JointDataRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:55
pinocchio::JointModelRevoluteUnboundedTpl::shortname
std::string shortname() const
Definition: joint-revolute-unbounded.hpp:198
pinocchio::JointDataRevoluteUnboundedTpl::JointDataRevoluteUnboundedTpl
JointDataRevoluteUnboundedTpl()
Definition: joint-revolute-unbounded.hpp:88
setup.data
data
Definition: cmake/cython/setup.in.py:48
pinocchio::traits< JointModelRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointDerived
JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:61
inertia.hpp
pinocchio::python::Scalar
context::Scalar Scalar
Definition: admm-solver.cpp:29
pinocchio::JointModelRevoluteUnboundedTpl::calc_aba
void calc_aba(JointDataDerived &data, const Eigen::MatrixBase< VectorLike > &armature, const Eigen::MatrixBase< Matrix6Like > &I, const bool update_I) const
Definition: joint-revolute-unbounded.hpp:179
boost
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Transformation_t
TransformRevoluteTpl< Scalar, Options, axis > Transformation_t
Definition: joint-revolute-unbounded.hpp:36
pinocchio::JointDataRevoluteUnboundedTpl::joint_v
TangentVector_t joint_v
Definition: joint-revolute-unbounded.hpp:75
pinocchio::JointModelRevoluteUnboundedTpl::calc
void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs) const
Definition: joint-revolute-unbounded.hpp:148
pinocchio::JointDataRevoluteUnboundedTpl::M
Transformation_t M
Definition: joint-revolute-unbounded.hpp:78
pinocchio::JointModelBase::setIndexes
void setIndexes(JointIndex id, int q, int v)
Definition: joint-model-base.hpp:186
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointModelDerived
JointModelRevoluteUnboundedTpl< Scalar, Options, axis > JointModelDerived
Definition: joint-revolute-unbounded.hpp:34
pinocchio::res
ReturnType res
Definition: spatial/classic-acceleration.hpp:57
pinocchio::SINCOS
void SINCOS(const S1 &a, S2 *sa, S3 *ca)
Computes sin/cos values of a given input scalar.
Definition: sincos.hpp:27
pinocchio::JointModelRevoluteUnboundedTpl::PINOCCHIO_JOINT_TYPEDEF_TEMPLATE
PINOCCHIO_JOINT_TYPEDEF_TEMPLATE(JointDerived)
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointDataDerived
JointDataRevoluteUnboundedTpl< Scalar, Options, axis > JointDataDerived
Definition: joint-revolute-unbounded.hpp:33
pinocchio::Blank
Blank type.
Definition: fwd.hpp:76
pinocchio::JointRevoluteTpl
Definition: joint-revolute.hpp:546
pinocchio::MotionZeroTpl
Definition: context/casadi.hpp:23
pinocchio::JointRUBY
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointRUBY
Definition: joint-revolute-unbounded.hpp:248
PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR
#define PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR
Definition: joint-data-base.hpp:55
pinocchio::JointModelRevoluteUnboundedTpl::cast
JointModelRevoluteUnboundedTpl< NewScalar, Options, axis > cast() const
Definition: joint-revolute-unbounded.hpp:205
pinocchio::JointDataRUBZ
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointDataRUBZ
Definition: joint-revolute-unbounded.hpp:253
pinocchio::JointModelRevoluteUnboundedTpl::hasConfigurationLimit
const std::vector< bool > hasConfigurationLimit() const
Definition: joint-revolute-unbounded.hpp:137
pinocchio::JointModelRevoluteUnboundedTpl::JointDerivedBase
JointRevoluteTpl< Scalar, _Options, axis > JointDerivedBase
Definition: joint-revolute-unbounded.hpp:124
pinocchio::JointDataRevoluteUnboundedTpl::PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE
PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(JointDerived)
fwd.hpp
pinocchio::TransformRevoluteTpl
Definition: joint-revolute.hpp:64
pinocchio::ConfigVectorAffineTransform
Assign the correct configuration vector space affine transformation according to the joint type.
Definition: joint-common-operations.hpp:70
joint-base.hpp
pinocchio::JointModelRevoluteUnboundedTpl::hasConfigurationLimitInTangent
const std::vector< bool > hasConfigurationLimitInTangent() const
Definition: joint-revolute-unbounded.hpp:142
pinocchio::JointModelRevoluteUnboundedTpl::calc
void calc(JointDataDerived &data, const Blank, const typename Eigen::MatrixBase< TangentVector > &vs) const
Definition: joint-revolute-unbounded.hpp:160
axis
axis
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Motion_t
MotionRevoluteTpl< Scalar, Options, axis > Motion_t
Definition: joint-revolute-unbounded.hpp:37
pinocchio::JointDataRevoluteUnboundedTpl::classname
static std::string classname()
Definition: joint-revolute-unbounded.hpp:100
pinocchio::JointDataRevoluteUnboundedTpl::Dinv
D_t Dinv
Definition: joint-revolute-unbounded.hpp:84
pinocchio::JointRevoluteUnboundedTpl
Definition: joint-revolute-unbounded.hpp:18
pinocchio::ConfigVectorAffineTransform< JointRevoluteUnboundedTpl< Scalar, Options, axis > >::Type
UnboundedRevoluteAffineTransform Type
Definition: joint-revolute-unbounded.hpp:241
pinocchio::q
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
Definition: joint-configuration.hpp:1117
pinocchio::JointModelRUBX
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointModelRUBX
Definition: joint-revolute-unbounded.hpp:246
pinocchio::traits< JointDataRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointDerived
JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:54
pinocchio::JointModelBase::idx_v
int idx_v() const
Definition: joint-model-base.hpp:164
joint-revolute.hpp
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::TangentVector_t
Eigen::Matrix< Scalar, NV, 1, Options > TangentVector_t
Definition: joint-revolute-unbounded.hpp:46
pinocchio::CastType< NewScalar, JointModelRevoluteUnboundedTpl< Scalar, Options, axis > >::type
JointModelRevoluteUnboundedTpl< NewScalar, Options, axis > type
Definition: joint-revolute-unbounded.hpp:114
pinocchio::JointRUBZ
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointRUBZ
Definition: joint-revolute-unbounded.hpp:252
pinocchio::JointModelBase::idx_q
int idx_q() const
Definition: joint-model-base.hpp:160
pinocchio::JointDataRUBX
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointDataRUBX
Definition: joint-revolute-unbounded.hpp:245
pinocchio::JointDataRUBY
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointDataRUBY
Definition: joint-revolute-unbounded.hpp:249
pinocchio::JointModelRevoluteUnboundedTpl::Base
JointModelBase< JointModelRevoluteUnboundedTpl > Base
Definition: joint-revolute-unbounded.hpp:126
pinocchio::JointMotionSubspaceRevoluteTpl
Definition: joint-revolute.hpp:376
pinocchio::JointDataRevoluteUnboundedTpl::S
Constraint_t S
Definition: joint-revolute-unbounded.hpp:77
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::D_t
Eigen::Matrix< Scalar, NV, NV, Options > D_t
Definition: joint-revolute-unbounded.hpp:42
pinocchio::JointDataRevoluteUnboundedTpl::JointDerived
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:70
pinocchio::JointModelRevoluteUnboundedTpl::calc
void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs, const typename Eigen::MatrixBase< TangentVector > &vs) const
Definition: joint-revolute-unbounded.hpp:168
pinocchio::JointRUBX
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointRUBX
Definition: joint-revolute-unbounded.hpp:244
pinocchio::traits
Common traits structure to fully define base classes for CRTP.
Definition: fwd.hpp:71
pinocchio::UnboundedRevoluteAffineTransform
Definition: joint-revolute-unbounded.hpp:215
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::U_t
Eigen::Matrix< Scalar, 6, NV, Options > U_t
Definition: joint-revolute-unbounded.hpp:41
pinocchio::JointDataRevoluteUnboundedTpl::UDinv
UD_t UDinv
Definition: joint-revolute-unbounded.hpp:85
pinocchio::JointDataRevoluteUnboundedTpl::v
Motion_t v
Definition: joint-revolute-unbounded.hpp:79
pinocchio::JointModelRevoluteUnboundedTpl::createData
JointDataDerived createData() const
Definition: joint-revolute-unbounded.hpp:132
pinocchio::JointDataRevoluteUnboundedTpl::joint_q
PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR ConfigVector_t joint_q
Definition: joint-revolute-unbounded.hpp:74
pinocchio::JointModelRUBZ
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointModelRUBZ
Definition: joint-revolute-unbounded.hpp:254
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::ConfigVector_t
Eigen::Matrix< Scalar, NQ, 1, Options > ConfigVector_t
Definition: joint-revolute-unbounded.hpp:45
pinocchio::CastType
Type of the cast of a class C templated by Scalar and Options, to a new NewScalar type....
Definition: fwd.hpp:99
dcrba.NV
NV
Definition: dcrba.py:514
dpendulum.NQ
int NQ
Definition: dpendulum.py:8
pinocchio::JointModelRevoluteUnboundedTpl
Definition: multibody/joint/fwd.hpp:55
meshcat-viewer.qs
qs
Definition: meshcat-viewer.py:127
pinocchio::JointDataRevoluteUnboundedTpl
Definition: multibody/joint/fwd.hpp:57
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27
pinocchio::JointModelBase::id
JointIndex id() const
Definition: joint-model-base.hpp:168
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:28
pinocchio::JointModelRUBY
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointModelRUBY
Definition: joint-revolute-unbounded.hpp:250


pinocchio
Author(s):
autogenerated on Sat Jun 22 2024 02:41:48