NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
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