18 #ifndef __se3_lie_group_operation_base_hpp__ 19 #define __se3_lie_group_operation_base_hpp__ 21 #include "pinocchio/macros.hpp" 22 #include "pinocchio/spatial/fwd.hpp" 30 #define SE3_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived,TYPENAME) \ 31 typedef LieGroupBase<Derived> Base; \ 32 typedef TYPENAME Base::Index Index; \ 33 typedef TYPENAME traits<Derived>::Scalar Scalar; \ 38 typedef TYPENAME Base::ConfigVector_t ConfigVector_t; \ 39 typedef TYPENAME Base::TangentVector_t TangentVector_t; \ 40 typedef TYPENAME Base::JacobianMatrix_t JacobianMatrix_t 42 #define SE3_LIE_GROUP_PUBLIC_INTERFACE(Derived) \ 43 SE3_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived,PINOCCHIO_MACRO_EMPTY_ARG) 45 #define SE3_LIE_GROUP_TPL_PUBLIC_INTERFACE(Derived) \ 46 SE3_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived,typename) 48 template<
typename Derived>
51 typedef Derived LieGroupDerived;
59 typedef Eigen::Matrix<Scalar,NQ,1> ConfigVector_t;
60 typedef Eigen::Matrix<Scalar,NV,1> TangentVector_t;
61 typedef Eigen::Matrix<Scalar,NV,NV> JacobianMatrix_t;
74 template <
class ConfigIn_t,
class Tangent_t,
class ConfigOut_t>
75 void integrate(
const Eigen::MatrixBase<ConfigIn_t> & q,
76 const Eigen::MatrixBase<Tangent_t> & v,
77 const Eigen::MatrixBase<ConfigOut_t>& qout)
const;
87 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
89 const Eigen::MatrixBase<Tangent_t> & v,
90 const Eigen::MatrixBase<JacobianOut_t>& J)
const;
100 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
102 const Eigen::MatrixBase<Tangent_t> & v,
103 const Eigen::MatrixBase<JacobianOut_t>& J)
const;
114 template <
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
115 void interpolate(
const Eigen::MatrixBase<ConfigL_t> & q0,
116 const Eigen::MatrixBase<ConfigR_t> & q1,
118 const Eigen::MatrixBase<ConfigOut_t>& qout)
const;
126 template <
class Config_t>
127 void normalize (
const Eigen::MatrixBase<Config_t>& qout)
const;
137 template <
class Config_t>
138 void random (
const Eigen::MatrixBase<Config_t>& qout)
const;
149 template <
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
151 (
const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
152 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit,
153 const Eigen::MatrixBase<ConfigOut_t> & qout)
const;
163 template <
class ConfigL_t,
class ConfigR_t,
class Tangent_t>
164 void difference(
const Eigen::MatrixBase<ConfigL_t> & q0,
165 const Eigen::MatrixBase<ConfigR_t> & q1,
166 const Eigen::MatrixBase<Tangent_t>& v)
const;
177 template <
class ConfigL_t,
class ConfigR_t,
class JacobianLOut_t,
class JacobianROut_t>
178 void Jdifference(
const Eigen::MatrixBase<ConfigL_t> & q0,
179 const Eigen::MatrixBase<ConfigR_t> & q1,
180 const Eigen::MatrixBase<JacobianLOut_t>& J0,
181 const Eigen::MatrixBase<JacobianROut_t>& J1)
const;
191 template <
class ConfigL_t,
class ConfigR_t>
193 const Eigen::MatrixBase<ConfigR_t> & q1)
const;
203 template <
class ConfigL_t,
class ConfigR_t>
204 Scalar
distance(
const Eigen::MatrixBase<ConfigL_t> & q0,
205 const Eigen::MatrixBase<ConfigR_t> & q1)
const;
213 template <
class ConfigL_t,
class ConfigR_t>
215 const Eigen::MatrixBase<ConfigR_t> & q1,
216 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const;
222 template <
class Config_t,
class Tangent_t>
223 ConfigVector_t
integrate(
const Eigen::MatrixBase<Config_t> & q,
224 const Eigen::MatrixBase<Tangent_t> & v)
const ;
226 template <
class ConfigL_t,
class ConfigR_t>
227 ConfigVector_t
interpolate(
const Eigen::MatrixBase<ConfigL_t> & q0,
228 const Eigen::MatrixBase<ConfigR_t> & q1,
229 const Scalar& u)
const;
231 ConfigVector_t random()
const;
233 template <
class ConfigL_t,
class ConfigR_t>
235 (
const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
236 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit)
const;
238 template <
class ConfigL_t,
class ConfigR_t>
239 TangentVector_t
difference(
const Eigen::MatrixBase<ConfigL_t> & q0,
240 const Eigen::MatrixBase<ConfigR_t> & q1)
const;
247 template <
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
248 void interpolate_impl(
const Eigen::MatrixBase<ConfigL_t> & q0,
249 const Eigen::MatrixBase<ConfigR_t> & q1,
251 const Eigen::MatrixBase<ConfigOut_t>& qout)
const;
253 template <
class Config_t>
254 void normalize_impl(
const Eigen::MatrixBase<Config_t> & qout)
const;
256 template <
class ConfigL_t,
class ConfigR_t>
257 Scalar squaredDistance_impl(
const Eigen::MatrixBase<ConfigL_t> & q0,
258 const Eigen::MatrixBase<ConfigR_t> & q1)
const;
260 template <
class ConfigL_t,
class ConfigR_t>
261 bool isSameConfiguration_impl(
const Eigen::MatrixBase<ConfigL_t> & q0,
262 const Eigen::MatrixBase<ConfigR_t> & q1,
263 const Scalar & prec)
const;
272 ConfigVector_t
neutral ()
const;
275 std::string
name ()
const;
279 return static_cast <Derived&> (*this);
282 const Derived& derived ()
const 284 return static_cast <
const Derived&> (*this);
302 #include "pinocchio/multibody/liegroup/operation-base.hxx" 304 #endif // ifndef __se3_lie_group_operation_base_hpp__
LieGroupBase(const LieGroupBase &)
Scalar distance(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1) const
Distance between two configurations of the joint.
void normalize(const Eigen::MatrixBase< Config_t > &qout) const
Normalize the joint configuration given as input. For instance, the quaternion must be unitary...
void integrate(const Eigen::MatrixBase< ConfigIn_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< ConfigOut_t > &qout) const
Integrate a joint's configuration with a tangent vector during one unit time duration.
std::string name() const
Get name of instance.
void interpolate(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1, const Scalar &u, const Eigen::MatrixBase< ConfigOut_t > &qout) const
Interpolation between two joint's configurations.
void dIntegrate_dq(const Eigen::MatrixBase< Config_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< JacobianOut_t > &J) const
Computes the Jacobian of the Integrate operation.
Scalar squaredDistance(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1) const
Squared distance between two joint configurations.
bool isSameConfiguration(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1, const Scalar &prec=Eigen::NumTraits< Scalar >::dummy_precision()) const
Check if two configurations are equivalent within the given precision.
void randomConfiguration(const Eigen::MatrixBase< ConfigL_t > &lower_pos_limit, const Eigen::MatrixBase< ConfigR_t > &upper_pos_limit, const Eigen::MatrixBase< ConfigOut_t > &qout) const
Generate a configuration vector uniformly sampled among provided limits.
Index nv() const
Get dimension of Lie Group tangent space.
void random(const Eigen::MatrixBase< Config_t > &qout) const
Generate a random joint configuration, normalizing quaternions when necessary.
ConfigVector_t neutral() const
Get neutral element as a vector.
void dIntegrate_dv(const Eigen::MatrixBase< Config_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< JacobianOut_t > &J) const
Computes the Jacobian of the Integrate operation.
void Jdifference(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1, const Eigen::MatrixBase< JacobianLOut_t > &J0, const Eigen::MatrixBase< JacobianROut_t > &J1) const
Computes the Jacobian of the difference operation.
void difference(const Eigen::MatrixBase< ConfigL_t > &q0, const Eigen::MatrixBase< ConfigR_t > &q1, const Eigen::MatrixBase< Tangent_t > &v) const
Computes the tangent vector that must be integrated during one unit time to go from q0 to q1...