GLIM
Loading...
Searching...
No Matches
global_mapping_pose_graph.hpp
1#pragma once
2
3#include <any>
4#include <atomic>
5#include <memory>
6#include <random>
7#include <thread>
8#include <gtsam_points/util/gtsam_migration.hpp>
9#include <glim/util/concurrent_vector.hpp>
10#include <glim/mapping/global_mapping_base.hpp>
11
12namespace gtsam {
13class Values;
14class NonlinearFactor;
15class NonlinearFactorGraph;
16} // namespace gtsam
17
18namespace gtsam_points {
19class ISAM2Ext;
20class StreamTempBufferRoundRobin;
21
22class GaussianVoxelMap;
23class NearestNeighborSearch;
24} // namespace gtsam_points
25
26namespace glim {
27
28class IMUIntegration;
29
34public:
37
38public:
39 bool enable_optimization;
40
41 std::string registration_type;
42
43 double min_travel_dist;
44 double max_neighbor_dist;
45 double min_inliear_fraction;
46
47 int subsample_target;
48 double subsample_rate;
49 double gicp_max_correspondence_dist;
50 double vgicp_voxel_resolution;
51
52 double odom_factor_stddev;
53 double loop_factor_stddev;
54 double loop_factor_robust_width;
55
56 int loop_candidate_buffer_size;
57 int loop_candidate_eval_per_thread;
58
59 bool use_isam2_dogleg;
60 double isam2_relinearize_skip;
61 double isam2_relinearize_thresh;
62
63 double init_pose_damping_scale;
64
65 int num_threads;
66};
67
70 using Ptr = std::shared_ptr<SubMapTarget>;
71 using ConstPtr = std::shared_ptr<const SubMapTarget>;
72
73 SubMap::ConstPtr submap;
74 gtsam_points::PointCloud::ConstPtr subsampled;
75 std::shared_ptr<gtsam_points::NearestNeighborSearch> tree;
76 std::shared_ptr<gtsam_points::GaussianVoxelMap> voxels;
77 double travel_dist;
78};
79
82 SubMapTarget::ConstPtr target;
83 SubMapTarget::ConstPtr source;
84 Eigen::Isometry3d init_T_target_source;
85};
86
92public:
95
96 virtual void insert_submap(const SubMap::Ptr& submap) override;
97
98 virtual void optimize() override;
99
100 virtual void save(const std::string& path) override;
101 virtual gtsam_points::PointCloud::Ptr export_points() override;
102
103private:
104 void insert_submap(int current, const SubMap::Ptr& submap);
105
106 std::shared_ptr<gtsam::NonlinearFactorGraph> create_odometry_factors(int current) const;
107 void find_loop_candidates(int current);
108 std::shared_ptr<gtsam::NonlinearFactorGraph> collect_detected_loops();
109
110 void update_submaps();
111
112 void loop_detection_task();
113
114private:
116 Params params;
117
118 std::mt19937 mt;
119
120 std::atomic_bool kill_switch;
121 std::thread loop_detection_thread;
122 ConcurrentVector<LoopCandidate> loop_candidates;
124
125 std::vector<SubMap::Ptr> submaps;
126 std::vector<SubMapTarget::Ptr> submap_targets;
127
128 std::unique_ptr<gtsam::Values> new_values;
129 std::unique_ptr<gtsam::NonlinearFactorGraph> new_factors;
130
131 std::unique_ptr<gtsam_points::ISAM2Ext> isam2;
132
133 std::shared_ptr<void> tbb_task_arena;
134};
135} // namespace glim
Simple thread-safe vector with mutex-lock.
Definition concurrent_vector.hpp:48
Global mapping base class.
Definition global_mapping_base.hpp:22
Global mapping with the old conventional pose graph optimization.
Definition global_mapping_pose_graph.hpp:91
virtual void insert_submap(const SubMap::Ptr &submap) override
Insert a SubMap.
virtual void save(const std::string &path) override
Save the mapping result.
virtual void optimize() override
Request to perform optimization.
virtual gtsam_points::PointCloud::Ptr export_points() override
Export all the submap points.
GlobalMappingPoseGraph parameters.
Definition global_mapping_pose_graph.hpp:33
Loop candidate.
Definition global_mapping_pose_graph.hpp:81
Submap target.
Definition global_mapping_pose_graph.hpp:69