24 for (
const Key key : keys) {
25 std::vector<NonlinearFactor::shared_ptr> factors;
26 for (
auto i : variableIndex[key])
28 factors.push_back(graph->
at(i));
31 Cluster::addFactors(key, factors);
36 return factors.linearize(values);
40 auto nonlinearCluster = std::dynamic_pointer_cast<
NonlinearCluster>(cluster);
41 if (!nonlinearCluster)
42 throw std::runtime_error(
"Expected NonlinearCluster");
43 return nonlinearCluster.get();
53 return factors.linearizeToHessianFactor(values, ordering, dampen);
61 return factors.linearizeToHessianFactor(values, ordering, dampen);
66 std::pair<GaussianBayesNet, HessianFactor::shared_ptr> linearizeAndEliminate(
71 for (
const auto& child : children) {
72 auto message = DownCast(child)->linearizeAndEliminate(values, &bayesNet);
73 message->updateHessian(localFactor.get());
75 auto gaussianConditional = localFactor->eliminateCholesky(orderedFrontalKeys);
76 bayesNet.
add(gaussianConditional);
77 return {bayesNet, localFactor};
82 std::pair<GaussianBayesNet, HessianFactor::shared_ptr> linearizeAndEliminate(
87 return linearizeAndEliminate(values, localFactor);
92 std::pair<GaussianBayesNet, HessianFactor::shared_ptr> linearizeAndEliminate(
97 return linearizeAndEliminate(values, localFactor);
106 auto bayesNet_newFactor_pair = linearizeAndEliminate(values, dampen);
108 bayesNet->
push_back(bayesNet_newFactor_pair.first);
110 return bayesNet_newFactor_pair.second;
120 auto bayesNet_newFactor_pair = linearizeAndEliminate(values, ordering, dampen);
122 bayesNet->
push_back(bayesNet_newFactor_pair.first);
124 return bayesNet_newFactor_pair.second;
131 for (
const auto& root :
roots_) {
132 auto result = NonlinearCluster::DownCast(root)->linearizeAndEliminate(values);
Definition: NonlinearClusterTree.h:18
FastVector< sharedNode > roots_
Definition: ClusterTree.h:116
Factor Graph consisting of non-linear factors.
std::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Definition: HessianFactor.h:109
IsDerived< DERIVEDFACTOR > push_back(std::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition: FactorGraph.h:190
Definition: Ordering.h:37
void remove(size_t i)
Definition: FactorGraph.h:393
Values retract(const VectorValues &delta) const
Definition: VectorValues.h:74
IsDerived< DERIVEDFACTOR > add(std::shared_ptr< DERIVEDFACTOR > factor)
add is a synonym for push_back.
Definition: FactorGraph.h:214
VectorValues optimize() const
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Definition: Ordering.h:146
std::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition: GaussianFactorGraph.h:82
Definition: NonlinearFactorGraph.h:55
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
Definition: NonlinearClusterTree.h:14
Definition: VariableIndex.h:41
const sharedFactor at(size_t i) const
Definition: FactorGraph.h:343
Definition: GaussianBayesNet.h:35
std::function< void(const std::shared_ptr< HessianFactor > &hessianFactor)> Dampen
typdef for dampen functions used below
Definition: NonlinearFactorGraph.h:133
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:102
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
Definition: ClusterTree.h:25