GTSAM  4.0.2
C++ library for smoothing and mapping (SAM)
CustomFactor.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
18 #pragma once
19 
21 
22 namespace gtsam {
23 
24 using JacobianVector = std::vector<Matrix>;
25 
26 class CustomFactor;
27 
28 /*
29  * NOTE
30  * ==========
31  * pybind11 will invoke a copy if this is `JacobianVector &`, and modifications in Python will not be reflected.
32  *
33  * This is safe because this is passing a const pointer, and pybind11 will maintain the `std::vector` memory layout.
34  * Thus the pointer will never be invalidated.
35  */
36 using CustomErrorFunction = std::function<Vector(const CustomFactor &, const Values &, const JacobianVector *)>;
37 
46 protected:
47  CustomErrorFunction error_function_;
48 
49 protected:
50 
51  using Base = NoiseModelFactor;
52  using This = CustomFactor;
53 
54 public:
55 
59  CustomFactor() = default;
60 
67  CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction) :
68  Base(noiseModel, keys) {
69  this->error_function_ = errorFunction;
70  }
71 
76  Vector unwhitenedError(const Values &x, OptionalMatrixVecType H = nullptr) const override;
77 
79  void print(const std::string &s,
80  const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override;
81 
85  bool sendable() const override {
86  return false;
87  }
88 
89 private:
90 
91 #ifdef GTSAM_ENABLE_BOOST_SERIALIZATION
92 
93  friend class boost::serialization::access;
94  template<class ARCHIVE>
95  void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
96  ar & boost::serialization::make_nvp("CustomFactor",
97  boost::serialization::base_object<Base>(*this));
98  }
99 #endif
100 };
101 
102 }
std::vector< Matrix > * OptionalMatrixVecType
Definition: NonlinearFactor.h:61
CustomFactor()=default
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
Definition: CustomFactor.h:45
Definition: Factor.h:69
NoiseModelFactor()
Definition: NonlinearFactor.h:212
Vector unwhitenedError(const Values &x, OptionalMatrixVecType H=nullptr) const override
Definition: NonlinearFactor.h:197
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition: NonlinearFactor.h:245
Definition: Values.h:65
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction)
Definition: CustomFactor.h:67
Definition: chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition: Key.h:86
Non-linear factor base classes.
bool sendable() const override
Definition: CustomFactor.h:85
const KeyVector & keys() const
Access the factor&#39;s involved variable keys.
Definition: Factor.h:142
noiseModel::Base::shared_ptr SharedNoiseModel
Definition: NoiseModel.h:741