conversions.cpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2019-2020 CNRS INRIA
3 //
4 
5 #include <sstream>
6 
9 
10 namespace pinocchio
11 {
12  namespace python
13  {
14  namespace bp = boost::python;
16  typedef Eigen::Matrix<Scalar, Eigen::Dynamic,1> VectorXd;
17  typedef Eigen::Matrix<Scalar, 7,1> Vector7d;
18  typedef Eigen::Map< SE3::Quaternion> QuatMap;
19  typedef Eigen::Map<const SE3::Quaternion> QuatConstMap;
20 
22  {
23  Vector7d res;
24  res.head<3>() = M.translation();
25  QuatMap (res.tail<4>().data()) = M.rotation();
26  return res;
27  }
28 
29  bp::tuple SE3ToXYZQUATtuple(const SE3& M)
30  {
31  SE3::Quaternion q (M.rotation());
32  return bp::make_tuple (
33  M.translation()(0), M.translation()(1), M.translation()(2),
34  q.x(), q.y(), q.z(), q.w());
35  }
36 
37  template <typename TupleOrList>
38  SE3 XYZQUATToSE3_bp(const TupleOrList& v)
39  {
40  bp::ssize_t size = bp::len(v);
41  if(size != 7)
42  {
43  throw std::invalid_argument(
44  "Wrong size: v(" + std::to_string(size) + ") should have 7 elements");
45  }
47  static_cast<Scalar>(bp::extract<Scalar>(v[6])),
48  static_cast<Scalar>(bp::extract<Scalar>(v[3])),
49  static_cast<Scalar>(bp::extract<Scalar>(v[4])),
50  static_cast<Scalar>(bp::extract<Scalar>(v[5])));
51  SE3::Vector3 t (
52  static_cast<Scalar>(bp::extract<Scalar>(v[0])),
53  static_cast<Scalar>(bp::extract<Scalar>(v[1])),
54  static_cast<Scalar>(bp::extract<Scalar>(v[2])));
55  return SE3 (q.matrix(), t);
56  }
57 
58  template <typename Vector7Like>
59  SE3 XYZQUATToSE3_ei(const Vector7Like& v)
60  {
61  if(v.rows() != 7 || v.cols() != 1)
62  {
63  std::ostringstream shape;
64  shape << "(" << v.rows() << ", " << v.cols() << ")";
65  throw std::invalid_argument("Wrong size: v" + shape.str() + " but should have the following shape (7, 1)");
66  }
67  QuatConstMap q (v.template tail<4>().data());
68  return SE3 (q.matrix(), v.template head<3>());
69  }
70 
72  {
73  const char* doc1 = "Convert the input SE3 object to a numpy array.";
74  bp::def("SE3ToXYZQUAT" , SE3ToXYZQUAT , "M", doc1);
75  const char* doc1_tuple = "Convert the input SE3 object to a 7D tuple of floats [X,Y,Z,x,y,z,w].";
76  bp::def("SE3ToXYZQUATtuple", SE3ToXYZQUATtuple, "M", doc1_tuple);
77 
78  const char* doc2 = "Reverse function of SE3ToXYZQUAT: convert [X,Y,Z,x,y,z,w] to an SE3 element.";
79  bp::def("XYZQUATToSE3",
80  static_cast<SE3 (*) (const bp::tuple&)> (XYZQUATToSE3_bp<bp::tuple>),
81  bp::arg("tuple"),doc2);
82  bp::def("XYZQUATToSE3",
83  static_cast<SE3 (*) (const bp::list &)> (XYZQUATToSE3_bp<bp::list >),
84  bp::arg("list"),doc2);
85  bp::def("XYZQUATToSE3", static_cast<SE3 (*) (const VectorXd &)> (XYZQUATToSE3_ei<VectorXd >),
86  bp::arg("array"),doc2);
87  }
88 
89  } // namespace python
90 } // namespace pinocchio
pinocchio::SE3
SE3Tpl< double, 0 > SE3
Definition: spatial/fwd.hpp:53
pinocchio::python::VectorXd
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > VectorXd
Definition: conversions.cpp:16
boost::python
pinocchio::SE3Tpl::Vector3
traits< SE3Tpl >::Vector3 Vector3
Definition: spatial/se3-tpl.hpp:53
pinocchio::python::exposeConversions
void exposeConversions()
Definition: conversions.cpp:71
pinocchio::python::SE3ToXYZQUATtuple
bp::tuple SE3ToXYZQUATtuple(const SE3 &M)
Definition: conversions.cpp:29
pinocchio::SE3Tpl
Definition: spatial/fwd.hpp:38
pinocchio::python::XYZQUATToSE3_ei
SE3 XYZQUATToSE3_ei(const Vector7Like &v)
Definition: conversions.cpp:59
pinocchio::python::QuatMap
Eigen::Map< SE3::Quaternion > QuatMap
Definition: conversions.cpp:18
pinocchio::python::Scalar
SE3::Scalar Scalar
Definition: conversions.cpp:15
pinocchio::python::SE3ToXYZQUAT
VectorXd SE3ToXYZQUAT(const SE3 &M)
Definition: conversions.cpp:21
python
pinocchio::python::v
const Vector3Like & v
Definition: bindings/python/spatial/explog.hpp:44
size
FCL_REAL size() const
M
M
pinocchio::q
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
Definition: joint-configuration.hpp:747
pinocchio::python::Vector7d
Eigen::Matrix< Scalar, 7, 1 > Vector7d
Definition: conversions.cpp:17
pinocchio::SE3Tpl< double, 0 >::Quaternion
Eigen::Quaternion< Scalar, Options > Quaternion
Definition: spatial/se3-tpl.hpp:52
fwd.hpp
t
Transform3f t
pinocchio::python::XYZQUATToSE3_bp
SE3 XYZQUATToSE3_bp(const TupleOrList &v)
Definition: conversions.cpp:38
pinocchio::python::QuatConstMap
Eigen::Map< const SE3::Quaternion > QuatConstMap
Definition: conversions.cpp:19
se3.hpp
pinocchio::python::res
ReturnType res
Definition: bindings/python/spatial/explog.hpp:46
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:28


pinocchio
Author(s):
autogenerated on Tue Feb 13 2024 03:43:58