joints-models.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2022 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_python_joints_models_hpp__
6 #define __pinocchio_python_joints_models_hpp__
7 
8 #include <boost/python.hpp>
9 
14 
16 
17 namespace pinocchio
18 {
19  namespace python
20  {
21  namespace bp = boost::python;
22 
23  // generic expose_joint_model : do nothing special
24  template<class T>
25  bp::class_<T> & expose_joint_model(bp::class_<T> & cl)
26  {
27  return cl;
28  }
29 
30  // specialization for JointModelRevolute
31  template<>
32  bp::class_<context::JointModelRX> &
33  expose_joint_model<context::JointModelRX>(bp::class_<context::JointModelRX> & cl)
34  {
35  return cl
36  .def(bp::init<>(
37  bp::args("self"), "Init JointModelRX with the X axis ([1, 0, 0]) as rotation axis."))
38  .def(
39  "getMotionAxis", &context::JointModelRX::getMotionAxis,
40  "Rotation axis of the JointModelRX.");
41  }
42 
43  template<>
44  bp::class_<context::JointModelRY> &
45  expose_joint_model<context::JointModelRY>(bp::class_<context::JointModelRY> & cl)
46  {
47  return cl
48  .def(bp::init<>(
49  bp::args("self"), "Init JointModelRY with the Y axis ([0, 1, 0]) as rotation axis."))
50  .def(
51  "getMotionAxis", &context::JointModelRY::getMotionAxis,
52  "Rotation axis of the JointModelRY.");
53  }
54 
55  template<>
56  bp::class_<context::JointModelRZ> &
57  expose_joint_model<context::JointModelRZ>(bp::class_<context::JointModelRZ> & cl)
58  {
59  return cl
60  .def(bp::init<>(
61  bp::args("self"), "Init JointModelRZ with the Z axis ([0, 0, 1]) as rotation axis"))
62  .def(
63  "getMotionAxis", &context::JointModelRZ::getMotionAxis,
64  "Rotation axis of the JointModelRZ.");
65  }
66 
67  // specialization for JointModelRevoluteUnaligned
68  template<>
69  bp::class_<context::JointModelRevoluteUnaligned> &
70  expose_joint_model<context::JointModelRevoluteUnaligned>(
71  bp::class_<context::JointModelRevoluteUnaligned> & cl)
72  {
73  return cl
74  .def(bp::init<context::Scalar, context::Scalar, context::Scalar>(
75  bp::args("self", "x", "y", "z"),
76  "Init JointModelRevoluteUnaligned from the components x, y, z of the axis"))
77  .def(bp::init<const context::Vector3s &>(
78  bp::args("self", "axis"),
79  "Init JointModelRevoluteUnaligned from an axis with x-y-z components"))
80  .def_readwrite(
82  "Rotation axis of the JointModelRevoluteUnaligned.");
83  }
84 
85  // specialization for JointModelRevoluteUnbounded
86  template<>
87  bp::class_<context::JointModelRUBX> &
88  expose_joint_model<context::JointModelRUBX>(bp::class_<context::JointModelRUBX> & cl)
89  {
90  return cl
91  .def(bp::init<>(
92  bp::args("self"), "Init JointModelRUBX with the X axis ([1, 0, 0]) as rotation axis"))
93  .def(
95  "Rotation axis of the JointModelRUBX.");
96  }
97 
98  template<>
99  bp::class_<context::JointModelRUBY> &
100  expose_joint_model<context::JointModelRUBY>(bp::class_<context::JointModelRUBY> & cl)
101  {
102  return cl
103  .def(bp::init<>(
104  bp::args("self"), "Init JointModelRUBY with the Y axis ([0, 1, 0]) as rotation axis"))
105  .def(
106  "getMotionAxis", &context::JointModelRUBY::getMotionAxis,
107  "Rotation axis of the JointModelRUBY.");
108  }
109 
110  template<>
111  bp::class_<context::JointModelRUBZ> &
112  expose_joint_model<context::JointModelRUBZ>(bp::class_<context::JointModelRUBZ> & cl)
113  {
114  return cl
115  .def(bp::init<>(
116  bp::args("self"), "Init JointModelRUBZ with the Z axis ([0, 0, 1]) as rotation axis"))
117  .def(
118  "getMotionAxis", &context::JointModelRUBZ::getMotionAxis,
119  "Rotation axis of the JointModelRUBZ.");
120  }
121 
122  // specialization for JointModelPrismatic
123  template<>
124  bp::class_<context::JointModelPX> &
125  expose_joint_model<context::JointModelPX>(bp::class_<context::JointModelPX> & cl)
126  {
127  return cl
128  .def(bp::init<>(
129  bp::args("self"), "Init JointModelPX with the X axis ([1, 0, 0]) as rotation axis"))
130  .def(
131  "getMotionAxis", &context::JointModelPX::getMotionAxis,
132  "Rotation axis of the JointModelPX.");
133  }
134 
135  template<>
136  bp::class_<context::JointModelPY> &
137  expose_joint_model<context::JointModelPY>(bp::class_<context::JointModelPY> & cl)
138  {
139  return cl
140  .def(bp::init<>(
141  bp::args("self"), "Init JointModelPY with the Y axis ([0, 1, 0]) as rotation axis"))
142  .def(
143  "getMotionAxis", &context::JointModelPY::getMotionAxis,
144  "Rotation axis of the JointModelPY.");
145  }
146 
147  template<>
148  bp::class_<context::JointModelPZ> &
149  expose_joint_model<context::JointModelPZ>(bp::class_<context::JointModelPZ> & cl)
150  {
151  return cl
152  .def(bp::init<>(
153  bp::args("self"), "Init JointModelPZ with the Z axis ([0, 0, 1]) as rotation axis"))
154  .def(
155  "getMotionAxis", &context::JointModelPZ::getMotionAxis,
156  "Rotation axis of the JointModelPZ.");
157  }
158 
159  // specialization for JointModelPrismaticUnaligned
160  template<>
161  bp::class_<context::JointModelPrismaticUnaligned> &
162  expose_joint_model<context::JointModelPrismaticUnaligned>(
163  bp::class_<context::JointModelPrismaticUnaligned> & cl)
164  {
165  return cl
166  .def(bp::init<context::Scalar, context::Scalar, context::Scalar>(
167  bp::args("self", "x", "y", "z"),
168  "Init JointModelPrismaticUnaligned from the components x, y, z of the axis"))
169  .def(bp::init<const context::Vector3s &>(
170  bp::args("self", "axis"),
171  "Init JointModelPrismaticUnaligned from an axis with x-y-z components"))
172  .def_readwrite(
174  "Translation axis of the JointModelPrismaticUnaligned.");
175  }
176 
177  // specialization for JointModelHelicalUnaligned
178  template<>
179  bp::class_<context::JointModelHelicalUnaligned> &
180  expose_joint_model<context::JointModelHelicalUnaligned>(
181  bp::class_<context::JointModelHelicalUnaligned> & cl)
182  {
183  return cl
184  .def(bp::init<context::Scalar, context::Scalar, context::Scalar, context::Scalar>(
185  bp::args("self", "x", "y", "z", "pitch"),
186  "Init JointModelHelicalUnaligned from the components x, y, z of the axis and the pitch"))
187  .def(bp::init<const context::Vector3s &, context::Scalar>(
188  bp::args("self", "axis", "pitch"),
189  "Init JointModelHelicalUnaligned from an axis with x-y-z components and the pitch"))
190  .def_readwrite(
192  "Translation axis of the JointModelHelicalUnaligned.")
193  .def_readwrite(
195  "Pitch h of the JointModelHelicalUnaligned.");
196  }
197 
198  // specialization for JointModelHelical
199  template<>
200  bp::class_<context::JointModelHX> &
201  expose_joint_model<context::JointModelHX>(bp::class_<context::JointModelHX> & cl)
202  {
203  return cl
204  .def(bp::init<context::Scalar>(
205  bp::args("self", "pitch"),
206  "Init JointModelHX with pitch value and the X axis ([1, 0, 0]) as a rotation axis."))
207  .def(bp::init<>(
208  bp::args("self"),
209  "Init JointModelHX with pitch 0.0 and the X axis ([1, 0, 0]) as a rotation axis."))
210  .def(
211  "getMotionAxis", &context::JointModelHX::getMotionAxis,
212  "Rotation axis of the JointModelHX.")
213  .def_readwrite("pitch", &context::JointModelHX::m_pitch, "Pitch h of the JointModelHX.");
214  }
215 
216  template<>
217  bp::class_<context::JointModelHY> &
218  expose_joint_model<context::JointModelHY>(bp::class_<context::JointModelHY> & cl)
219  {
220  return cl
221  .def(bp::init<context::Scalar>(
222  bp::args("self", "pitch"),
223  "Init JointModelHY with pitch value and the Y axis ([0, 1, 0]) as a rotation axis."))
224  .def(bp::init<>(
225  bp::args("self"),
226  "Init JointModelHY with pitch 0.0 and the Y axis ([0, 1, 0]) as a rotation axis."))
227  .def(
228  "getMotionAxis", &context::JointModelHY::getMotionAxis,
229  "Rotation axis of the JointModelHY.")
230  .def_readwrite("pitch", &context::JointModelHY::m_pitch, "Pitch h of the JointModelHY.");
231  }
232 
233  template<>
234  bp::class_<context::JointModelHZ> &
235  expose_joint_model<context::JointModelHZ>(bp::class_<context::JointModelHZ> & cl)
236  {
237  return cl
238  .def(bp::init<context::Scalar>(
239  bp::args("self", "pitch"),
240  "Init JointModelHZ with pitch value and the Z axis ([0, 0, 1]) as a rotation axis."))
241  .def(bp::init<>(
242  bp::args("self"),
243  "Init JointModelHZ with pitch 0.0 and the Z axis ([0, 0, 1]) as a rotation axis."))
244  .def(
245  "getMotionAxis", &context::JointModelHZ::getMotionAxis,
246  "Rotation axis of the JointModelHZ.")
247  .def_readwrite("pitch", &context::JointModelHZ::m_pitch, "Pitch h of the JointModelHZ.");
248  }
249 
250  // specialization for JointModelUniversal
251  template<>
252  bp::class_<context::JointModelUniversal> &
253  expose_joint_model<context::JointModelUniversal>(bp::class_<context::JointModelUniversal> & cl)
254  {
255  return cl
256  .def(bp::init<
259  bp::args("self", "x1", "y1", "z1", "x2", "y2", "z2"),
260  "Init JointModelUniversal from the components x, y, z of the axes"))
261  .def(bp::init<const context::Vector3s &, const context::Vector3s &>(
262  bp::args("self", "axis1", "axis2"),
263  "Init JointModelUniversal from two axes with x-y-z components"))
264  .def_readwrite(
266  "First rotation axis of the JointModelUniversal.")
267  .def_readwrite(
269  "Second rotation axis of the JointModelUniversal.");
270  }
271 
272  // specialization for JointModelComposite
273 
275  : public boost::static_visitor<context::JointModelComposite &>
276  {
279 
281  context::JointModelComposite & joint_composite, const context::SE3 & joint_placement)
282  : m_joint_composite(joint_composite)
284  {
285  }
286 
287  template<typename JointModelDerived>
288  context::JointModelComposite & operator()(JointModelDerived & jmodel) const
289  {
291  }
292  }; // struct JointModelCompositeAddJointVisitor
293 
295  context::JointModelComposite & joint_composite,
296  const context::JointModel & jmodel,
298  {
299  return boost::apply_visitor(
300  JointModelCompositeAddJointVisitor(joint_composite, joint_placement), jmodel.toVariant());
301  }
302 
304  : public boost::static_visitor<context::JointModelComposite *>
305  {
307 
310  {
311  }
312 
313  template<typename JointModelDerived>
314  context::JointModelComposite * operator()(JointModelDerived & jmodel) const
315  {
317  }
318  }; // struct JointModelCompositeConstructorVisitor
319 
321  {
322  return boost::apply_visitor(
324  }
325 
328  {
329  return boost::apply_visitor(JointModelCompositeConstructorVisitor(joint_placement), jmodel);
330  }
331 
332  template<>
333  bp::class_<context::JointModelComposite> &
334  expose_joint_model<context::JointModelComposite>(bp::class_<context::JointModelComposite> & cl)
335  {
336  return cl
337  .def(bp::init<const size_t>(
338  bp::args("self", "size"), "Init JointModelComposite with a defined size"))
339  .def(
340  "__init__",
341  bp::make_constructor(init_proxy1, bp::default_call_policies(), bp::args("joint_model")),
342  "Init JointModelComposite from a joint")
343  .def(
344  "__init__",
345  bp::make_constructor(
346  init_proxy2, bp::default_call_policies(), bp::args("joint_model", "joint_placement")),
347  "Init JointModelComposite from a joint and a placement")
348  .add_property("joints", &context::JointModelComposite::joints)
349  .add_property("jointPlacements", &context::JointModelComposite::jointPlacements)
350  .add_property("njoints", &context::JointModelComposite::njoints)
351  .def(
352  "addJoint", &addJoint_proxy,
353  (bp::arg("self"), bp::arg("joint_model"),
354  bp::arg("joint_placement") = context::SE3::Identity()),
355  "Add a joint to the vector of joints.", bp::return_internal_reference<>())
356 
357 #ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS
358  .def(bp::self == bp::self)
359  .def(bp::self != bp::self)
360 #endif
361  ;
362  }
363 
364  // Specialization for JointModelMimic
366  : public boost::static_visitor<context::JointModelMimic *>
367  {
370 
372  const context::Scalar & scaling, const context::Scalar & offset)
373  : m_scaling(scaling)
374  , m_offset(offset)
375  {
376  }
377 
378  template<typename JointModelDerived>
379  context::JointModelMimic * operator()(const JointModelDerived & jmodel) const
380  {
381 
382  return new context::JointModelMimic(jmodel, m_scaling, m_offset);
383  }
384 
385  }; // struct JointModelMimicConstructorVisitor
386 
388  const context::JointModel & jmodel,
389  const context::Scalar & scaling,
390  const context::Scalar & offset)
391  {
392  return boost::apply_visitor(JointModelMimicConstructorVisitor(scaling, offset), jmodel);
393  }
394 
396  {
397  return jmodel.scaling();
398  }
399 
401  {
402  return jmodel.offset();
403  }
404 
405  template<>
406  bp::class_<context::JointModelMimic> &
407  expose_joint_model<context::JointModelMimic>(bp::class_<context::JointModelMimic> & cl)
408  {
409  return cl
410  .def(
411  "__init__",
412  bp::make_constructor(
413  init_proxy, bp::default_call_policies(), bp::args("joint_model", "scaling", "offset")),
414  "Init JointModelMimic from an existing joint with scaling and offset.")
415  .add_property("scaling", &get_scaling)
416  .add_property("offset", &get_offset);
417  }
418 
419  } // namespace python
420 } // namespace pinocchio
421 
422 #endif // ifndef __pinocchio_python_joint_models_hpp__
init
void init(bool compute_local_aabb=true)
pinocchio::python::JointModelMimicConstructorVisitor::m_scaling
const context::Scalar & m_scaling
Definition: joints-models.hpp:368
boost::python
pinocchio::python::expose_joint_model
bp::class_< T > & expose_joint_model(bp::class_< T > &cl)
Definition: joints-models.hpp:25
pinocchio::python::JointModelCompositeAddJointVisitor::JointModelCompositeAddJointVisitor
JointModelCompositeAddJointVisitor(context::JointModelComposite &joint_composite, const context::SE3 &joint_placement)
Definition: joints-models.hpp:280
pinocchio::JointModelRevoluteUnboundedTpl::getMotionAxis
Vector3 getMotionAxis() const
Definition: joint-revolute-unbounded.hpp:209
pinocchio::JointModelUniversalTpl::axis2
Vector3 axis2
Definition: joint-universal.hpp:614
pinocchio::python::JointModelCompositeAddJointVisitor::operator()
context::JointModelComposite & operator()(JointModelDerived &jmodel) const
Definition: joints-models.hpp:288
pinocchio::python::get_scaling
static context::Scalar get_scaling(context::JointModelMimic &jmodel)
Definition: joints-models.hpp:395
pinocchio::python::JointModelCompositeAddJointVisitor::m_joint_composite
context::JointModelComposite & m_joint_composite
Definition: joints-models.hpp:277
pinocchio::SE3Tpl< Scalar, Options >
pinocchio::JointModelMimicTpl::offset
const Scalar & offset() const
Definition: joint-mimic.hpp:773
pinocchio::python::JointModelCompositeAddJointVisitor
Definition: joints-models.hpp:274
pinocchio::JointModelPrismaticTpl::getMotionAxis
Vector3 getMotionAxis() const
Definition: joint-prismatic.hpp:751
eigen-to-python.hpp
pinocchio::python::JointModelMimicConstructorVisitor
Definition: joints-models.hpp:365
pinocchio::python::JointModelCompositeAddJointVisitor::m_joint_placement
const context::SE3 & m_joint_placement
Definition: joints-models.hpp:278
pinocchio::JointModelTpl::toVariant
JointModelVariant & toVariant()
Definition: joint-generic.hpp:310
pinocchio::JointModelHelicalTpl::getMotionAxis
Vector3 getMotionAxis() const
Definition: joint-helical.hpp:932
pinocchio::JointModelHelicalUnalignedTpl::axis
Vector3 axis
Definition: joint-helical-unaligned.hpp:769
pinocchio::JointModelRevoluteTpl::getMotionAxis
Vector3 getMotionAxis() const
Definition: joint-revolute.hpp:847
pinocchio::python::JointModelMimicConstructorVisitor::JointModelMimicConstructorVisitor
JointModelMimicConstructorVisitor(const context::Scalar &scaling, const context::Scalar &offset)
Definition: joints-models.hpp:371
pinocchio::JointModelCompositeTpl::addJoint
JointModelDerived & addJoint(const JointModelBase< JointModel > &jmodel, const SE3 &placement=SE3::Identity())
Add a joint to the vector of joints.
Definition: joint-composite.hpp:286
pinocchio::python::get_offset
static context::Scalar get_offset(context::JointModelMimic &jmodel)
Definition: joints-models.hpp:400
joint-composite.hpp
pinocchio::python::JointModelMimicConstructorVisitor::m_offset
const context::Scalar & m_offset
Definition: joints-models.hpp:369
joint-collection.hpp
pinocchio::JointModelCompositeTpl::joints
JointModelVector joints
Vector of joints contained in the joint composite.
Definition: joint-composite.hpp:468
pinocchio::python::init_proxy2
static context::JointModelComposite * init_proxy2(const context::JointModel &jmodel, const context::SE3 &joint_placement)
Definition: joints-models.hpp:327
joint-generic.hpp
python
pinocchio::python::JointModelCompositeConstructorVisitor::operator()
context::JointModelComposite * operator()(JointModelDerived &jmodel) const
Definition: joints-models.hpp:314
pinocchio::JointModelTpl
Definition: multibody/joint/fwd.hpp:169
pinocchio::python::JointModelMimicConstructorVisitor::operator()
context::JointModelMimic * operator()(const JointModelDerived &jmodel) const
Definition: joints-models.hpp:379
joint-mimic.hpp
pinocchio::python::init_proxy1
static context::JointModelComposite * init_proxy1(const context::JointModel &jmodel)
Definition: joints-models.hpp:320
pinocchio::JointModelCompositeTpl::njoints
int njoints
Number of joints contained in the JointModelComposite.
Definition: joint-composite.hpp:694
pinocchio::python::JointModelCompositeConstructorVisitor::m_joint_placement
const context::SE3 & m_joint_placement
Definition: joints-models.hpp:306
pinocchio::python::context::JointModelComposite
JointModelCompositeTpl< Scalar > JointModelComposite
Definition: bindings/python/context/generic.hpp:138
pinocchio::python::init_proxy
static context::JointModelMimic * init_proxy(const context::JointModel &jmodel, const context::Scalar &scaling, const context::Scalar &offset)
Definition: joints-models.hpp:387
pinocchio::python::context::JointModelMimic
JointModelMimicTpl< Scalar > JointModelMimic
Definition: bindings/python/context/generic.hpp:141
pinocchio::python::JointModelCompositeConstructorVisitor
Definition: joints-models.hpp:303
pinocchio::JointModelCompositeTpl
Definition: multibody/joint/fwd.hpp:141
append-urdf-model-with-another-model.joint_placement
joint_placement
Definition: append-urdf-model-with-another-model.py:29
pinocchio::JointModelHelicalUnalignedTpl::m_pitch
Scalar m_pitch
Definition: joint-helical-unaligned.hpp:770
pinocchio::python::JointModelCompositeConstructorVisitor::JointModelCompositeConstructorVisitor
JointModelCompositeConstructorVisitor(const context::SE3 &joint_placement)
Definition: joints-models.hpp:308
pinocchio::JointModelHelicalTpl::m_pitch
Scalar m_pitch
Definition: joint-helical.hpp:958
pinocchio::SE3Tpl< Scalar, Options >::Identity
static SE3Tpl Identity()
Definition: spatial/se3-tpl.hpp:136
cl
cl
pinocchio::JointModelMimicTpl::scaling
const Scalar & scaling() const
Definition: joint-mimic.hpp:764
pinocchio::JointModelPrismaticUnalignedTpl::axis
Vector3 axis
3d main axis of the joint.
Definition: joint-prismatic-unaligned.hpp:710
pinocchio::JointModelMimicTpl
Definition: multibody/joint/fwd.hpp:155
pinocchio::JointModelRevoluteUnalignedTpl::axis
Vector3 axis
3d main axis of the joint.
Definition: joint-revolute-unaligned.hpp:734
pinocchio::python::addJoint_proxy
static context::JointModelComposite & addJoint_proxy(context::JointModelComposite &joint_composite, const context::JointModel &jmodel, const context::SE3 &joint_placement=context::SE3::Identity())
Definition: joints-models.hpp:294
pinocchio::python::context::Scalar
PINOCCHIO_PYTHON_SCALAR_TYPE Scalar
Definition: bindings/python/context/generic.hpp:37
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33
pinocchio::JointModelUniversalTpl::axis1
Vector3 axis1
3d main axii of the joint.
Definition: joint-universal.hpp:613


pinocchio
Author(s):
autogenerated on Thu Apr 10 2025 02:42:20