autodiff/cppad/math/quaternion.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2019-2020 INRIA CNRS
3 //
4 
5 #ifndef __pinocchio_autodiff_cppad_math_quaternion_hpp__
6 #define __pinocchio_autodiff_cppad_math_quaternion_hpp__
7 
9 
10 namespace pinocchio
11 {
12  namespace quaternion
13  {
14 
15  namespace internal
16  {
17 
18  template<typename _Scalar>
19  struct quaternionbase_assign_impl<CppAD::AD<_Scalar>, false>
20  {
21  typedef _Scalar Scalar;
22  typedef CppAD::AD<Scalar> ADScalar;
23  template<typename Matrix3, typename QuaternionDerived>
24  static inline void run(Eigen::QuaternionBase<QuaternionDerived> & q, const Matrix3 & mat)
25  {
26  typedef
27  typename Eigen::internal::traits<QuaternionDerived>::Coefficients QuatCoefficients;
28 
29  typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(QuatCoefficients) QuatCoefficientsPlainType;
30  typedef Eigen::Quaternion<ADScalar, QuatCoefficientsPlainType::Options> QuaternionPlain;
31  QuaternionPlain quat_t_positive;
32 
33  ADScalar t = mat.trace();
35 
36  QuaternionPlain quat_t_negative_0, quat_t_negative_1, quat_t_negative_2;
37 
41 
42  // Build the expression graph
43  for (Eigen::DenseIndex k = 0; k < 4; ++k)
44  {
45  ADScalar t_is_negative_cond1 = CppAD::CondExpGt<Scalar>(
46  mat.coeff(1, 1), mat.coeff(0, 0), quat_t_negative_1.coeffs().coeff(k),
47  quat_t_negative_0.coeffs().coeff(k));
48 
49  ADScalar t_is_negative_cond2 = CppAD::CondExpGt<Scalar>(
50  mat.coeff(2, 2), mat.coeff(0, 0), quat_t_negative_2.coeffs().coeff(k),
51  CppAD::CondExpGt<Scalar>(
52  mat.coeff(1, 1), mat.coeff(0, 0),
53  CppAD::CondExpGt<Scalar>(
54  mat.coeff(2, 2), mat.coeff(1, 1), quat_t_negative_2.coeffs().coeff(k),
55  t_is_negative_cond1),
56  t_is_negative_cond1));
57  q.coeffs().coeffRef(k) = CppAD::CondExpGt<Scalar>(
58  t, ADScalar(0), quat_t_positive.coeffs().coeff(k), t_is_negative_cond2);
59  }
60  }
61  };
62 
63  } // namespace internal
64 
65  } // namespace quaternion
66 
67 } // namespace pinocchio
68 
69 #endif // ifndef __pinocchio_autodiff_casadi_math_quaternion_hpp__
quaternion.hpp
pinocchio::quaternion::internal::quaternionbase_assign_impl_if_t_negative::run
static void run(Scalar t, Eigen::QuaternionBase< QuaternionDerived > &q, const Matrix3 &mat)
Definition: math/quaternion.hpp:150
pinocchio::quaternion::internal::quaternionbase_assign_impl
Definition: math/quaternion.hpp:143
pinocchio::quaternion::internal::quaternionbase_assign_impl< CppAD::AD< _Scalar >, false >::ADScalar
CppAD::AD< Scalar > ADScalar
Definition: autodiff/cppad/math/quaternion.hpp:22
pinocchio::quaternion::internal::quaternionbase_assign_impl< CppAD::AD< _Scalar >, false >::run
static void run(Eigen::QuaternionBase< QuaternionDerived > &q, const Matrix3 &mat)
Definition: autodiff/cppad/math/quaternion.hpp:24
CppAD
Definition: autodiff/cppad.hpp:146
pinocchio::quaternion::internal::quaternionbase_assign_impl_if_t_positive::run
static void run(Scalar t, Eigen::QuaternionBase< QuaternionDerived > &q, const Matrix3 &mat)
Definition: math/quaternion.hpp:170
mat
mat
pinocchio::q
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
Definition: joint-configuration.hpp:1083
ADScalar
CppAD::AD< Scalar > ADScalar
Definition: timings-cppad-jit.cpp:38
t
Transform3f t
pinocchio::PINOCCHIO_EIGEN_PLAIN_TYPE
PINOCCHIO_EIGEN_PLAIN_TYPE(ConfigVectorType) integrate(const ModelTpl< Scalar
Integrate a configuration vector for the specified model for a tangent vector during one unit time.
pinocchio::quaternion::internal::quaternionbase_assign_impl< CppAD::AD< _Scalar >, false >::Scalar
_Scalar Scalar
Definition: autodiff/cppad/math/quaternion.hpp:21
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33


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