GLIM
Loading...
Searching...
No Matches
global_mapping.hpp
1#pragma once
2
3#include <any>
4#include <memory>
5#include <random>
6#include <glim/mapping/global_mapping_base.hpp>
7
8namespace gtsam {
9class Values;
10class NonlinearFactorGraph;
11} // namespace gtsam
12
13namespace gtsam_points {
14class ISAM2Ext;
15class StreamTempBufferRoundRobin;
16struct ISAM2ResultExt;
17} // namespace gtsam_points
18
19namespace glim {
20
21class IMUIntegration;
22
27public:
30
31public:
32 bool enable_gpu;
33 bool enable_imu;
34 bool enable_optimization;
35 bool enable_between_factors;
36 std::string between_registration_type;
37
38 std::string registration_error_factor_type;
39 double submap_voxel_resolution;
40 double submap_voxel_resolution_max;
41 double submap_voxel_resolution_dmin;
42 double submap_voxel_resolution_dmax;
43 int submap_voxelmap_levels;
44 double submap_voxelmap_scaling_factor;
45
46 double randomsampling_rate;
47 double max_implicit_loop_distance;
48 double min_implicit_loop_overlap;
49
50 bool use_isam2_dogleg;
51 double isam2_relinearize_skip;
52 double isam2_relinearize_thresh;
53
54 double init_pose_damping_scale;
55};
56
61public:
63 virtual ~GlobalMapping();
64
65 virtual void insert_imu(const double stamp, const Eigen::Vector3d& linear_acc, const Eigen::Vector3d& angular_vel) override;
66 virtual void insert_submap(const SubMap::Ptr& submap) override;
67
68 virtual void find_overlapping_submaps(double min_overlap) override;
69 virtual void optimize() override;
70
71 virtual void save(const std::string& path) override;
72 virtual gtsam_points::PointCloud::Ptr export_points() override;
73
78 bool load(const std::string& path);
79
80private:
81 void insert_submap(int current, const SubMap::Ptr& submap);
82
83 std::shared_ptr<gtsam::NonlinearFactorGraph> create_between_factors(int current) const;
84 std::shared_ptr<gtsam::NonlinearFactorGraph> create_matching_cost_factors(int current) const;
85
86 void update_submaps();
87 gtsam_points::ISAM2ResultExt update_isam2(const gtsam::NonlinearFactorGraph& new_factors, const gtsam::Values& new_values);
88
89 void recover_graph() override;
90 std::pair<gtsam::NonlinearFactorGraph, gtsam::Values> recover_graph(const gtsam::NonlinearFactorGraph& graph, const gtsam::Values& values, int start_from_frame_id) const;
91
92private:
94 Params params;
95
96 std::mt19937 mt;
97 int session_id;
98
99 std::unique_ptr<IMUIntegration> imu_integration;
100 std::any stream_buffer_roundrobin;
101
102 std::vector<SubMap::Ptr> submaps;
103 std::vector<gtsam_points::PointCloud::ConstPtr> subsampled_submaps;
104
105 std::unique_ptr<gtsam::Values> new_values;
106 std::unique_ptr<gtsam::NonlinearFactorGraph> new_factors;
107
108 std::unique_ptr<gtsam_points::ISAM2Ext> isam2;
109
110 std::shared_ptr<void> tbb_task_arena;
111};
112} // namespace glim
Global mapping base class.
Definition global_mapping_base.hpp:22
Global mapping.
Definition global_mapping.hpp:60
virtual void insert_imu(const double stamp, const Eigen::Vector3d &linear_acc, const Eigen::Vector3d &angular_vel) override
Insert an IMU frame.
virtual void save(const std::string &path) override
Save the mapping result.
bool load(const std::string &path)
Load a mapping result from a dumped directory.
virtual void optimize() override
Request to perform optimization.
virtual void insert_submap(const SubMap::Ptr &submap) override
Insert a SubMap.
virtual gtsam_points::PointCloud::Ptr export_points() override
Export all the submap points.
virtual void find_overlapping_submaps(double min_overlap) override
Request to find new overlapping submaps.
Global mapping parameters.
Definition global_mapping.hpp:26