diff --git a/gtsam/navigation/NavState.h b/gtsam/navigation/NavState.h index 439e8fceb..4c8b50776 100644 --- a/gtsam/navigation/NavState.h +++ b/gtsam/navigation/NavState.h @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- - * GTSAM Copyright 2010, Georgia Tech Research Corporation, + * 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) @@ -75,18 +75,9 @@ public: /// @name Component Access /// @{ - inline const Rot3& attitude() const { - return R_; - } - inline const Point3& position() const { - return t_; - } - inline const Velocity3& velocity() const { - return v_; - } - const Rot3& attitude(OptionalJacobian<3, 9> H) const; - const Point3& position(OptionalJacobian<3, 9> H) const; - const Velocity3& velocity(OptionalJacobian<3, 9> H) const; + const Rot3& attitude(OptionalJacobian<3, 9> H = boost::none) const; + const Point3& position(OptionalJacobian<3, 9> H = boost::none) const; + const Velocity3& velocity(OptionalJacobian<3, 9> H = boost::none) const; const Pose3 pose() const { return Pose3(attitude(), position()); diff --git a/python/handwritten/navigation/ImuFactor.cpp b/python/handwritten/navigation/ImuFactor.cpp index e8d1e9aaa..c947ae9ee 100644 --- a/python/handwritten/navigation/ImuFactor.cpp +++ b/python/handwritten/navigation/ImuFactor.cpp @@ -24,18 +24,29 @@ using namespace boost::python; using namespace gtsam; -typedef gtsam::OptionalJacobian<9, 9> OptionalJacobian9; +typedef gtsam::OptionalJacobian<3, 9> OptionalJacobian39; typedef gtsam::OptionalJacobian<9, 6> OptionalJacobian96; +typedef gtsam::OptionalJacobian<9, 9> OptionalJacobian9; + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(print_overloads, print, 0, 1) +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(attitude_overloads, attitude, 0, 1) +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(position_overloads, position, 0, 1) +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(velocity_overloads, velocity, 0, 1) void exportImuFactor() { - class_("OptionalJacobian9", init<>()); + class_("OptionalJacobian39", init<>()); class_("OptionalJacobian96", init<>()); + class_("OptionalJacobian9", init<>()); class_("NavState", init<>()) // TODO(frank): overload with jacobians - // .def("attitude", &NavState::attitude) - // .def("position", &NavState::position) - // .def("velocity", &NavState::velocity) + .def("print", &NavState::print, print_overloads()) + .def("attitude", &NavState::attitude, + attitude_overloads()[return_value_policy()]) + .def("position", &NavState::position, + position_overloads()[return_value_policy()]) + .def("velocity", &NavState::velocity, + velocity_overloads()[return_value_policy()]) .def(repr(self)) .def("pose", &NavState::pose); @@ -77,6 +88,7 @@ void exportImuFactor() { // NOTE(frank): Abstract classes need boost::noncopyable class_, boost::shared_ptr>( "ImuFactor") + .def("error", &ImuFactor::error) .def(init()) .def(repr(self)); } diff --git a/python/handwritten/nonlinear/NonlinearFactorGraph.cpp b/python/handwritten/nonlinear/NonlinearFactorGraph.cpp index f1e14deda..4ba4ba008 100644 --- a/python/handwritten/nonlinear/NonlinearFactorGraph.cpp +++ b/python/handwritten/nonlinear/NonlinearFactorGraph.cpp @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- - * GTSAM Copyright 2010, Georgia Tech Research Corporation, + * 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) @@ -11,7 +11,7 @@ /** * @brief exports NonlinearFactorGraph class to python - * @author Andrew Melim + * @author Andrew Melim * @author Ellon Paiva Mendes (LAAS-CNRS) **/ @@ -28,6 +28,13 @@ using namespace gtsam; BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(print_overloads, NonlinearFactorGraph::print, 0, 1); +boost::shared_ptr getNonlinearFactor( + const NonlinearFactorGraph& graph, size_t idx) { + auto p = boost::dynamic_pointer_cast(graph.at(idx)); + if (!p) throw std::runtime_error("No NonlinearFactor at requested index"); + return p; +}; + void exportNonlinearFactorGraph(){ typedef NonlinearFactorGraph::sharedFactor sharedFactor; @@ -36,7 +43,7 @@ void exportNonlinearFactorGraph(){ void (NonlinearFactorGraph::*add1)(const sharedFactor&) = &NonlinearFactorGraph::add; class_("NonlinearFactorGraph", init<>()) - .def("size",&NonlinearFactorGraph::size) + .def("size",&NonlinearFactorGraph::size) .def("push_back", push_back1) .def("add", add1) .def("resize", &NonlinearFactorGraph::resize) @@ -44,4 +51,6 @@ void exportNonlinearFactorGraph(){ .def("print", &NonlinearFactorGraph::print, print_overloads(args("s"))) ; + def("getNonlinearFactor", getNonlinearFactor); + }