6 #ifndef __pinocchio_joint_free_flyer_hpp__ 7 #define __pinocchio_joint_free_flyer_hpp__ 9 #include "pinocchio/macros.hpp" 10 #include "pinocchio/spatial/inertia.hpp" 11 #include "pinocchio/spatial/explog.hpp" 12 #include "pinocchio/multibody/joint/joint-base.hpp" 13 #include "pinocchio/multibody/constraint.hpp" 14 #include "pinocchio/math/fwd.hpp" 15 #include "pinocchio/math/quaternion.hpp" 22 template<
typename _Scalar,
int _Options>
27 typedef Eigen::Matrix<Scalar,6,6,Options>
Matrix6;
34 typedef Eigen::Matrix<Scalar,6,6,Options>
DenseBase;
40 template<
typename _Scalar,
int _Options>
44 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
49 template<
typename Vector6Like>
50 JointMotion
__mult__(
const Eigen::MatrixBase<Vector6Like> & vj)
const 52 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector6Like,6);
53 return JointMotion(vj);
56 template<
typename S1,
int O1>
64 template<
typename S1,
int O1>
75 template<
typename Derived>
81 template<
typename MatrixDerived>
83 operator*(
const Eigen::MatrixBase<MatrixDerived> & F)
90 MatrixReturnType
matrix_impl()
const {
return DenseBase::Identity(); }
92 template<
typename MotionDerived>
93 typename MotionDerived::ActionMatrixType
101 template<
typename Scalar,
int Options,
typename Vector6Like>
104 const Eigen::MatrixBase<Vector6Like> &
v)
106 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector6Like,6);
109 return Motion(v.derived());
113 template<
typename S1,
int O1,
typename S2,
int O2>
121 template<
typename Matrix6Like,
typename S2,
int O2>
128 template<
typename S1,
int O1>
132 template<
typename S1,
int O1,
typename MotionDerived>
138 template<
typename _Scalar,
int _Options>
155 typedef Eigen::Matrix<Scalar,6,NV,Options>
U_t;
156 typedef Eigen::Matrix<Scalar,NV,NV,Options>
D_t;
157 typedef Eigen::Matrix<Scalar,6,NV,Options>
UD_t;
165 template<
typename Scalar,
int Options>
169 template<
typename Scalar,
int Options>
173 template<
typename _Scalar,
int _Options>
176 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
192 : M(Transformation_t::Identity())
193 , v(Motion_t::Zero())
196 , UDinv(UD_t::Identity())
199 static std::string
classname() {
return std::string(
"JointDataFreeFlyer"); }
205 template<
typename _Scalar,
int _Options>
207 :
public JointModelBase< JointModelFreeFlyerTpl<_Scalar,_Options> >
209 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
219 JointDataDerived
createData()
const {
return JointDataDerived(); }
223 return {
true,
true,
true,
false,
false,
false,
false};
228 return {
true,
true,
true,
false,
false,
false};
231 template<
typename ConfigVectorLike>
232 inline void forwardKinematics(Transformation_t & M,
const Eigen::MatrixBase<ConfigVectorLike> & q_joint)
const 234 EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(ConfigVector_t,ConfigVectorLike);
235 typedef typename Eigen::Quaternion<typename ConfigVectorLike::Scalar,PINOCCHIO_EIGEN_PLAIN_TYPE(ConfigVectorLike)::Options> Quaternion;
236 typedef Eigen::Map<const Quaternion> ConstQuaternionMap;
238 ConstQuaternionMap
quat(q_joint.template tail<4>().data());
240 assert(math::fabs(static_cast<Scalar>(
quat.coeffs().squaredNorm()-1)) <= 1e-4);
242 M.rotation(
quat.matrix());
243 M.translation(q_joint.template head<3>());
246 template<
typename Vector3Derived,
typename QuaternionDerived>
249 const typename Eigen::MatrixBase<Vector3Derived> & trans,
250 const typename Eigen::QuaternionBase<QuaternionDerived> & quat)
const 252 data.M.translation(trans);
253 data.M.rotation(quat.matrix());
256 template<
typename ConfigVector>
259 const typename Eigen::PlainObjectBase<ConfigVector> &
qs)
const 261 typedef typename Eigen::Quaternion<typename ConfigVector::Scalar,ConfigVector::Options> Quaternion;
262 typedef Eigen::Map<const Quaternion> ConstQuaternionMap;
264 typename ConfigVector::template ConstFixedSegmentReturnType<NQ>::Type
q = qs.template segment<NQ>(
idx_q());
265 ConstQuaternionMap
quat(q.template tail<4>().data());
267 calc(data,q.template head<3>(),
quat);
270 template<
typename ConfigVector>
273 const typename Eigen::MatrixBase<ConfigVector> &
qs)
const 275 typedef typename Eigen::Quaternion<Scalar,Options> Quaternion;
277 typename ConfigVector::template ConstFixedSegmentReturnType<NQ>::Type
q = qs.template segment<NQ>(
idx_q());
278 const Quaternion
quat(q.template tail<4>());
280 calc(data,q.template head<3>(),quat);
283 template<
typename ConfigVector,
typename TangentVector>
286 const typename Eigen::MatrixBase<ConfigVector> &
qs,
287 const typename Eigen::MatrixBase<TangentVector> & vs)
const 289 calc(data,qs.derived());
291 data.v = vs.template segment<NV>(
idx_v());
294 template<
typename Matrix6Like>
296 const Eigen::MatrixBase<Matrix6Like> & I,
297 const bool update_I)
const 310 static std::string
classname() {
return std::string(
"JointModelFreeFlyer"); }
314 template<
typename NewScalar>
327 #include <boost/type_traits.hpp> 331 template<
typename Scalar,
int Options>
333 :
public integral_constant<bool,true> {};
335 template<
typename Scalar,
int Options>
337 :
public integral_constant<bool,true> {};
339 template<
typename Scalar,
int Options>
341 :
public integral_constant<bool,true> {};
343 template<
typename Scalar,
int Options>
345 :
public integral_constant<bool,true> {};
348 #endif // ifndef __pinocchio_joint_free_flyer_hpp__ JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > const Eigen::MatrixBase< TangentVectorType > & v
JointFreeFlyerTpl< Scalar, Options > JointDerived
int idx_q(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxQVisitor to get the index in the full model configuration space...
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...
EIGEN_DONT_INLINE void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs) const
ToVectorConstReturnType toVector() const
Return the force as an Eigen vector.
MotionZeroTpl< Scalar, Options > Bias_t
Return type of the ation of a Motion onto an object of type D.
JointDataFreeFlyerTpl< Scalar, Options > JointDataDerived
PINOCCHIO_EIGEN_REF_CONST_TYPE(Matrix6Like) operator*(const Eigen
JointDataDerived createData() const
MatrixReturnType matrix_impl() const
const std::vector< bool > hasConfigurationLimit() const
JointIndex id(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdVisitor to get the index of the joint in the kinematic chain...
#define PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR
EIGEN_DONT_INLINE void calc(JointDataDerived &data, const typename Eigen::PlainObjectBase< ConfigVector > &qs) const
PINOCCHIO_EIGEN_REF_CONST_TYPE(MatrixDerived) operator*(const Eigen
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointFreeFlyerTpl< _Scalar, _Options > JointDerived
JointModelFreeFlyerTpl< NewScalar, Options > cast() const
Eigen::Matrix< Scalar, 6, 6, Options > DenseBase
ConstraintIdentityTpl< Scalar, Options > Constraint_t
Matrix6::IdentityReturnType ConstMatrixReturnType
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
Eigen::Matrix< Scalar, 6, 6, Options > Matrix6
Eigen::Matrix< Scalar, 6, 1, Options > JointForce
TransposeConst transpose() const
ActionMatrixType toActionMatrix() const
The action matrix of .
Matrix6::IdentityReturnType MatrixReturnType
#define PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointFreeFlyerTpl< _Scalar, _Options > JointDerived
SE3Tpl< S1, O1 >::ActionMatrixType se3Action(const SE3Tpl< S1, O1 > &m) const
static std::string classname()
EIGEN_DONT_INLINE void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs, const typename Eigen::MatrixBase< TangentVector > &vs) const
std::string shortname() const
bool isEqual(const ConstraintIdentityTpl &) const
MotionDerived::ActionMatrixType motionAction(const MotionBase< MotionDerived > &v) const
#define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint)
SE3Tpl< Scalar, Options > Transformation_t
MotionTpl< double, 0 > Motion
Eigen::Matrix< Scalar, NV, NV, Options > D_t
SE3Tpl< S1, O1 >::ActionMatrixType se3ActionInverse(const SE3Tpl< S1, O1 > &m) const
MotionTpl< Scalar, Options > Motion_t
static std::string classname()
SE3Tpl< S1, O1 >::ActionMatrixType ReturnType
PINOCCHIO_JOINT_CAST_TYPE_SPECIALIZATION(JointModelFreeFlyerTpl)
JointFreeFlyerTpl< Scalar, Options > JointDerived
Eigen::Matrix< Scalar, 6, NV, Options > UD_t
Eigen::Matrix< Scalar, 6, NV, Options > U_t
JointModelBase< JointModelFreeFlyerTpl > Base
Main pinocchio namespace.
void setIndexes(JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel, JointIndex id, int q, int v)
Visit a JointModelTpl through JointSetIndexesVisitor to set the indexes of the joint in the kinematic...
EIGEN_DONT_INLINE void calc(JointDataDerived &data, const typename Eigen::MatrixBase< Vector3Derived > &trans, const typename Eigen::QuaternionBase< QuaternionDerived > &quat) const
PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR Constraint_t S
void forwardKinematics(Transformation_t &M, const Eigen::MatrixBase< ConfigVectorLike > &q_joint) const
Common traits structure to fully define base classes for CRTP.
ActionMatrixType toActionMatrixInverse() const
The action matrix of .
std::string shortname() const
PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE typedef Eigen::Matrix< Scalar, NQ, 1, Options > ConfigVector_t
#define PINOCCHIO_CONSTRAINT_TYPEDEF_TPL(DERIVED)
JointMotion __mult__(const Eigen::MatrixBase< Vector6Like > &vj) const
SE3Tpl< S1, O1 >::ActionMatrixType ReturnType
ActionMatrixType toActionMatrix() const
const std::vector< bool > hasConfigurationLimitInTangent() const
void calc_aba(JointDataDerived &data, const Eigen::MatrixBase< Matrix6Like > &I, const bool update_I) const
MultiplicationOp< InertiaTpl< Scalar, Options >, ConstraintDerived >::ReturnType operator*(const InertiaTpl< Scalar, Options > &Y, const ConstraintBase< ConstraintDerived > &constraint)
.
MotionTpl< Scalar, Options > JointMotion
Eigen::Matrix< Scalar, NV, 1, Options > TangentVector_t
JointModelFreeFlyerTpl< Scalar, Options > JointModelDerived
ForceDense< Derived >::ToVectorConstReturnType operator*(const ForceDense< Derived > &phi)
#define PINOCCHIO_JOINT_TYPEDEF_TEMPLATE(Joint)