GLIM
Loading...
Searching...
No Matches
async_global_mapping.hpp
1#pragma once
2
3#include <atomic>
4#include <mutex>
5#include <thread>
6#include <glim/mapping/global_mapping.hpp>
7#include <glim/util/concurrent_vector.hpp>
8
9namespace spdlog {
10class logger;
11}
12
13namespace glim {
14
21public:
27 AsyncGlobalMapping(const std::shared_ptr<glim::GlobalMappingBase>& global_mapping, const int optimization_interval_sec = 5);
28
33
34#ifdef GLIM_USE_OPENCV
40 void insert_image(const double stamp, const cv::Mat& image);
41#endif
42
49 void insert_imu(const double stamp, const Eigen::Vector3d& linear_acc, const Eigen::Vector3d& angular_vel);
50
55 void insert_submap(const SubMap::Ptr& submap);
56
60 void join();
61
66 int workload() const;
67
73 void save(const std::string& path);
74
75 gtsam_points::PointCloud::Ptr export_points();
76
77 std::shared_ptr<glim::GlobalMappingBase> get_global_mapping() {
78 std::lock_guard<std::mutex> lock(global_mapping_mutex);
79 return global_mapping;
80 }
81
82private:
83 void run();
84
85private:
86 std::atomic_bool kill_switch;
87 std::atomic_bool end_of_sequence;
88 std::thread thread;
89
90#ifdef GLIM_USE_OPENCV
92#endif
94 ConcurrentVector<SubMap::Ptr> input_submap_queue;
95
96 int optimization_interval;
97 std::atomic_bool request_to_optimize;
98 std::atomic_bool request_to_recover;
99 std::atomic<double> request_to_find_overlapping_submaps;
100
101 std::mutex global_mapping_mutex;
102 std::shared_ptr<glim::GlobalMappingBase> global_mapping;
103
104 // Logging
105 std::shared_ptr<spdlog::logger> logger;
106};
107
108} // namespace glim
Global mapping executor to wrap and asynchronously run a global mapping object.
Definition async_global_mapping.hpp:20
void insert_submap(const SubMap::Ptr &submap)
Insert a SubMap.
AsyncGlobalMapping(const std::shared_ptr< glim::GlobalMappingBase > &global_mapping, const int optimization_interval_sec=5)
Construct a new Async Global Mapping object.
int workload() const
Number of data in the input queue (for load control)
~AsyncGlobalMapping()
Destroy the Async Global Mapping object.
void save(const std::string &path)
Save the mapping result.
void join()
Wait for the global mapping thread.
void insert_imu(const double stamp, const Eigen::Vector3d &linear_acc, const Eigen::Vector3d &angular_vel)
Insert an IMU frame.
Simple thread-safe vector with mutex-lock.
Definition concurrent_vector.hpp:48