No longer need to cast function pointers for expressions on Windows, with Optional Jacobian

release/4.3a0
Andrew Melim 2014-12-09 11:53:35 -05:00
parent 137ea64200
commit 1e778cf77b
2 changed files with 3 additions and 28 deletions

View File

@ -8,25 +8,11 @@
#pragma once #pragma once
#include <gtsam/nonlinear/Expression.h> #include <gtsam/nonlinear/Expression.h>
#include <gtsam/geometry/Pose2.h>
#include <gtsam/geometry/Pose3.h>
#include <boost/bind.hpp> #include <boost/bind.hpp>
namespace gtsam { namespace gtsam {
// 2D Geometry
typedef Expression<Pose2> Pose2_;
Pose2_ between(const Pose2_& x, const Pose2_& p) {
Pose2(Pose2::*transform)(const Pose2& p,
OptionalJacobian<3, 3> H1,
OptionalJacobian<3, 3> H2) const = &Pose2::between;
return Pose2_(x, transform, p);
}
// Generics // Generics
template<typename T> template<typename T>
Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) { Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) {
return Expression<T>(t1, &T::between, t2); return Expression<T>(t1, &T::between, t2);

View File

@ -20,10 +20,7 @@ typedef Expression<Rot2> Rot2_;
typedef Expression<Pose2> Pose2_; typedef Expression<Pose2> Pose2_;
Point2_ transform_to(const Pose2_& x, const Point2_& p) { Point2_ transform_to(const Pose2_& x, const Point2_& p) {
Point2 (Pose2::*transform)(const Point2& p, OptionalJacobian<2, 3> H1, return Point2_(x, &Pose2::transform_to, p);
OptionalJacobian<2, 2> H2) const = &Pose2::transform_to;
return Point2_(x, transform, p);
} }
// 3D Geometry // 3D Geometry
@ -33,11 +30,7 @@ typedef Expression<Rot3> Rot3_;
typedef Expression<Pose3> Pose3_; typedef Expression<Pose3> Pose3_;
Point3_ transform_to(const Pose3_& x, const Point3_& p) { Point3_ transform_to(const Pose3_& x, const Point3_& p) {
return Point3_(x, &Pose3::transform_to, p);
Point3 (Pose3::*transform)(const Point3& p, OptionalJacobian<3, 6> Dpose,
OptionalJacobian<3, 3> Dpoint) const = &Pose3::transform_to;
return Point3_(x, transform, p);
} }
// Projection // Projection
@ -59,11 +52,7 @@ Point2_ project3(const Pose3_& x, const Point3_& p, const Cal3_S2_& K) {
template<class CAL> template<class CAL>
Point2_ uncalibrate(const Expression<CAL>& K, const Point2_& xy_hat) { Point2_ uncalibrate(const Expression<CAL>& K, const Point2_& xy_hat) {
Point2(CAL::*uncal)(const Point2& p, return Point2_(K, &CAL::uncalibrate, xy_hat);
OptionalJacobian<2, 5> Dpose,
OptionalJacobian<2, 2> Dpoint) const = &CAL::uncalibrate;
return Point2_(K, uncal, xy_hat);
} }
} // \namespace gtsam } // \namespace gtsam