5 #ifndef __pinocchio_autodiff_casadi_hpp__ 6 #define __pinocchio_autodiff_casadi_hpp__ 8 #include "pinocchio/math/fwd.hpp" 10 #include <casadi/casadi.hpp> 13 namespace boost {
namespace math {
namespace constants {
namespace detail {
15 struct constant_pi<::casadi::SX> : constant_pi<double> {};
17 template<
typename Scalar>
18 struct constant_pi< ::casadi::Matrix<Scalar> > : constant_pi<Scalar> {};
24 inline bool operator||(
const bool x,
const casadi::Matrix<SXElem> & )
32 template<
typename Scalar>
39 static ::casadi::Matrix<Scalar> precision()
41 return ::casadi::Matrix<Scalar>(Base::template precision<degree>());
52 template<
typename Scalar>
53 struct cast_impl<casadi::SX,Scalar>
55 #if EIGEN_VERSION_AT_LEAST(3,2,90) 58 static inline Scalar run(
const casadi::SX & x)
60 return static_cast<Scalar
>(x);
64 #if EIGEN_VERSION_AT_LEAST(3,2,90) && !EIGEN_VERSION_AT_LEAST(3,2,93) 65 template<
typename Scalar,
bool IsInteger>
66 struct significant_decimals_default_impl< ::casadi::Matrix<Scalar>,IsInteger>
68 static inline int run()
70 return std::numeric_limits<Scalar>::digits10;
81 template<
typename Scalar>
82 struct NumTraits<
casadi::Matrix<Scalar> >
84 using Real = casadi::Matrix<Scalar>;
85 using NonInteger = casadi::Matrix<Scalar>;
86 using Literal = casadi::Matrix<Scalar>;
87 using Nested = casadi::Matrix<Scalar>;
97 RequireInitialization = 1 ,
104 static casadi::Matrix<Scalar> epsilon()
106 return casadi::Matrix<Scalar>(std::numeric_limits<double>::epsilon());
109 static casadi::Matrix<Scalar> dummy_precision()
111 return casadi::Matrix<Scalar>(NumTraits<double>::dummy_precision());
114 static casadi::Matrix<Scalar> highest()
116 return casadi::Matrix<Scalar>(std::numeric_limits<double>::max());
119 static casadi::Matrix<Scalar> lowest()
121 return casadi::Matrix<Scalar>(std::numeric_limits<double>::min());
124 static int digits10()
126 return std::numeric_limits<double>::digits10;
136 template<
typename MT,
typename Scalar>
137 inline void copy(::casadi::Matrix<Scalar>
const & src,
138 Eigen::MatrixBase<MT> & dst)
140 Eigen::Index
const m = src.size1();
141 Eigen::Index
const n = src.size2();
145 for (Eigen::Index i = 0; i < m; ++i)
146 for (Eigen::Index j = 0; j < n; ++j)
147 dst(i, j) = src(i, j);
152 template<
typename MT,
typename Scalar>
153 inline void copy(Eigen::MatrixBase<MT>
const & src,
154 ::casadi::Matrix<Scalar> & dst)
156 Eigen::Index
const m = src.rows();
157 Eigen::Index
const n = src.cols();
161 for (Eigen::Index i = 0; i < m; ++i)
162 for (Eigen::Index j = 0; j < n; ++j)
163 dst(i, j) = src(i, j);
167 template<
typename MatrixDerived>
168 inline void sym(
const Eigen::MatrixBase<MatrixDerived> & eig_mat,
169 std::string
const & name)
171 typedef typename MatrixDerived::Scalar SX;
173 MatrixDerived & eig_mat_ = PINOCCHIO_EIGEN_CONST_CAST(MatrixDerived,eig_mat);
174 for (Eigen::Index i = 0; i < eig_mat.rows(); ++i)
175 for (Eigen::Index j = 0; j < eig_mat.cols(); ++j)
176 eig_mat_(i, j) = SX::sym(name +
"_" + std::to_string(i) +
"_" + std::to_string(j));
189 template<
typename Scalar>
190 struct return_type_max< ::casadi::Matrix<Scalar>,::casadi::Matrix<Scalar>>
192 typedef ::casadi::Matrix<Scalar> type;
195 template<
typename Scalar,
typename T>
196 struct return_type_max< ::casadi::Matrix<Scalar>,T>
198 typedef ::casadi::Matrix<Scalar> type;
201 template<
typename Scalar,
typename T>
202 struct return_type_max<T,::casadi::Matrix<Scalar> >
204 typedef ::casadi::Matrix<Scalar> type;
207 template<
typename Scalar>
208 struct call_max< ::casadi::Matrix<Scalar>,::casadi::Matrix<Scalar> >
210 static inline ::casadi::Matrix<Scalar> run(const ::casadi::Matrix<Scalar> & a,
211 const ::casadi::Matrix<Scalar> & b)
212 {
return fmax(a,b); }
215 template<
typename S1,
typename S2>
216 struct call_max< ::casadi::Matrix<S1>,S2>
218 typedef ::casadi::Matrix<S1> CasadiType;
219 static inline ::casadi::Matrix<S1> run(const ::casadi::Matrix<S1> & a,
221 {
return fmax(a,static_cast<CasadiType>(b)); }
224 template<
typename S1,
typename S2>
225 struct call_max<S1,::casadi::Matrix<S2>>
227 typedef ::casadi::Matrix<S2> CasadiType;
228 static inline ::casadi::Matrix<S2> run(
const S1 & a,
229 const ::casadi::Matrix<S2> & b)
230 {
return fmax(static_cast<CasadiType>(a),b); }
238 #include "pinocchio/autodiff/casadi/spatial/se3-tpl.hpp" 239 #include "pinocchio/autodiff/casadi/utils/static-if.hpp" 240 #include "pinocchio/autodiff/casadi/math/matrix.hpp" 241 #include "pinocchio/autodiff/casadi/math/quaternion.hpp" 243 #endif // #ifndef __pinocchio_autodiff_casadi_hpp__
Main pinocchio namespace.