Go to the documentation of this file.
25 const std::vector<NonlinearFactorValuePair>& pairs) {
27 for (
const auto& pair : pairs) {
30 std::copy(
f->keys().begin(),
f->keys().end(),
31 std::inserter(factor_keys_set, factor_keys_set.end()));
34 KeySet continuous_keys_set(continuousKeys.begin(), continuousKeys.end());
35 if (continuous_keys_set != factor_keys_set) {
36 throw std::runtime_error(
37 "HybridNonlinearFactor: The specified continuous keys and the keys in "
38 "the factors do not match!");
45 const std::vector<NonlinearFactor::shared_ptr>&
factors)
46 :
Base(continuousKeys, {discreteKey}) {
47 std::vector<NonlinearFactorValuePair> pairs;
49 pairs.emplace_back(
f, 0.0);
52 factors_ = FactorValuePairs({discreteKey}, pairs);
58 const std::vector<NonlinearFactorValuePair>& pairs)
59 :
Base(continuousKeys, {discreteKey}) {
60 KeySet continuous_keys_set(continuousKeys.begin(), continuousKeys.end());
62 factors_ = FactorValuePairs({discreteKey}, pairs);
69 :
Base(continuousKeys, discreteKeys), factors_(
factors) {}
73 const Values& continuousValues)
const {
76 [continuousValues](
const std::pair<sharedFactor, double>&
f) {
77 auto [factor, val] =
f;
78 return factor->error(continuousValues) + val;
86 const Values& continuousValues,
89 auto [factor, val] =
factors_(discreteValues);
91 const double factorError = factor->error(continuousValues);
103 auto [factor, val] =
factors_(assignments.at(0));
104 return factor->dim();
110 std::cout << (
s.empty() ?
"" :
s +
" ");
112 std::cout <<
"\nHybridNonlinearFactor\n";
114 auto [factor, val] =
v;
116 return "Nonlinear factor on " + std::to_string(factor->size()) +
" keys";
118 return std::string(
"nullptr");
137 auto compare = [
tol](
const std::pair<sharedFactor, double>&
a,
138 const std::pair<sharedFactor, double>&
b) {
140 (
a.second ==
b.second);
152 const Values& continuousValues,
154 auto factor =
factors_(discreteValues).first;
155 return factor->linearize(continuousValues);
160 const Values& continuousValues)
const {
165 auto [factor, val] =
f;
166 return {factor->linearize(continuousValues), val};
170 linearized_factors(
factors_, linearizeDT);
HybridNonlinearFactor()=default
Default constructor, mainly for serialization.
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print to stdout
GaussianFactor::shared_ptr linearize(const Values &continuousValues, const DiscreteValues &discreteValues) const
bool equals(const DecisionTree &other, const CompareFunc &compare=&DefaultCompare) const
const GaussianFactorGraph factors
double error(const Values &continuousValues, const DiscreteValues &discreteValues) const
Compute error of factor given both continuous and discrete values.
KeyVector continuousKeys_
Record continuous keys for book-keeping.
DiscreteKeys is a set of keys that can be assembled using the & operator.
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
std::pair< GaussianFactor::shared_ptr, double > GaussianFactorValuePair
Alias for pair of GaussianFactor::shared_pointer and a double value.
static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)
Return a vector of DiscreteValues, one for each possible combination of values.
bool equals(const HybridFactor &other, double tol=1e-9) const override
Check equality.
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
std::shared_ptr< This > shared_ptr
shared_ptr to this class
DiscreteKeys discreteKeys_
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
void print(const std::string &s="HybridFactor\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
A set of nonlinear factors indexed by a set of discrete keys.
KeyVector keys_
The keys involved in this factor.
std::pair< Key, size_t > DiscreteKey
Array< int, Dynamic, 1 > v
size_t dim() const
Get the dimension of the factor (number of rows on linearization). Returns the dimension of the first...
FactorValuePairs factors_
Decision tree of nonlinear factors indexed by discrete keys.
static std::string valueFormatter(const double &v)
AlgebraicDecisionTree< Key > errorTree(const VectorValues &continuousValues) const override
HybridFactor method implementation. Should not be used.
static void checkKeys(const KeyVector &continuousKeys, const std::vector< NonlinearFactorValuePair > &pairs)
bool equal(const T &obj1, const T &obj2, double tol)
Implementation of a discrete-conditioned hybrid factor.
Vector factorError(const Point3 &T1, const Point3 &T2, const TranslationFactor &factor)
gtsam
Author(s):
autogenerated on Wed Sep 25 2024 03:02:32