5#ifndef __pinocchio_python_multibody_frame_hpp__
6#define __pinocchio_python_multibody_frame_hpp__
8#include "pinocchio/multibody/fwd.hpp"
9#include "pinocchio/multibody/frame.hpp"
11#include "pinocchio/bindings/python/utils/deprecation.hpp"
12#include "pinocchio/bindings/python/utils/cast.hpp"
13#include "pinocchio/bindings/python/utils/copyable.hpp"
14#include "pinocchio/bindings/python/utils/printable.hpp"
15#include "pinocchio/bindings/python/utils/registration.hpp"
21 namespace bp = boost::python;
23 template<
typename Frame>
24 struct FramePythonVisitor :
public boost::python::def_visitor<FramePythonVisitor<Frame>>
26 typedef typename Frame::SE3 SE3;
27 typedef typename Frame::Inertia Inertia;
29 template<
class PyClass>
30 void visit(PyClass & cl)
const
32 cl.def(bp::init<>(bp::arg(
"self"),
"Default constructor"))
33 .def(bp::init<const Frame &>(bp::args(
"self",
"other"),
"Copy constructor"))
35 const std::string &,
const JointIndex,
const SE3 &,
FrameType,
36 bp::optional<const Inertia &>>(
37 (bp::arg(
"name"), bp::arg(
"parent_joint"), bp::arg(
"placement"), bp::arg(
"type"),
39 "Initialize from a given name, type, parent frame index and placement wrt parent joint "
40 "and an spatial inertia object."))
42 const std::string &,
const JointIndex,
const FrameIndex,
const SE3 &,
FrameType,
43 bp::optional<const Inertia &>>(
44 (bp::arg(
"name"), bp::arg(
"parent_joint"), bp::args(
"parent_frame"),
45 bp::arg(
"placement"), bp::arg(
"type"), bp::arg(
"inertia")),
46 "Initialize from a given name, type, parent joint index, parent frame index and "
47 "placement wrt parent joint and an spatial inertia object."))
48 .def(bp::init<const Frame &>((bp::arg(
"self"), bp::arg(
"clone")),
"Copy constructor"))
50 .def_readwrite(
"name", &Frame::name,
"name of the frame")
51 .def_readwrite(
"parentJoint", &Frame::parentJoint,
"Index of the parent joint")
52 .def_readwrite(
"parentFrame", &Frame::parentFrame,
"Index of the parent frame")
56 +[](
const Frame & self) {
return self.parentJoint; },
57 deprecated_member<>(
"Deprecated member. Use Frame.parentJoint instead.")),
59 +[](Frame & self,
const JointIndex index) { self.parentJoint = index; },
60 deprecated_member<>(
"Deprecated member. Use Frame.parentJoint instead.")),
61 "See parentJoint property.")
65 +[](
const Frame & self) {
return self.parentFrame; },
66 deprecated_member<>(
"Deprecated member. Use Frame.parentFrame instead.")),
68 +[](Frame & self,
const FrameIndex index) { self.parentFrame = index; },
69 deprecated_member<>(
"Deprecated member. Use Frame.parentFrame instead.")),
70 "See parentFrame property.")
72 "placement", &Frame::placement,
"placement in the parent joint local frame")
73 .def_readwrite(
"type", &Frame::type,
"type of the frame")
74 .def_readwrite(
"inertia", &Frame::inertia,
"Inertia information attached to the frame.")
76#ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS
77 .def(bp::self == bp::self)
78 .def(bp::self != bp::self)
85 if (!register_symbolic_link_to_registered_type<FrameType>())
87 bp::enum_<FrameType>(
"FrameType")
89 .value(
"JOINT",
JOINT)
98 "A Plucker coordinate frame related to a parent joint inside a kinematic tree.\n",
100 .def(FramePythonVisitor())
101 .def(CastVisitor<Frame>())
102 .def(ExposeConstructorByCastVisitor<Frame, ::pinocchio::Frame>())
103 .def(CopyableVisitor<Frame>())
104 .def(PrintableVisitor<Frame>())
105 .def_pickle(Pickle());
109 struct Pickle : bp::pickle_suite
111 static bp::tuple getinitargs(
const Frame &)
113 return bp::make_tuple();
116 static bp::tuple getstate(
const Frame & f)
118 return bp::make_tuple(
119 f.name, f.parentJoint, f.parentFrame, f.placement, (
int)f.type, f.inertia);
122 static void setstate(Frame & f, bp::tuple tup)
124 f.name = bp::extract<std::string>(tup[0]);
125 f.parentJoint = bp::extract<JointIndex>(tup[1]);
126 f.parentFrame = bp::extract<JointIndex>(tup[2]);
127 f.placement = bp::extract<SE3 &>(tup[3]);
128 f.type = (
FrameType)(
int)bp::extract<int>(tup[4]);
129 if (bp::len(tup) > 5)
130 f.inertia = bp::extract<Inertia &>(tup[5]);
133 static bool getstate_manages_dict()
Main pinocchio namespace.
FrameType
Enum on the possible types of frames.
@ BODY
body frame: attached to the collision, inertial or visual properties of a link
@ SENSOR
sensor frame: defined in a sensor element
@ OP_FRAME
operational frame: user-defined frames that are defined at runtime
@ JOINT
joint frame: attached to the child body of a joint (a.k.a. child frame)
@ FIXED_JOINT
fixed joint frame: joint frame but for a fixed joint