6#ifndef __pinocchio_python_explog_hpp__
7#define __pinocchio_python_explog_hpp__
9#include "pinocchio/spatial/explog.hpp"
16 template<
typename Vector3Like>
18 Matrix<
typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
19 exp3_proxy(const Vector3Like & v)
24 template<
typename Vector3Like>
26 Matrix<
typename Vector3Like::Scalar, 4, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
27 exp3_proxy_quat(const Vector3Like & v)
29 typedef typename Vector3Like::Scalar Scalar;
30 typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
32 typedef Eigen::Map<Quaternion_t> QuaternionMap_t;
33 typedef Eigen::Matrix<Scalar, 4, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
36 QuaternionMap_t quat_out(res.derived().data());
41 template<
typename Vector3Like>
43 Matrix<
typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
44 Jexp3_proxy(const Vector3Like & v)
46 typedef Eigen::Matrix<
47 typename Vector3Like::Scalar, 3, 3, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector3Like)::Options>
54 template<
typename Matrix3Like>
55 typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) Jlog3_proxy(
const Matrix3Like & M)
57 typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) ReturnType;
63 template<
typename Matrix3Like,
typename Vector3Like>
64 typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)
65 Hlog3_proxy(
const Matrix3Like & M,
const Vector3Like & v)
67 typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like) ReturnType;
73 template<
typename Scalar,
int Options>
74 SE3Tpl<Scalar, Options> exp6_proxy(
const MotionTpl<Scalar, Options> & v)
79 template<
typename Vector6Like>
80 SE3Tpl<
typename Vector6Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options>
81 exp6_proxy(const Vector6Like & vec6)
86 template<
typename Vector6Like>
88 Matrix<
typename Vector6Like::Scalar, 7, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options>
89 exp6_proxy_quatvec(const Vector6Like & vec6)
91 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector6Like, 6);
95 template<
typename Scalar,
int Options>
96 typename SE3Tpl<Scalar, Options>::Matrix6 Jlog6_proxy(
const SE3Tpl<Scalar, Options> & M)
98 typedef typename SE3Tpl<Scalar, Options>::Matrix6 ReturnType;
104 template<
typename Scalar,
int Options>
105 typename MotionTpl<Scalar, Options>::Matrix6 Jexp6_proxy(
const MotionTpl<Scalar, Options> & v)
107 typedef typename MotionTpl<Scalar, Options>::Matrix6 ReturnType;
113 template<
typename Vector6Like>
115 Matrix<
typename Vector6Like::Scalar, 6, 6, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6Like)::Options>
116 Jexp6_proxy(const Vector6Like & vec6)
118 typedef MotionRef<const Vector6Like> Motion;
120 typedef typename Motion::Matrix6 ReturnType;
126 template<
typename Matrix3Like>
128 Matrix<
typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options>
129 log3_proxy(const Matrix3Like & R)
134 template<
typename Matrix3Like,
typename Matrix1Like>
136 Matrix<
typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options>
137 log3_proxy(const Matrix3Like & R, Eigen::Ref<Matrix1Like> theta)
139 return log3(R, theta.coeffRef(0, 0));
142 template<
typename Matrix3Like,
typename Scalar>
144 Matrix<
typename Matrix3Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix3Like)::Options>
145 log3_proxy_fix(const Matrix3Like & R, Scalar & theta)
147 return log3(R, theta);
150 template<
typename QuaternionLike>
152 typename QuaternionLike::Scalar,
155 PINOCCHIO_EIGEN_PLAIN_TYPE(
typename QuaternionLike::Vector3)::Options>
156 log3_proxy(const QuaternionLike & quat)
161 template<
typename Vector4Like>
163 Matrix<
typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
164 log3_proxy_quatvec(const Vector4Like & v)
166 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4);
167 typedef typename Vector4Like::Scalar Scalar;
168 typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
170 typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t;
172 ConstQuaternionMap_t q(v.derived().data());
177 template<
typename Vector4Like,
typename Matrix1Like>
179 Matrix<
typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
180 log3_proxy_quatvec(const Vector4Like & v, Eigen::Ref<Matrix1Like> theta)
182 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4);
183 typedef typename Vector4Like::Scalar Scalar;
184 typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
186 typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t;
188 ConstQuaternionMap_t q(v.derived().data());
194 template<
typename Vector4Like,
typename _Scalar>
196 Matrix<
typename Vector4Like::Scalar, 3, 1, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
197 log3_proxy_quatvec_fix(const Vector4Like & v, _Scalar & theta)
199 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector4Like, 4);
200 typedef typename Vector4Like::Scalar Scalar;
201 typedef Eigen::Quaternion<Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector4Like)::Options>
203 typedef Eigen::Map<const Quaternion_t> ConstQuaternionMap_t;
205 ConstQuaternionMap_t q(v.derived().data());
211 template<
typename Matrix4Like>
212 MotionTpl<
typename Matrix4Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Matrix4Like)::Options>
213 log6_proxy(const Matrix4Like & homegenous_matrix)
215 return log6(homegenous_matrix);
218 template<
typename Vector7Like>
219 MotionTpl<
typename Vector7Like::Scalar, PINOCCHIO_EIGEN_PLAIN_TYPE(Vector7Like)::Options>
220 log6_proxy_quatvec(const Vector7Like & q)
222 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector7Like, 7);
223 typedef typename Vector7Like::Scalar Scalar;
226 Options = PINOCCHIO_EIGEN_PLAIN_TYPE(Vector7Like)::Options
228 typedef Eigen::Quaternion<Scalar, Options> Quaternion;
229 typedef Eigen::Map<const Quaternion, Options> ConstQuaternionMap;
230 typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3;
232 const Vector3 v(q.derived().template head<3>());
233 ConstQuaternionMap quat(q.derived().template tail<4>().data());
235 return log6(quat, v);
bool isNormalized(const Eigen::QuaternionBase< Quaternion > &quat, const typename Quaternion::Coefficients::RealScalar &prec)
Check whether the input quaternion is Normalized within the given precision.
void exp6(const MotionDense< MotionDerived > &motion, Eigen::MatrixBase< Config_t > &qout)
The se3 -> SE3 exponential map, using quaternions to represent the output rotation.
Eigen::Matrix< typename QuaternionLike::Scalar, 3, 1, typename QuaternionLike::Vector3 ::Options > log3(const Eigen::QuaternionBase< QuaternionLike > &quat, typename QuaternionLike::Scalar &theta)
Same as log3 but with a unit quaternion as input.
void exp3(const Eigen::MatrixBase< Vector3Like > &v, Eigen::QuaternionBase< QuaternionLike > &quat_out)
Exp: so3 -> SO3 (quaternion)
Main pinocchio namespace.
void Jlog3(const Scalar &theta, const Eigen::MatrixBase< Vector3Like > &log, const Eigen::MatrixBase< Matrix3Like > &Jlog)
Derivative of log3.
Eigen::Matrix< typename Matrix3Like::Scalar, 3, 1, Matrix3Like ::Options > log3(const Eigen::MatrixBase< Matrix3Like > &R, typename Matrix3Like::Scalar &theta)
Same as log3.
Eigen::Matrix< typename Vector3Like::Scalar, 3, 3, Vector3Like ::Options > exp3(const Eigen::MatrixBase< Vector3Like > &v)
Exp: so3 -> SO3.
MotionTpl< Scalar, Options > log6(const SE3Tpl< Scalar, Options > &M)
Log: SE3 -> se3.
SE3Tpl< typename MotionDerived::Scalar, typename MotionDerived::Vector3 ::Options > exp6(const MotionDense< MotionDerived > &nu)
Exp: se3 -> SE3.
void Jlog6(const SE3Tpl< Scalar, Options > &M, const Eigen::MatrixBase< Matrix6Like > &Jlog)
Derivative of log6.
void Jexp6(const MotionDense< MotionDerived > &nu, const Eigen::MatrixBase< Matrix6Like > &Jexp)
Derivative of exp6 Computed as the inverse of Jlog6.
void Jexp3(const Eigen::MatrixBase< Vector3Like > &r, const Eigen::MatrixBase< Matrix3Like > &Jexp)
Derivative of .