5 #ifndef __pinocchio_cartesian_product_variant_hpp__
6 #define __pinocchio_cartesian_product_variant_hpp__
8 #include "pinocchio/multibody/liegroup/liegroup-base.hpp"
9 #include "pinocchio/multibody/liegroup/liegroup-collection.hpp"
11 #include "pinocchio/container/aligned-vector.hpp"
18 int Options = context::Options,
19 template<
typename,
int>
class LieGroupCollectionTpl = LieGroupCollectionDefaultTpl>
20 struct CartesianProductOperationVariantTpl;
21 typedef CartesianProductOperationVariantTpl<
24 LieGroupCollectionDefaultTpl>
25 CartesianProductOperationVariant;
27 template<
typename _Scalar,
int _Options,
template<
typename,
int>
class LieGroupCollectionTpl>
30 typedef _Scalar Scalar;
42 template<
typename _Scalar,
int _Options,
template<
typename,
int>
class LieGroupCollectionTpl>
45 CartesianProductOperationVariantTpl<_Scalar, _Options, LieGroupCollectionTpl>>
47 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
51 typedef LieGroupCollectionTpl<Scalar, Options> LieGroupCollection;
52 typedef typename LieGroupCollection::LieGroupVariant LieGroupVariant;
107 template<
typename LieGroupDerived>
148 template<
typename LieGroupDerived>
152 append<LieGroupDerived>(lg);
165 std::string name()
const
170 ConfigVector_t neutral()
const
175 template<
class ConfigL_t,
class ConfigR_t,
class Tangent_t>
176 void difference_impl(
177 const Eigen::MatrixBase<ConfigL_t> & q0,
178 const Eigen::MatrixBase<ConfigR_t> & q1,
179 const Eigen::MatrixBase<Tangent_t> & d)
const;
181 template<ArgumentPosition arg,
class ConfigL_t,
class ConfigR_t,
class JacobianOut_t>
182 void dDifference_impl(
183 const Eigen::MatrixBase<ConfigL_t> & q0,
184 const Eigen::MatrixBase<ConfigR_t> & q1,
185 const Eigen::MatrixBase<JacobianOut_t> & J)
const;
193 void dDifference_product_impl(
194 const ConfigL_t & q0,
195 const ConfigR_t & q1,
196 const JacobianIn_t & Jin,
197 JacobianOut_t & Jout,
198 bool dDifferenceOnTheLeft,
199 const AssignmentOperatorType op)
const;
201 template<
class ConfigIn_t,
class Velocity_t,
class ConfigOut_t>
203 const Eigen::MatrixBase<ConfigIn_t> & q,
204 const Eigen::MatrixBase<Velocity_t> & v,
205 const Eigen::MatrixBase<ConfigOut_t> & qout)
const;
207 template<
class Config_t,
class Jacobian_t>
208 void integrateCoeffWiseJacobian_impl(
209 const Eigen::MatrixBase<Config_t> & q,
const Eigen::MatrixBase<Jacobian_t> & J)
const;
211 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
212 void dIntegrate_dq_impl(
213 const Eigen::MatrixBase<Config_t> & q,
214 const Eigen::MatrixBase<Tangent_t> & v,
215 const Eigen::MatrixBase<JacobianOut_t> & J,
216 const AssignmentOperatorType op = SETTO)
const;
218 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
219 void dIntegrate_dv_impl(
220 const Eigen::MatrixBase<Config_t> & q,
221 const Eigen::MatrixBase<Tangent_t> & v,
222 const Eigen::MatrixBase<JacobianOut_t> & J,
223 const AssignmentOperatorType op = SETTO)
const;
225 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
226 void dIntegrate_product_impl(
229 const JacobianIn_t & Jin,
230 JacobianOut_t & Jout,
231 bool dIntegrateOnTheLeft,
233 const AssignmentOperatorType op)
const;
235 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
236 void dIntegrateTransport_dq_impl(
237 const Eigen::MatrixBase<Config_t> & q,
238 const Eigen::MatrixBase<Tangent_t> & v,
239 const Eigen::MatrixBase<JacobianIn_t> & J_in,
240 const Eigen::MatrixBase<JacobianOut_t> & J_out)
const;
242 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
243 void dIntegrateTransport_dv_impl(
244 const Eigen::MatrixBase<Config_t> & q,
245 const Eigen::MatrixBase<Tangent_t> & v,
246 const Eigen::MatrixBase<JacobianIn_t> & J_in,
247 const Eigen::MatrixBase<JacobianOut_t> & J_out)
const;
249 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
250 void dIntegrateTransport_dq_impl(
251 const Eigen::MatrixBase<Config_t> & q,
252 const Eigen::MatrixBase<Tangent_t> & v,
253 const Eigen::MatrixBase<JacobianOut_t> & J)
const;
255 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
256 void dIntegrateTransport_dv_impl(
257 const Eigen::MatrixBase<Config_t> & q,
258 const Eigen::MatrixBase<Tangent_t> & v,
259 const Eigen::MatrixBase<JacobianOut_t> & J)
const;
261 template<
class ConfigL_t,
class ConfigR_t>
262 Scalar squaredDistance_impl(
263 const Eigen::MatrixBase<ConfigL_t> & q0,
const Eigen::MatrixBase<ConfigR_t> & q1)
const;
265 template<
class Config_t>
266 void normalize_impl(
const Eigen::MatrixBase<Config_t> & qout)
const;
268 template<
class Config_t>
269 bool isNormalized_impl(
const Eigen::MatrixBase<Config_t> & qout,
const Scalar & prec)
const;
271 template<
class Config_t>
272 void random_impl(
const Eigen::MatrixBase<Config_t> & qout)
const;
274 template<
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
275 void randomConfiguration_impl(
276 const Eigen::MatrixBase<ConfigL_t> & lower,
277 const Eigen::MatrixBase<ConfigR_t> & upper,
278 const Eigen::MatrixBase<ConfigOut_t> & qout)
const;
280 template<
class ConfigL_t,
class ConfigR_t>
281 bool isSameConfiguration_impl(
282 const Eigen::MatrixBase<ConfigL_t> & q0,
283 const Eigen::MatrixBase<ConfigR_t> & q1,
284 const Scalar & prec)
const;
288 template<
typename LieGroup1,
typename LieGroup2>
289 bool isEqual(
const CartesianProductOperation<LieGroup1, LieGroup2> & other)
const;
292 PINOCCHIO_ALIGNED_STD_VECTOR(LieGroupGeneric) liegroups;
294 std::vector<Index> lg_nqs, lg_nvs;
297 ConfigVector_t m_neutral;
302 #include <pinocchio/multibody/liegroup/cartesian-product-variant.hxx>
Main pinocchio namespace.
ArgumentPosition
Argument position. Used as template parameter to refer to an argument.
Dynamic Cartesian product composed of elementary Lie groups defined in LieGroupVariant.
CartesianProductOperationVariantTpl()
Default constructor.
CartesianProductOperationVariantTpl & operator*=(const CartesianProductOperationVariantTpl &other)
Append other to *this.
void append(const LieGroupGeneric &lg)
Append a Lie group to the Cartesian product.
CartesianProductOperationVariantTpl operator*(const CartesianProductOperationVariantTpl &other) const
Cartesian product between *this and other.
CartesianProductOperationVariantTpl(const LieGroupGeneric &lg)
Constructor with one single Lie group.
CartesianProductOperationVariantTpl(const LieGroupGeneric &lg1, const LieGroupGeneric &lg2)
Constructor with two Lie groups.
CartesianProductOperationVariantTpl & operator*=(const LieGroupGeneric &lg)
Append a Lie group to *this.
void append(const LieGroupBase< LieGroupDerived > &lg)
Append a Lie group to the Cartesian product.
CartesianProductOperationVariantTpl & operator*=(const LieGroupBase< LieGroupDerived > &lg)
Append a Lie group to *this.
Common traits structure to fully define base classes for CRTP.