5 #ifndef __pinocchio_autodiff_cppad_hpp__
6 #define __pinocchio_autodiff_cppad_hpp__
8 #include "pinocchio/math/fwd.hpp"
9 #define PINOCCHIO_WITH_CPPAD_SUPPORT
16 #define EIGEN_MATRIXBASE_PLUGIN <pinocchio/autodiff/cppad/math/eigen_plugin.hpp>
18 #include <cppad/cppad.hpp>
19 #include <Eigen/Dense>
29 template<
typename Scalar>
30 struct constant_pi< CppAD::AD<Scalar> > : constant_pi<Scalar>
32 typedef CppAD::AD<Scalar> ADScalar;
35 static inline ADScalar get(
const mpl::int_<N>& n)
37 return ADScalar(constant_pi<Scalar>::get(n));
51 template<
typename Scalar>
52 struct cast_impl<CppAD::AD<Scalar>,Scalar>
54 #if EIGEN_VERSION_AT_LEAST(3,2,90)
57 static inline Scalar run(
const CppAD::AD<Scalar> & x)
59 return CppAD::Value(x);
68 template <
class Base>
struct NumTraits< CppAD::AD<Base> >
70 typedef CppAD::AD<Base> Real;
72 typedef CppAD::AD<Base> NonInteger;
74 typedef CppAD::AD<Base> Literal;
76 typedef CppAD::AD<Base> Nested;
86 RequireInitialization = 1 ,
95 static CppAD::AD<Base> epsilon(
void)
96 {
return CppAD::numeric_limits< CppAD::AD<Base> >::epsilon(); }
100 static CppAD::AD<Base> dummy_precision(
void)
102 CppAD::numeric_limits< CppAD::AD<Base> >::epsilon();
106 static CppAD::AD<Base> lowest(
void)
107 {
return CppAD::numeric_limits< CppAD::AD<Base> >::min(); }
110 static CppAD::AD<Base> highest(
void)
111 {
return CppAD::numeric_limits< CppAD::AD<Base> >::max(); }
114 static int digits10(
void)
115 {
return CppAD::numeric_limits< CppAD::AD<Base> >::digits10; }
120 #include "pinocchio/utils/static-if.hpp"
126 template <
class Base>
const AD<Base>& conj(
const AD<Base>& x)
128 template <
class Base>
const AD<Base>& real(
const AD<Base>& x)
132 template <
class Base> AD<Base> imag(
const AD<Base>& )
133 {
return CppAD::AD<Base>(0.); }
134 template <
class Base> AD<Base> abs2(
const AD<Base>& x)
137 template<
typename Scalar>
138 AD<Scalar> min(
const AD<Scalar>& x,
const AD<Scalar>& y)
140 using ::pinocchio::internal::if_then_else;
141 using ::pinocchio::internal::LT;
142 return if_then_else(LT, y, x, y, x);
145 template<
typename Scalar>
146 AD<Scalar> max(
const AD<Scalar>& x,
const AD<Scalar>& y)
148 using ::pinocchio::internal::if_then_else;
149 using ::pinocchio::internal::LT;
150 return if_then_else(LT, x, y, y, x);
155 #include "pinocchio/utils/static-if.hpp"
159 template<
typename Scalar>
163 typedef CppAD::AD<Scalar> ADScalar;
168 return ADScalar(Base::template precision<degree>());
175 #include "pinocchio/autodiff/cppad/spatial/se3-tpl.hpp"
176 #include "pinocchio/autodiff/cppad/spatial/log.hxx"
177 #include "pinocchio/autodiff/cppad/utils/static-if.hpp"
178 #include "pinocchio/autodiff/cppad/math/quaternion.hpp"
179 #include "pinocchio/autodiff/cppad/algorithm/aba.hpp"
182 #endif // #ifndef __pinocchio_autodiff_cppad_hpp__