ceres_solver.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Simbe Robotics, Inc.
3  * Author: Steve Macenski (stevenmacenski@gmail.com)
4  */
5 
6 #ifndef KARTO_CERESSOLVER_H
7 #define KARTO_CERESSOLVER_H
8 
9 #include <ros/ros.h>
10 #include <std_srvs/Empty.h>
11 
12 #include <vector>
13 #include <unordered_map>
14 #include <utility>
15 
16 #include <karto_sdk/Mapper.h>
17 #include <ceres/ceres.h>
18 #include <ceres/local_parameterization.h>
19 #include <cmath>
20 #include <math.h>
21 
22 #include "../include/slam_toolbox/toolbox_types.hpp"
23 #include "ceres_utils.h"
24 
25 namespace solver_plugins
26 {
27 
28 using namespace ::toolbox_types;
29 
31 {
32 public:
33  CeresSolver();
34  virtual ~CeresSolver();
35 
36 public:
37  virtual const karto::ScanSolver::IdPoseVector& GetCorrections() const; //Get corrected poses after optimization
38  virtual void Compute(); //Solve
39  virtual void Clear(); //Resets the corrections
40  virtual void Reset(); //Resets the solver plugin clean
41 
42  virtual void AddNode(karto::Vertex<karto::LocalizedRangeScan>* pVertex); //Adds a node to the solver
43  virtual void AddConstraint(karto::Edge<karto::LocalizedRangeScan>* pEdge); //Adds a constraint to the solver
44  virtual std::unordered_map<int, Eigen::Vector3d>* getGraph(); //Get graph stored
45  virtual void RemoveNode(kt_int32s id); //Removes a node from the solver correction table
46  virtual void RemoveConstraint(kt_int32s sourceId, kt_int32s targetId); // Removes constraints from the optimization problem
47 
48  virtual void ModifyNode(const int& unique_id, Eigen::Vector3d pose); // change a node's pose
49  virtual void GetNodeOrientation(const int& unique_id, double& pose); // get a node's current pose yaw
50 
51 private:
52  // karto
54 
55  // ceres
56  ceres::Solver::Options options_;
57  ceres::Problem::Options options_problem_;
58  ceres::LossFunction* loss_function_;
59  ceres::Problem* problem_;
60  ceres::LocalParameterization* angle_local_parameterization_;
62 
63  // graph
64  std::unordered_map<int, Eigen::Vector3d>* nodes_;
65  std::unordered_map<size_t, ceres::ResidualBlockId>* blocks_;
66  std::unordered_map<int, Eigen::Vector3d>::iterator first_node_;
67  boost::mutex nodes_mutex_;
68 };
69 
70 }
71 
72 #endif
std::unordered_map< int, Eigen::Vector3d >::iterator first_node_
int32_t kt_int32s
Definition: Types.h:51
virtual void AddConstraint(karto::Edge< karto::LocalizedRangeScan > *pEdge)
karto::ScanSolver::IdPoseVector corrections_
virtual void RemoveNode(kt_int32s id)
std::unordered_map< int, Eigen::Vector3d > * nodes_
ceres::LocalParameterization * angle_local_parameterization_
virtual void RemoveConstraint(kt_int32s sourceId, kt_int32s targetId)
virtual const karto::ScanSolver::IdPoseVector & GetCorrections() const
virtual std::unordered_map< int, Eigen::Vector3d > * getGraph()
virtual void ModifyNode(const int &unique_id, Eigen::Vector3d pose)
ceres::LossFunction * loss_function_
ceres::Solver::Options options_
virtual void AddNode(karto::Vertex< karto::LocalizedRangeScan > *pVertex)
virtual void GetNodeOrientation(const int &unique_id, double &pose)
ceres::Problem::Options options_problem_
std::vector< std::pair< kt_int32s, Pose2 > > IdPoseVector
Definition: Mapper.h:953
std::unordered_map< size_t, ceres::ResidualBlockId > * blocks_


slam_toolbox
Author(s): Steve Macenski
autogenerated on Mon Feb 28 2022 23:46:48