111 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
| /* ----------------------------------------------------------------------------
 | |
| 
 | |
|  * 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
 | |
| 
 | |
|  * -------------------------------------------------------------------------- */
 | |
| 
 | |
| /**
 | |
|  * @brief wraps Rot3 class to python
 | |
|  * @author Andrew Melim
 | |
|  * @author Ellon Paiva Mendes (LAAS-CNRS)
 | |
|  **/
 | |
| 
 | |
| #include <boost/python.hpp>
 | |
| 
 | |
| #define NO_IMPORT_ARRAY
 | |
| #include <numpy_eigen/NumpyEigenConverter.hpp>
 | |
| 
 | |
| #include "gtsam/geometry/Rot3.h"
 | |
| 
 | |
| using namespace boost::python;
 | |
| using namespace gtsam;
 | |
| 
 | |
| static Rot3 Quaternion_0(const Vector4& q)
 | |
| {
 | |
|     return Rot3::quaternion(q[0],q[1],q[2],q[3]);
 | |
| }
 | |
| 
 | |
| static Rot3 Quaternion_1(double w, double x, double y, double z)
 | |
| {
 | |
|     return Rot3::quaternion(w,x,y,z);
 | |
| }
 | |
| 
 | |
| // Prototypes used to perform overloading
 | |
| // See: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/tutorial/doc/html/python/functions.html
 | |
| 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;
 | |
| Vector (Rot3::*quaternion_0)() const = &Rot3::quaternion;
 | |
| 
 | |
| BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(print_overloads, Rot3::print, 0, 1)
 | |
| BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(equals_overloads, Rot3::equals, 1, 2)
 | |
| 
 | |
| void exportRot3(){
 | |
| 
 | |
|   class_<Rot3>("Rot3")
 | |
|     .def(init<Point3,Point3,Point3>())
 | |
|     .def(init<double,double,double,double,double,double,double,double,double>())
 | |
|     .def(init<const Matrix3 &>())
 | |
|     .def(init<const Matrix &>())
 | |
|     .def("Quaternion", Quaternion_0, arg("q"), "Creates a Rot3 from an array [w,x,y,z] representing a quaternion")
 | |
|     .def("Quaternion", Quaternion_1, (arg("w"),arg("x"),arg("y"),arg("z")) )
 | |
|     .staticmethod("Quaternion")
 | |
|     .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, (arg("x"),arg("y"),arg("z")), "Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/Rotation_matrix, counterclockwise when looking from unchanging axis" )
 | |
|     .def("RzRyRx", RzRyRx_1, arg("xyz"), "Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/Rotation_matrix, counterclockwise when looking from unchanging axis" )
 | |
|     .staticmethod("RzRyRx")
 | |
|     .def("identity", &Rot3::identity)
 | |
|     .staticmethod("identity")
 | |
|     .def("AdjointMap", &Rot3::AdjointMap)
 | |
|     .def("column", &Rot3::column)
 | |
|     .def("conjugate", &Rot3::conjugate)
 | |
|     .def("equals", &Rot3::equals, equals_overloads(args("q","tol")))
 | |
| #ifndef GTSAM_USE_QUATERNIONS
 | |
|     .def("localCayley", &Rot3::localCayley)
 | |
|     .def("retractCayley", &Rot3::retractCayley)
 | |
| #endif
 | |
|     .def("matrix", &Rot3::matrix)
 | |
|     .def("print", &Rot3::print, print_overloads(args("s")))
 | |
|     .def("r1", &Rot3::r1)
 | |
|     .def("r2", &Rot3::r2)
 | |
|     .def("r3", &Rot3::r3)
 | |
|     .def("rpy", &Rot3::rpy)
 | |
|     .def("slerp", &Rot3::slerp)
 | |
|     .def("transpose", &Rot3::transpose)
 | |
|     .def("xyz", &Rot3::xyz)
 | |
|     .def("quaternion", quaternion_0)
 | |
|     .def(self * self)
 | |
|     .def(self * other<Point3>())
 | |
|     .def(self * other<Unit3>())
 | |
|     .def(self_ns::str(self)) // __str__
 | |
|     .def(repr(self))         // __repr__
 | |
|   ;
 | |
| 
 | |
| } |