Updated interfaces and wrapped LinearContainerFactor

release/4.3a0
Alex Cunningham 2012-09-21 14:19:57 +00:00
parent 0ef12f2f20
commit 1985758d35
3 changed files with 56 additions and 6 deletions

View File

@ -10,6 +10,14 @@ virtual class gtsam::Pose2;
virtual class gtsam::Pose3;
virtual class gtsam::noiseModel::Base;
virtual class gtsam::NonlinearFactor;
virtual class gtsam::GaussianFactor;
virtual class gtsam::HessianFactor;
virtual class gtsam::JacobianFactor;
class gtsam::GaussianFactorGraph;
class gtsam::NonlinearFactorGraph;
class gtsam::Ordering;
class gtsam::Values;
class gtsam::InvertedOrdering;
namespace gtsam {
@ -167,7 +175,46 @@ virtual class DGroundConstraint : gtsam::NonlinearFactor {
};
//*************************************************************************
// General nonlinear factor types
// nonlinear
//*************************************************************************
#include <gtsam_unstable/nonlinear/LinearContainerFactor.h>
virtual class LinearContainerFactor : gtsam::NonlinearFactor {
LinearContainerFactor(gtsam::GaussianFactor* factor, const gtsam::Ordering& ordering,
const gtsam::Values& linearizationPoint);
LinearContainerFactor(gtsam::GaussianFactor* factor, const gtsam::Values& linearizationPoint);
LinearContainerFactor(gtsam::GaussianFactor* factor, const gtsam::InvertedOrdering& ordering,
const gtsam::Values& linearizationPoint);
LinearContainerFactor(gtsam::GaussianFactor* factor, const gtsam::Ordering& ordering);
LinearContainerFactor(gtsam::GaussianFactor* factor);
LinearContainerFactor(gtsam::GaussianFactor* factor, const gtsam::InvertedOrdering& ordering);
gtsam::GaussianFactor* factor() const;
// const boost::optional<Values>& linearizationPoint() const;
gtsam::GaussianFactor* order(const gtsam::Ordering& ordering) const;
gtsam::GaussianFactor* negate(const gtsam::Ordering& ordering) const;
gtsam::NonlinearFactor* negate() const;
bool isJacobian() const;
gtsam::JacobianFactor* toJacobian() const;
gtsam::HessianFactor* toHessian() const;
static gtsam::NonlinearFactorGraph convertLinearGraph(const gtsam::GaussianFactorGraph& linear_graph,
const gtsam::Ordering& ordering, const gtsam::Values& linearizationPoint);
static gtsam::NonlinearFactorGraph convertLinearGraph(const gtsam::GaussianFactorGraph& linear_graph,
const gtsam::InvertedOrdering& invOrdering, const gtsam::Values& linearizationPoint);
static gtsam::NonlinearFactorGraph convertLinearGraph(const gtsam::GaussianFactorGraph& linear_graph,
const gtsam::Ordering& ordering);
static gtsam::NonlinearFactorGraph convertLinearGraph(const gtsam::GaussianFactorGraph& linear_graph,
const gtsam::InvertedOrdering& invOrdering);
}; // \class LinearContainerFactor
//*************************************************************************
// slam
//*************************************************************************
#include <gtsam/geometry/Pose2.h>

View File

@ -219,17 +219,20 @@ NonlinearFactor::shared_ptr LinearContainerFactor::negate() const {
/* ************************************************************************* */
NonlinearFactorGraph LinearContainerFactor::convertLinearGraph(
const GaussianFactorGraph& linear_graph, const Ordering& ordering) {
const GaussianFactorGraph& linear_graph, const Ordering& ordering,
const Values& linearizationPoint) {
return convertLinearGraph(linear_graph, ordering.invert());
}
/* ************************************************************************* */
NonlinearFactorGraph LinearContainerFactor::convertLinearGraph(
const GaussianFactorGraph& linear_graph, const InvertedOrdering& invOrdering) {
const GaussianFactorGraph& linear_graph, const InvertedOrdering& invOrdering,
const Values& linearizationPoint) {
NonlinearFactorGraph result;
BOOST_FOREACH(const GaussianFactor::shared_ptr& f, linear_graph)
if (f)
result.push_back(NonlinearFactorGraph::sharedFactor(new LinearContainerFactor(f, invOrdering)));
result.push_back(NonlinearFactorGraph::sharedFactor(
new LinearContainerFactor(f, invOrdering, linearizationPoint)));
return result;
}

View File

@ -132,10 +132,10 @@ public:
* If the inverse ordering is present, it will be faster.
*/
static NonlinearFactorGraph convertLinearGraph(const GaussianFactorGraph& linear_graph,
const Ordering& ordering);
const Ordering& ordering, const Values& linearizationPoint = Values());
static NonlinearFactorGraph convertLinearGraph(const GaussianFactorGraph& linear_graph,
const InvertedOrdering& invOrdering);
const InvertedOrdering& invOrdering, const Values& linearizationPoint = Values());
protected:
void rekeyFactor(const Ordering& ordering);