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  NVExtended = 1
28  };
29  typedef _Scalar Scalar;
30  enum
31  {
32  Options = _Options
33  };
40 
41  // [ABA]
42  typedef Eigen::Matrix<Scalar, 6, NV, Options> U_t;
43  typedef Eigen::Matrix<Scalar, NV, NV, Options> D_t;
44  typedef Eigen::Matrix<Scalar, 6, NV, Options> UD_t;
45 
46  typedef Eigen::Matrix<Scalar, NQ, 1, Options> ConfigVector_t;
47  typedef Eigen::Matrix<Scalar, NV, 1, Options> TangentVector_t;
48 
49  typedef boost::mpl::true_ is_mimicable_t;
50 
52  };
53 
54  template<typename _Scalar, int _Options, int axis>
55  struct traits<JointDataRevoluteUnboundedTpl<_Scalar, _Options, axis>>
56  {
58  typedef _Scalar Scalar;
59  };
60 
61  template<typename _Scalar, int _Options, int axis>
62  struct traits<JointModelRevoluteUnboundedTpl<_Scalar, _Options, axis>>
63  {
65  typedef _Scalar Scalar;
66  };
67 
68  template<typename _Scalar, int _Options, int axis>
70  : public JointDataBase<JointDataRevoluteUnboundedTpl<_Scalar, _Options, axis>>
71  {
72  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
76 
77  ConfigVector_t joint_q;
78  TangentVector_t joint_v;
79 
80  Constraint_t S;
81  Transformation_t M;
82  Motion_t v;
83  Bias_t c;
84 
85  // [ABA] specific data
86  U_t U;
87  D_t Dinv;
88  UD_t UDinv;
89  D_t StU;
90 
92  : joint_q(Scalar(1), Scalar(0))
93  , joint_v(TangentVector_t::Zero())
94  , M((Scalar)0, (Scalar)1)
95  , v((Scalar)0)
96  , U(U_t::Zero())
97  , Dinv(D_t::Zero())
98  , UDinv(UD_t::Zero())
99  , StU(D_t::Zero())
100  {
101  }
102 
103  static std::string classname()
104  {
105  return std::string("JointDataRUB") + axisLabel<axis>();
106  }
107  std::string shortname() const
108  {
109  return classname();
110  }
111 
112  }; // struct JointDataRevoluteUnbounded
113 
114  template<typename NewScalar, typename Scalar, int Options, int axis>
116  {
118  };
119 
120  template<typename _Scalar, int _Options, int axis>
122  : public JointModelBase<JointModelRevoluteUnboundedTpl<_Scalar, _Options, axis>>
123  {
124  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
128 
130  using Base::id;
131  using Base::idx_q;
132  using Base::idx_v;
133  using Base::idx_vExtended;
134  using Base::setIndexes;
135 
136  typedef Eigen::Matrix<Scalar, 3, 1, _Options> Vector3;
137 
138  JointDataDerived createData() const
139  {
140  return JointDataDerived();
141  }
142 
143  const std::vector<bool> hasConfigurationLimit() const
144  {
145  return {false, false};
146  }
147 
148  const std::vector<bool> hasConfigurationLimitInTangent() const
149  {
150  return {false};
151  }
152 
153  template<typename ConfigVector>
154  void calc(JointDataDerived & data, const typename Eigen::MatrixBase<ConfigVector> & qs) const
155  {
156  data.joint_q = qs.template segment<NQ>(idx_q());
157 
158  const Scalar & ca = data.joint_q[0];
159  const Scalar & sa = data.joint_q[1];
160 
161  data.M.setValues(sa, ca);
162  }
163 
164  template<typename TangentVector>
165  void
166  calc(JointDataDerived & data, const Blank, const typename Eigen::MatrixBase<TangentVector> & vs)
167  const
168  {
169  data.joint_v[0] = vs[idx_v()];
170  data.v.angularRate() = data.joint_v[0];
171  }
172 
173  template<typename ConfigVector, typename TangentVector>
174  void calc(
175  JointDataDerived & data,
176  const typename Eigen::MatrixBase<ConfigVector> & qs,
177  const typename Eigen::MatrixBase<TangentVector> & vs) const
178  {
179  calc(data, qs.derived());
180  data.joint_v[0] = vs[idx_v()];
181  data.v.angularRate() = data.joint_v[0];
182  }
183 
184  template<typename VectorLike, typename Matrix6Like>
185  void calc_aba(
186  JointDataDerived & data,
187  const Eigen::MatrixBase<VectorLike> & armature,
188  const Eigen::MatrixBase<Matrix6Like> & I,
189  const bool update_I) const
190  {
191  data.U = I.col(Inertia::ANGULAR + axis);
192  data.Dinv[0] =
193  (Scalar)(1) / (I(Inertia::ANGULAR + axis, Inertia::ANGULAR + axis) + armature[0]);
194  data.UDinv.noalias() = data.U * data.Dinv[0];
195 
196  if (update_I)
197  PINOCCHIO_EIGEN_CONST_CAST(Matrix6Like, I).noalias() -= data.UDinv * data.U.transpose();
198  }
199 
200  static std::string classname()
201  {
202  return std::string("JointModelRUB") + axisLabel<axis>();
203  }
204  std::string shortname() const
205  {
206  return classname();
207  }
208 
210  {
211  switch (axis)
212  {
213  case 0:
214  return Vector3::UnitX();
215  case 1:
216  return Vector3::UnitY();
217  case 2:
218  return Vector3::UnitZ();
219  default:
220  assert(false && "must never happen");
221  break;
222  }
223  }
224 
226  template<typename NewScalar>
228  {
230  ReturnType res;
231  res.setIndexes(id(), idx_q(), idx_v(), idx_vExtended());
232  return res;
233  }
234 
235  }; // struct JointModelRevoluteUnboundedTpl
236 
240 
244 
248 
249  template<typename Scalar, int Options, int axis>
251  {
253  };
254 } // namespace pinocchio
255 
256 #include <boost/type_traits.hpp>
257 
258 namespace boost
259 {
260  template<typename Scalar, int Options, int axis>
261  struct has_nothrow_constructor<::pinocchio::JointModelRevoluteUnboundedTpl<Scalar, Options, axis>>
262  : public integral_constant<bool, true>
263  {
264  };
265 
266  template<typename Scalar, int Options, int axis>
267  struct has_nothrow_copy<::pinocchio::JointModelRevoluteUnboundedTpl<Scalar, Options, axis>>
268  : public integral_constant<bool, true>
269  {
270  };
271 
272  template<typename Scalar, int Options, int axis>
273  struct has_nothrow_constructor<::pinocchio::JointDataRevoluteUnboundedTpl<Scalar, Options, axis>>
274  : public integral_constant<bool, true>
275  {
276  };
277 
278  template<typename Scalar, int Options, int axis>
279  struct has_nothrow_copy<::pinocchio::JointDataRevoluteUnboundedTpl<Scalar, Options, axis>>
280  : public integral_constant<bool, true>
281  {
282  };
283 } // namespace boost
284 
285 #endif // ifndef __pinocchio_multibody_joint_revolute_unbounded_hpp__
pinocchio::JointDataRevoluteUnboundedTpl::StU
D_t StU
Definition: joint-revolute-unbounded.hpp:89
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Bias_t
MotionZeroTpl< Scalar, Options > Bias_t
Definition: joint-revolute-unbounded.hpp:39
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:44
pinocchio::JointModelRevoluteUnboundedTpl::getMotionAxis
Vector3 getMotionAxis() const
Definition: joint-revolute-unbounded.hpp:209
pinocchio::traits< JointModelRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:65
pinocchio::JointDataRevoluteUnboundedTpl::U
U_t U
Definition: joint-revolute-unbounded.hpp:86
pinocchio::MotionRevoluteTpl
Definition: joint-revolute.hpp:20
pinocchio::JointDataRevoluteUnboundedTpl::shortname
std::string shortname() const
Definition: joint-revolute-unbounded.hpp:107
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:78
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Constraint_t
JointMotionSubspaceRevoluteTpl< Scalar, Options, axis > Constraint_t
Definition: joint-revolute-unbounded.hpp:36
pinocchio::idx_v
int idx_v(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxVVisitor to get the index in the model tangent space correspond...
pinocchio::Options
Options
Definition: joint-configuration.hpp:1082
pinocchio::JointModelRevoluteUnboundedTpl::JointDerived
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:125
pinocchio::JointModelRevoluteUnboundedTpl::classname
static std::string classname()
Definition: joint-revolute-unbounded.hpp:200
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:83
pinocchio::traits< JointDataRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:58
pinocchio::JointModelRevoluteUnboundedTpl::shortname
std::string shortname() const
Definition: joint-revolute-unbounded.hpp:204
pinocchio::JointDataRevoluteUnboundedTpl::JointDataRevoluteUnboundedTpl
JointDataRevoluteUnboundedTpl()
Definition: joint-revolute-unbounded.hpp:91
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:64
inertia.hpp
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:185
boost
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Transformation_t
TransformRevoluteTpl< Scalar, Options, axis > Transformation_t
Definition: joint-revolute-unbounded.hpp:37
pinocchio::JointDataRevoluteUnboundedTpl::joint_v
TangentVector_t joint_v
Definition: joint-revolute-unbounded.hpp:78
pinocchio::JointModelRevoluteUnboundedTpl::calc
void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs) const
Definition: joint-revolute-unbounded.hpp:154
pinocchio::JointDataRevoluteUnboundedTpl::M
Transformation_t M
Definition: joint-revolute-unbounded.hpp:81
pinocchio::JointModelBase::setIndexes
void setIndexes(JointIndex id, int q, int v)
Definition: joint-model-base.hpp:205
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointModelDerived
JointModelRevoluteUnboundedTpl< Scalar, Options, axis > JointModelDerived
Definition: joint-revolute-unbounded.hpp:35
pinocchio::res
ReturnType res
Definition: spatial/classic-acceleration.hpp:57
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:34
pinocchio::Blank
Blank type.
Definition: fwd.hpp:76
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::is_mimicable_t
boost::mpl::true_ is_mimicable_t
Definition: joint-revolute-unbounded.hpp:49
pinocchio::JointRevoluteTpl
Definition: joint-revolute.hpp:546
pinocchio::MotionZeroTpl
Definition: context/casadi.hpp:24
pinocchio::JointRUBY
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointRUBY
Definition: joint-revolute-unbounded.hpp:241
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:227
pinocchio::JointDataRUBZ
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointDataRUBZ
Definition: joint-revolute-unbounded.hpp:246
pinocchio::JointModelRevoluteUnboundedTpl::hasConfigurationLimit
const std::vector< bool > hasConfigurationLimit() const
Definition: joint-revolute-unbounded.hpp:143
pinocchio::JointModelRevoluteUnboundedTpl::JointDerivedBase
JointRevoluteTpl< Scalar, _Options, axis > JointDerivedBase
Definition: joint-revolute-unbounded.hpp:127
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:108
joint-base.hpp
pinocchio::JointModelRevoluteUnboundedTpl::hasConfigurationLimitInTangent
const std::vector< bool > hasConfigurationLimitInTangent() const
Definition: joint-revolute-unbounded.hpp:148
pinocchio::JointModelRevoluteUnboundedTpl::calc
void calc(JointDataDerived &data, const Blank, const typename Eigen::MatrixBase< TangentVector > &vs) const
Definition: joint-revolute-unbounded.hpp:166
pinocchio::JointModelBase::idx_vExtended
int idx_vExtended() const
Definition: joint-model-base.hpp:179
axis
axis
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Motion_t
MotionRevoluteTpl< Scalar, Options, axis > Motion_t
Definition: joint-revolute-unbounded.hpp:38
pinocchio::JointDataRevoluteUnboundedTpl::classname
static std::string classname()
Definition: joint-revolute-unbounded.hpp:103
pinocchio::JointDataRevoluteUnboundedTpl::Dinv
D_t Dinv
Definition: joint-revolute-unbounded.hpp:87
pinocchio::JointRevoluteUnboundedTpl
Definition: joint-revolute-unbounded.hpp:18
pinocchio::JointModelRevoluteUnboundedTpl::Vector3
Eigen::Matrix< Scalar, 3, 1, _Options > Vector3
Definition: joint-revolute-unbounded.hpp:136
pinocchio::ConfigVectorAffineTransform< JointRevoluteUnboundedTpl< Scalar, Options, axis > >::Type
UnboundedRevoluteAffineTransform Type
Definition: joint-revolute-unbounded.hpp:252
pinocchio::JointModelRUBX
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointModelRUBX
Definition: joint-revolute-unbounded.hpp:239
pinocchio::idx_vExtended
int idx_vExtended(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdvExtendedVisitor to get the index in the model extended tangent ...
pinocchio::traits< JointDataRevoluteUnboundedTpl< _Scalar, _Options, axis > >::JointDerived
JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:57
pinocchio::JointModelBase::idx_v
int idx_v() const
Definition: joint-model-base.hpp:175
joint-revolute.hpp
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::TangentVector_t
Eigen::Matrix< Scalar, NV, 1, Options > TangentVector_t
Definition: joint-revolute-unbounded.hpp:47
pinocchio::CastType< NewScalar, JointModelRevoluteUnboundedTpl< Scalar, Options, axis > >::type
JointModelRevoluteUnboundedTpl< NewScalar, Options, axis > type
Definition: joint-revolute-unbounded.hpp:117
pinocchio::JointRUBZ
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointRUBZ
Definition: joint-revolute-unbounded.hpp:245
pinocchio::JointModelBase::idx_q
int idx_q() const
Definition: joint-model-base.hpp:171
pinocchio::JointDataRUBX
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointDataRUBX
Definition: joint-revolute-unbounded.hpp:238
pinocchio::JointDataRUBY
JointDataRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointDataRUBY
Definition: joint-revolute-unbounded.hpp:242
pinocchio::JointModelRevoluteUnboundedTpl::Base
JointModelBase< JointModelRevoluteUnboundedTpl > Base
Definition: joint-revolute-unbounded.hpp:129
pinocchio::JointMotionSubspaceRevoluteTpl
Definition: joint-revolute.hpp:376
pinocchio::JointDataRevoluteUnboundedTpl::S
Constraint_t S
Definition: joint-revolute-unbounded.hpp:80
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::D_t
Eigen::Matrix< Scalar, NV, NV, Options > D_t
Definition: joint-revolute-unbounded.hpp:43
pinocchio::JointDataRevoluteUnboundedTpl::JointDerived
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointRevoluteUnboundedTpl< _Scalar, _Options, axis > JointDerived
Definition: joint-revolute-unbounded.hpp:73
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:174
pinocchio::JointRUBX
JointRevoluteUnboundedTpl< context::Scalar, context::Options, 0 > JointRUBX
Definition: joint-revolute-unbounded.hpp:237
pinocchio::traits
Common traits structure to fully define base classes for CRTP.
Definition: fwd.hpp:71
pinocchio::UnboundedRevoluteAffineTransform
Definition: joint-common-operations.hpp:67
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::U_t
Eigen::Matrix< Scalar, 6, NV, Options > U_t
Definition: joint-revolute-unbounded.hpp:42
pinocchio::JointDataRevoluteUnboundedTpl::UDinv
UD_t UDinv
Definition: joint-revolute-unbounded.hpp:88
pinocchio::JointDataRevoluteUnboundedTpl::v
Motion_t v
Definition: joint-revolute-unbounded.hpp:82
pinocchio::JointModelRevoluteUnboundedTpl::createData
JointDataDerived createData() const
Definition: joint-revolute-unbounded.hpp:138
pinocchio::JointDataRevoluteUnboundedTpl::joint_q
PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR ConfigVector_t joint_q
Definition: joint-revolute-unbounded.hpp:77
pinocchio::JointModelRUBZ
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 2 > JointModelRUBZ
Definition: joint-revolute-unbounded.hpp:247
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::ConfigVector_t
Eigen::Matrix< Scalar, NQ, 1, Options > ConfigVector_t
Definition: joint-revolute-unbounded.hpp:46
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:536
Scalar
double Scalar
Definition: timings-cppad-jit.cpp:37
dpendulum.NQ
int NQ
Definition: dpendulum.py:9
pinocchio::JointModelRevoluteUnboundedTpl
Definition: multibody/joint/fwd.hpp:55
meshcat-viewer.qs
qs
Definition: meshcat-viewer.py:128
pinocchio::JointDataRevoluteUnboundedTpl
Definition: multibody/joint/fwd.hpp:57
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33
pinocchio::JointModelBase::id
JointIndex id() const
Definition: joint-model-base.hpp:183
pinocchio::traits< JointRevoluteUnboundedTpl< _Scalar, _Options, axis > >::Scalar
_Scalar Scalar
Definition: joint-revolute-unbounded.hpp:29
pinocchio::JointModelRUBY
JointModelRevoluteUnboundedTpl< context::Scalar, context::Options, 1 > JointModelRUBY
Definition: joint-revolute-unbounded.hpp:243


pinocchio
Author(s):
autogenerated on Wed Apr 16 2025 02:41:49