NASA Astrobee Robot Software  Astrobee Version:
Flight software for the Astrobee robots operating inside the International Space Station.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
optimizer.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 
19 #ifndef OPTIMIZERS_OPTIMIZER_H_
20 #define OPTIMIZERS_OPTIMIZER_H_
21 
23 
24 #include <gtsam/base/Matrix.h>
25 #include <gtsam/inference/Key.h>
26 #include <gtsam/nonlinear/Marginals.h>
27 #include <gtsam/nonlinear/NonlinearFactorGraph.h>
28 
29 #include <boost/optional.hpp>
30 
31 namespace optimizers {
32 // Base class optimizer.
33 class Optimizer {
34  public:
35  explicit Optimizer(const OptimizerParams& params);
36  virtual ~Optimizer() = default;
37 
38  // Performs optimization using the provided factors and values and updates the values
39  // with the optimized estimates.
40  virtual bool Optimize(const gtsam::NonlinearFactorGraph& factors, gtsam::Values& values) = 0;
41 
42  // Returns the covariance matrix for the provided value's key if it exists.
43  // By default uses the calculated marginals to compute the covariances.
44  virtual boost::optional<gtsam::Matrix> Covariance(const gtsam::Key& key) const;
45 
46  // Calculates the covariance matrix wrt two nodes using the provided keys.
47  // Requires a successful round of optimization to have been performed.
48  boost::optional<gtsam::Matrix> Covariance(const gtsam::Key& key_a, const gtsam::Key& key_b) const;
49 
50  // Returns marginals if they have been calculated.
51  boost::optional<const gtsam::Marginals&> marginals() const;
52 
53  // Returns number of optimization iterations used for most recent optimize call.
54  virtual int iterations() const = 0;
55 
56  protected:
57  // Calculates marginals.
58  void CalculateMarginals(const gtsam::NonlinearFactorGraph& factors, const gtsam::Values& values);
59 
60  private:
61  // Set solver used for calculating marginals.
62  void SetMarginalsFactorization();
63 
64  // Serialization function
66  template <class Archive>
67  void serialize(Archive& ar, const unsigned int file_version) {
68  ar& BOOST_SERIALIZATION_NVP(params_);
69  ar& BOOST_SERIALIZATION_NVP(marginals_);
70  ar& BOOST_SERIALIZATION_NVP(marginals_factorization_);
71  }
72 
73  OptimizerParams params_;
74  boost::optional<gtsam::Marginals> marginals_;
75  gtsam::Marginals::Factorization marginals_factorization_;
76 };
77 } // namespace optimizers
78 
79 #endif // OPTIMIZERS_OPTIMIZER_H_
optimizers::Optimizer::iterations
virtual int iterations() const =0
optimizers::Optimizer::Optimizer
Optimizer(const OptimizerParams &params)
Definition: optimizer.cc:24
optimizers::Optimizer::marginals
boost::optional< const gtsam::Marginals & > marginals() const
Definition: optimizer.cc:61
optimizers::Optimizer
Definition: optimizer.h:33
optimizers
Definition: isam2_optimizer.h:33
optimizers::Optimizer::Optimize
virtual bool Optimize(const gtsam::NonlinearFactorGraph &factors, gtsam::Values &values)=0
optimizer_params.h
optimizers::Optimizer::~Optimizer
virtual ~Optimizer()=default
optimizers::Optimizer::access
friend class boost::serialization::access
Definition: optimizer.h:65
optimizers::OptimizerParams
Definition: optimizer_params.h:24
optimizers::Optimizer::CalculateMarginals
void CalculateMarginals(const gtsam::NonlinearFactorGraph &factors, const gtsam::Values &values)
Definition: optimizer.cc:46
optimizers::Optimizer::Covariance
virtual boost::optional< gtsam::Matrix > Covariance(const gtsam::Key &key) const
Definition: optimizer.cc:26