Compile with optional derivatives
parent
8e3a0f4847
commit
4bc82da85c
|
|
@ -24,7 +24,6 @@
|
||||||
#include <gtsam/base/Testable.h>
|
#include <gtsam/base/Testable.h>
|
||||||
|
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/foreach.hpp>
|
|
||||||
#include <boost/lambda/lambda.hpp>
|
#include <boost/lambda/lambda.hpp>
|
||||||
|
|
||||||
#include <CppUnitLite/TestHarness.h>
|
#include <CppUnitLite/TestHarness.h>
|
||||||
|
|
@ -96,7 +95,7 @@ class UnaryExpression {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef T (*function)(const typename E::type&);
|
typedef T (*function)(const typename E::type&, boost::optional<Matrix&>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
@ -114,7 +113,7 @@ public:
|
||||||
|
|
||||||
/// Evaluate the values of the subtree and call unary function on result
|
/// Evaluate the values of the subtree and call unary function on result
|
||||||
T value(const Values& values) const {
|
T value(const Values& values) const {
|
||||||
return f_(expression_.value(values));
|
return f_(expression_.value(values), boost::none);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the Jacobians from the subtree and apply the chain rule
|
/// Get the Jacobians from the subtree and apply the chain rule
|
||||||
|
|
@ -131,7 +130,8 @@ class BinaryExpression {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef T (*function)(const typename E1::type&, const typename E2::type&);
|
typedef T (*function)(const typename E1::type&, const typename E2::type&,
|
||||||
|
boost::optional<Matrix&>, boost::optional<Matrix&>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
@ -150,7 +150,8 @@ public:
|
||||||
|
|
||||||
/// Evaluate the values of the subtrees and call binary function on result
|
/// Evaluate the values of the subtrees and call binary function on result
|
||||||
T value(const Values& values) const {
|
T value(const Values& values) const {
|
||||||
return f_(expression1_.value(values), expression2_.value(values));
|
return f_(expression1_.value(values), expression2_.value(values),
|
||||||
|
boost::none, boost::none);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the Jacobians from the subtrees and apply the chain rule
|
/// Get the Jacobians from the subtrees and apply the chain rule
|
||||||
|
|
@ -163,7 +164,7 @@ public:
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
void printPair(std::pair<Key,Matrix> pair) {
|
void printPair(std::pair<Key, Matrix> pair) {
|
||||||
std::cout << pair.first << ": " << pair.second << std::endl;
|
std::cout << pair.first << ": " << pair.second << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,7 +215,7 @@ public:
|
||||||
// value type is std::pair<Key, Matrix>, specifying the
|
// value type is std::pair<Key, Matrix>, specifying the
|
||||||
// collection of keys and matrices making up the factor.
|
// collection of keys and matrices making up the factor.
|
||||||
std::map<Key, Matrix> terms = expression_.jacobians(values);
|
std::map<Key, Matrix> terms = expression_.jacobians(values);
|
||||||
std::for_each(terms.begin(), terms.end(),printPair);
|
std::for_each(terms.begin(), terms.end(), printPair);
|
||||||
Vector b = unwhitenedError(values);
|
Vector b = unwhitenedError(values);
|
||||||
SharedDiagonal model = SharedDiagonal();
|
SharedDiagonal model = SharedDiagonal();
|
||||||
return boost::shared_ptr<JacobianFactor>(
|
return boost::shared_ptr<JacobianFactor>(
|
||||||
|
|
@ -229,17 +230,19 @@ using namespace gtsam;
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
||||||
Point3 transformTo(const Pose3& x, const Point3& p) {
|
Point3 transformTo(const Pose3& x, const Point3& p,
|
||||||
return x.transform_to(p);
|
boost::optional<Matrix&> Dpose, boost::optional<Matrix&> Dpoint) {
|
||||||
|
return x.transform_to(p, Dpose, Dpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
Point2 project(const Point3& p) {
|
Point2 project(const Point3& p, boost::optional<Matrix&> Dpoint) {
|
||||||
return PinholeCamera<Cal3_S2>::project_to_camera(p);
|
return PinholeCamera<Cal3_S2>::project_to_camera(p, Dpoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class CAL>
|
template<class CAL>
|
||||||
Point2 uncalibrate(const CAL& K, const Point2& p) {
|
Point2 uncalibrate(const CAL& K, const Point2& p, boost::optional<Matrix&> Dcal,
|
||||||
return K.uncalibrate(p);
|
boost::optional<Matrix&> Dp) {
|
||||||
|
return K.uncalibrate(p, Dcal, Dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue