6 #ifndef __pinocchio_python_spatial_force_hpp__
7 #define __pinocchio_python_spatial_force_hpp__
11 #include <boost/python/tuple.hpp>
20 #if EIGENPY_VERSION_AT_MOST(2, 8, 1)
33 template<
typename Scalar,
int Options>
41 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
43 return self.isApprox(other, prec);
47 isZero(
const Force &
self,
const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
49 return self.isZero(prec);
53 template<
typename Force>
68 template<
class PyClass>
71 static const Scalar dummy_precision = Eigen::NumTraits<Scalar>::dummy_precision();
74 cl.def(bp::init<>(bp::arg(
"self"),
"Default constructor"))
75 .def(bp::init<const Vector3 &, const Vector3 &>(
76 (bp::arg(
"self"), bp::arg(
"linear"), bp::arg(
"angular")),
77 "Initialize from linear and angular components of a Wrench vector (don't mix the "
79 .def(bp::init<const Vector6 &>(
80 (bp::args(
"self",
"array")),
"Init from a vector 6 [force,torque]"))
81 .def(bp::init<const Force &>((bp::arg(
"self"), bp::arg(
"clone")),
"Copy constructor"))
88 "Linear part of a *this, corresponding to the linear velocity in case of a "
95 "Angular part of a *this, corresponding to the angular velocity in case of "
96 "a Spatial velocity.")
100 (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
101 bp::return_internal_reference<>()),
104 "np", bp::make_function(
105 (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
106 bp::return_internal_reference<>()))
109 "se3Action", &Force::template se3Action<Scalar, Options>, bp::args(
"self",
"M"),
110 "Returns the result of the dual action of M on *this.")
112 "se3ActionInverse", &Force::template se3ActionInverse<Scalar, Options>,
113 bp::args(
"self",
"M"),
114 "Returns the result of the dual action of the inverse of M on *this.")
118 "Set the linear and angular components of *this to zero.")
121 "Set the linear and angular components of *this to random values.")
125 bp::args(
"self",
"m"),
"Dot product between *this and a Motion m.")
127 .def(bp::self + bp::self)
128 .def(bp::self += bp::self)
129 .def(bp::self - bp::self)
130 .def(bp::self -= bp::self)
133 #ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS
134 .def(bp::self == bp::self)
135 .def(bp::self != bp::self)
142 #ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS
145 (bp::arg(
"self"), bp::arg(
"other"), bp::arg(
"prec") = dummy_precision),
146 "Returns true if *this is approximately equal to other, within the precision given "
151 "Returns true if *this is approximately equal to the zero Force, within the "
152 "precision given by prec.")
156 .staticmethod(
"Random")
157 .def(
"Zero", &
Force::Zero,
"Returns a zero Force.")
158 .staticmethod(
"Zero")
161 "__array__", bp::make_function(
162 (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
163 bp::return_internal_reference<>()))
166 (bp::arg(
"self"), bp::arg(
"dtype") = bp::object(), bp::arg(
"copy") = bp::object()),
167 bp::return_internal_reference<>())
168 #ifndef PINOCCHIO_PYTHON_NO_SERIALIZATION
178 bp::objects::register_dynamic_id<ForceBase>();
179 bp::objects::register_conversion<Force, ForceBase>(
false);
182 bp::objects::register_dynamic_id<ForceBase>();
183 bp::objects::register_conversion<Force, ForceDense>(
false);
185 #if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 6 && EIGENPY_VERSION_AT_LEAST(2, 9, 0)
188 typedef ::boost::python::detail::not_specified HolderType;
190 bp::class_<Force, HolderType>(
192 "Force vectors, in se3* == F^6.\n\n"
193 "Supported operations ...",
203 static typename Force::ToVectorConstReturnType
206 return self.toVector();
224 return self.linear();
232 return self.angular();
257 #endif // ifndef __pinocchio_python_spatial_force_hpp__