Add geometry submodule of python module
parent
977d4aa54f
commit
a0064f3aab
|
@ -1 +1,2 @@
|
||||||
import noiseModel
|
import noiseModel
|
||||||
|
import geometry
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
/libgeometry_python.so
|
|
@ -0,0 +1 @@
|
||||||
|
from libgeometry_python import *
|
|
@ -0,0 +1,179 @@
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
||||||
|
* Atlanta, Georgia 30332-0415
|
||||||
|
* All Rights Reserved
|
||||||
|
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
||||||
|
|
||||||
|
* See LICENSE for the license information
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file geometry_python.cpp
|
||||||
|
* @brief wraps geometry classes into the geometry submodule of gtsam
|
||||||
|
* @author Ellon Paiva Mendes (LAAS-CNRS)
|
||||||
|
**/
|
||||||
|
|
||||||
|
/** TODOs Summary:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <boost/python.hpp>
|
||||||
|
|
||||||
|
#include <numpy_eigen/NumpyEigenConverter.hpp>
|
||||||
|
|
||||||
|
#include <gtsam/geometry/Point3.h>
|
||||||
|
#include <gtsam/geometry/Rot3.h>
|
||||||
|
#include <gtsam/geometry/Pose3.h>
|
||||||
|
|
||||||
|
using namespace boost::python;
|
||||||
|
using namespace gtsam;
|
||||||
|
|
||||||
|
// Prototypes used to perform overloading
|
||||||
|
// See: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/tutorial/doc/html/python/functions.html
|
||||||
|
// Rot3
|
||||||
|
gtsam::Rot3 (*AxisAngle_0)(const Vector3&, double) = &Rot3::AxisAngle;
|
||||||
|
gtsam::Rot3 (*AxisAngle_1)(const gtsam::Point3&, double) = &Rot3::AxisAngle;
|
||||||
|
gtsam::Rot3 (*Rodrigues_0)(const Vector3&) = &Rot3::Rodrigues;
|
||||||
|
gtsam::Rot3 (*Rodrigues_1)(double, double, double) = &Rot3::Rodrigues;
|
||||||
|
gtsam::Rot3 (*RzRyRx_0)(double, double, double) = &Rot3::RzRyRx;
|
||||||
|
gtsam::Rot3 (*RzRyRx_1)(const Vector&) = &Rot3::RzRyRx;
|
||||||
|
// Pose3
|
||||||
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(Pose3_equals_overloads_0, equals, 1, 2)
|
||||||
|
bool (Pose3::*equals_0)(const gtsam::Pose3&, double) const = &Pose3::equals;
|
||||||
|
|
||||||
|
|
||||||
|
BOOST_PYTHON_MODULE(libgeometry_python)
|
||||||
|
{
|
||||||
|
|
||||||
|
// NOTE: Don't know if it's really necessary to register the matrices convertion here.
|
||||||
|
import_array();
|
||||||
|
NumpyEigenConverter<Vector>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector1>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector2>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector3>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector4>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector5>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector6>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector7>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector8>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector9>::register_converter();
|
||||||
|
NumpyEigenConverter<Vector10>::register_converter();
|
||||||
|
|
||||||
|
NumpyEigenConverter<Matrix>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix2>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix3>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix4>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix5>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix6>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix7>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix8>::register_converter();
|
||||||
|
NumpyEigenConverter<Matrix9>::register_converter();
|
||||||
|
|
||||||
|
class_<Point3>("Point3")
|
||||||
|
.def(init<>())
|
||||||
|
.def(init<double,double,double>())
|
||||||
|
.def(init<Vector>())
|
||||||
|
.def("identity", &Point3::identity)
|
||||||
|
.staticmethod("identity")
|
||||||
|
.def("add", &Point3::add)
|
||||||
|
.def("cross", &Point3::cross)
|
||||||
|
.def("dist", &Point3::dist)
|
||||||
|
.def("distance", &Point3::distance)
|
||||||
|
.def("dot", &Point3::dot)
|
||||||
|
.def("equals", &Point3::equals)
|
||||||
|
.def("norm", &Point3::norm)
|
||||||
|
.def("normalize", &Point3::normalize)
|
||||||
|
.def("print", &Point3::print)
|
||||||
|
.def("sub", &Point3::sub)
|
||||||
|
.def("vector", &Point3::vector)
|
||||||
|
.def("x", &Point3::x)
|
||||||
|
.def("y", &Point3::y)
|
||||||
|
.def("z", &Point3::z)
|
||||||
|
.def(self * other<double>())
|
||||||
|
.def(other<double>() * self)
|
||||||
|
.def(self + self)
|
||||||
|
.def(-self)
|
||||||
|
.def(self - self)
|
||||||
|
.def(self / other<double>())
|
||||||
|
.def(self_ns::str(self))
|
||||||
|
.def(repr(self))
|
||||||
|
.def(self == self)
|
||||||
|
;
|
||||||
|
|
||||||
|
class_<Rot3>("Rot3")
|
||||||
|
.def(init<>())
|
||||||
|
.def(init<Point3,Point3,Point3>())
|
||||||
|
.def(init<double,double,double,double,double,double,double,double,double>())
|
||||||
|
.def(init<Matrix3>())
|
||||||
|
.def(init<Matrix>())
|
||||||
|
.def("AxisAngle", AxisAngle_0)
|
||||||
|
.def("AxisAngle", AxisAngle_1)
|
||||||
|
.staticmethod("AxisAngle")
|
||||||
|
.def("Expmap", &Rot3::Expmap)
|
||||||
|
.staticmethod("Expmap")
|
||||||
|
.def("ExpmapDerivative", &Rot3::ExpmapDerivative)
|
||||||
|
.staticmethod("ExpmapDerivative")
|
||||||
|
.def("Logmap", &Rot3::Logmap)
|
||||||
|
.staticmethod("Logmap")
|
||||||
|
.def("LogmapDerivative", &Rot3::LogmapDerivative)
|
||||||
|
.staticmethod("LogmapDerivative")
|
||||||
|
.def("Rodrigues", Rodrigues_0)
|
||||||
|
.def("Rodrigues", Rodrigues_1)
|
||||||
|
.staticmethod("Rodrigues")
|
||||||
|
.def("Rx", &Rot3::Rx)
|
||||||
|
.staticmethod("Rx")
|
||||||
|
.def("Ry", &Rot3::Ry)
|
||||||
|
.staticmethod("Ry")
|
||||||
|
.def("Rz", &Rot3::Rz)
|
||||||
|
.staticmethod("Rz")
|
||||||
|
.def("RzRyRx", RzRyRx_0)
|
||||||
|
.def("RzRyRx", RzRyRx_1)
|
||||||
|
.staticmethod("RzRyRx")
|
||||||
|
.def("identity", &Rot3::identity)
|
||||||
|
.staticmethod("identity")
|
||||||
|
.def("AdjointMap", &Rot3::AdjointMap)
|
||||||
|
.def("column", &Rot3::column)
|
||||||
|
.def("conjugate", &Rot3::conjugate)
|
||||||
|
.def("equals", &Rot3::equals)
|
||||||
|
.def("localCayley", &Rot3::localCayley)
|
||||||
|
.def("matrix", &Rot3::matrix)
|
||||||
|
.def("print", &Rot3::print)
|
||||||
|
.def("r1", &Rot3::r1)
|
||||||
|
.def("r2", &Rot3::r2)
|
||||||
|
.def("r3", &Rot3::r3)
|
||||||
|
.def("retractCayley", &Rot3::retractCayley)
|
||||||
|
.def("rpy", &Rot3::rpy)
|
||||||
|
.def("slerp", &Rot3::slerp)
|
||||||
|
.def("transpose", &Rot3::transpose)
|
||||||
|
.def("xyz", &Rot3::xyz)
|
||||||
|
.def(self * self)
|
||||||
|
.def(self * other<Point3>())
|
||||||
|
.def(self * other<Unit3>())
|
||||||
|
.def(self_ns::str(self))
|
||||||
|
.def(repr(self))
|
||||||
|
;
|
||||||
|
|
||||||
|
class_<Pose3>("Pose3")
|
||||||
|
.def(init<>())
|
||||||
|
.def(init<Pose3>())
|
||||||
|
.def(init<Rot3,Point3>())
|
||||||
|
.def(init<Matrix>())
|
||||||
|
.def("identity", &Pose3::identity)
|
||||||
|
.staticmethod("identity")
|
||||||
|
.def("bearing", &Pose3::bearing)
|
||||||
|
.def("equals", equals_0, Pose3_equals_overloads_0())
|
||||||
|
.def("matrix", &Pose3::matrix)
|
||||||
|
.def("print", &Pose3::print)
|
||||||
|
.def("transform_from", &Pose3::transform_from)
|
||||||
|
.def("x", &Pose3::x)
|
||||||
|
.def("y", &Pose3::y)
|
||||||
|
.def("z", &Pose3::z)
|
||||||
|
.def(self * self)
|
||||||
|
.def(self * other<Point3>())
|
||||||
|
.def(self_ns::str(self))
|
||||||
|
.def(repr(self))
|
||||||
|
;
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue