Removed LinearEqualityManifoldFactorGraph.
parent
e0e5e72020
commit
0fdd49ca4e
|
|
@ -1,62 +0,0 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
|
||||
* 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
|
||||
|
||||
* -------------------------------------------------------------------------- */
|
||||
/**
|
||||
* @file LinearEqualityManifoldFactorGraph.h
|
||||
* @author Duy-Nguyen Ta
|
||||
* @author Krunal Chande
|
||||
* @author Luca Carlone
|
||||
* @date Dec 15, 2014
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <gtsam/nonlinear/NonlinearFactorGraph.h>
|
||||
#include <gtsam_unstable/linear/LinearEqualityFactorGraph.h>
|
||||
#include <gtsam_unstable/nonlinear/NonlinearConstraint.h>
|
||||
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
class LinearEqualityManifoldFactorGraph: public FactorGraph<NonlinearFactor> {
|
||||
public:
|
||||
/// default constructor
|
||||
LinearEqualityManifoldFactorGraph() {
|
||||
}
|
||||
|
||||
/// linearize to a LinearEqualityFactorGraph
|
||||
LinearEqualityFactorGraph::shared_ptr linearize(
|
||||
const Values& linearizationPoint) const {
|
||||
LinearEqualityFactorGraph::shared_ptr linearGraph(
|
||||
new LinearEqualityFactorGraph());
|
||||
BOOST_FOREACH(const NonlinearFactor::shared_ptr& factor, *this){
|
||||
JacobianFactor::shared_ptr jacobian = boost::dynamic_pointer_cast<JacobianFactor>(
|
||||
factor->linearize(linearizationPoint));
|
||||
NonlinearConstraint::shared_ptr constraint = boost::dynamic_pointer_cast<NonlinearConstraint>(factor);
|
||||
linearGraph->add(LinearEquality(*jacobian, constraint->dualKey()));
|
||||
}
|
||||
return linearGraph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the max absolute error all factors is less than a tolerance
|
||||
*/
|
||||
bool checkFeasibility(const Values& values, double tol) const {
|
||||
BOOST_FOREACH(const NonlinearFactor::shared_ptr& factor, *this){
|
||||
NoiseModelFactor::shared_ptr noiseModelFactor = boost::dynamic_pointer_cast<NoiseModelFactor>(
|
||||
factor);
|
||||
Vector error = noiseModelFactor->unwhitenedError(values);
|
||||
if (error.lpNorm<Eigen::Infinity>() > tol) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -18,16 +18,49 @@
|
|||
*/
|
||||
|
||||
#pragma once
|
||||
#include <gtsam_unstable/nonlinear/LinearEqualityManifoldFactorGraph.h>
|
||||
|
||||
#include <gtsam_unstable/linear/LinearEqualityFactorGraph.h>
|
||||
#include <gtsam_unstable/nonlinear/NonlinearConstraint.h>
|
||||
|
||||
namespace gtsam {
|
||||
class NonlinearEqualityFactorGraph: public LinearEqualityManifoldFactorGraph {
|
||||
|
||||
class NonlinearEqualityFactorGraph: public FactorGraph<NonlinearFactor> {
|
||||
public:
|
||||
/// default constructor
|
||||
/// Default constructor
|
||||
NonlinearEqualityFactorGraph() {
|
||||
}
|
||||
|
||||
/// Linearize to a LinearEqualityFactorGraph
|
||||
LinearEqualityFactorGraph::shared_ptr linearize(
|
||||
const Values& linearizationPoint) const {
|
||||
LinearEqualityFactorGraph::shared_ptr linearGraph(
|
||||
new LinearEqualityFactorGraph());
|
||||
BOOST_FOREACH(const NonlinearFactor::shared_ptr& factor, *this){
|
||||
JacobianFactor::shared_ptr jacobian = boost::dynamic_pointer_cast<JacobianFactor>(
|
||||
factor->linearize(linearizationPoint));
|
||||
NonlinearConstraint::shared_ptr constraint = boost::dynamic_pointer_cast<NonlinearConstraint>(factor);
|
||||
linearGraph->add(LinearEquality(*jacobian, constraint->dualKey()));
|
||||
}
|
||||
return linearGraph;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the max absolute error all factors is less than a tolerance
|
||||
*/
|
||||
bool checkFeasibility(const Values& values, double tol) const {
|
||||
BOOST_FOREACH(const NonlinearFactor::shared_ptr& factor, *this){
|
||||
NoiseModelFactor::shared_ptr noiseModelFactor = boost::dynamic_pointer_cast<NoiseModelFactor>(
|
||||
factor);
|
||||
Vector error = noiseModelFactor->unwhitenedError(values);
|
||||
if (error.lpNorm<Eigen::Infinity>() > tol) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Additional cost for -lambda*ConstraintHessian for SQP
|
||||
*/
|
||||
GaussianFactorGraph::shared_ptr multipliedHessians(const Values& values, const VectorValues& duals) const {
|
||||
GaussianFactorGraph::shared_ptr constrainedHessians(new GaussianFactorGraph());
|
||||
BOOST_FOREACH(const NonlinearFactor::shared_ptr& factor, *this) {
|
||||
|
|
@ -36,5 +69,7 @@ public:
|
|||
}
|
||||
return constrainedHessians;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue