cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
kitti_odometry_dataset.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <list>
4
11
12#include <memory>
13#include <string>
14#include <vector>
15#include <map>
16#include <optional>
17#include <filesystem>
18
19namespace toolbox::io {
20
44template<typename DataType = float>
46 public dataset_t<kitti_odometry_dataset_t<DataType>,
47 kitti_odometry_frame_t<DataType>> {
48public:
51
57 explicit kitti_odometry_dataset_t(const std::string& sequence_path);
58
63 void set_cache_size(std::size_t max_cached_frames) {
64 max_cache_size_ = max_cached_frames;
65 // If cache is larger than new size, evict oldest entries
66 while (cache_.size() > max_cache_size_) {
67 auto oldest = lru_list_.back();
68 cache_.erase(oldest);
69 lru_list_.pop_back();
70 }
71 }
72
77 void enable_intensity(bool enable) { load_intensity_ = enable; }
78
84 error_policy_ = policy;
85 }
86
87 // ==================== Dataset Interface ====================
88
93 [[nodiscard]] std::size_t size_impl() const { return cloud_files_.size(); }
94
100 [[nodiscard]] std::optional<frame_type> at_impl(std::size_t index) const;
101
102 // ==================== Additional Functionality ====================
103
109 [[nodiscard]] std::string get_cloud_file(std::size_t index) const {
110 if (index >= cloud_files_.size()) {
111 throw kitti_index_out_of_range(index, cloud_files_.size());
112 }
113 return cloud_files_[index];
114 }
115
121 [[nodiscard]] Eigen::Matrix<DataType, 4, 4> get_pose(std::size_t index) const {
122 return pose_reader_.get_pose(index);
123 }
124
129 [[nodiscard]] bool has_calibration() const {
130 return calibration_.has_value();
131 }
132
138 [[nodiscard]] const kitti_calibration_t<DataType>& get_calibration() const {
139 if (!calibration_) {
140 throw std::runtime_error("No calibration data available");
141 }
142 return *calibration_;
143 }
144
149 [[nodiscard]] const std::string& get_sequence_name() const {
150 return sequence_name_;
151 }
152
157 [[nodiscard]] const std::string& get_sequence_path() const {
158 return sequence_path_;
159 }
160
164 void clear_cache() const {
165 cache_.clear();
166 lru_list_.clear();
167 }
168
169private:
170 // ==================== Private Methods ====================
171
175 void scan_cloud_files();
176
181 void load_poses(const std::string& poses_path);
182
186 void load_calibration();
187
193 std::unique_ptr<point_cloud_t<DataType>> load_cloud(
194 const std::string& file_path) const;
195
201 void update_cache(std::size_t index, frame_type&& frame) const;
202
208 std::optional<frame_type> get_from_cache(std::size_t index) const;
209
210 // ==================== Member Variables ====================
211
213 std::string sequence_path_;
214
216 std::string velodyne_path_;
217
219 std::string sequence_name_;
220
223
225 std::optional<kitti_calibration_t<DataType>> calibration_;
226
228 std::vector<std::string> cloud_files_;
229
231 mutable std::map<std::size_t, frame_type> cache_;
232
234 mutable std::list<std::size_t> lru_list_;
235
237 std::size_t max_cache_size_ = 100;
238
240 bool load_intensity_ = true;
242};
243
244} // namespace toolbox::io
245
246// Include implementation
数据集基类/Abstract base class for datasets
Definition dataset.hpp:33
Exception thrown when accessing out of bounds frame.
Definition kitti_exceptions.hpp:66
KITTI Odometry dataset loader.
Definition kitti_odometry_dataset.hpp:47
const std::string & get_sequence_path() const
Get sequence path.
Definition kitti_odometry_dataset.hpp:157
const kitti_calibration_t< DataType > & get_calibration() const
Get calibration data.
Definition kitti_odometry_dataset.hpp:138
void set_cache_size(std::size_t max_cached_frames)
Set cache size for loaded frames.
Definition kitti_odometry_dataset.hpp:63
void enable_intensity(bool enable)
Enable/disable intensity loading.
Definition kitti_odometry_dataset.hpp:77
std::string get_cloud_file(std::size_t index) const
Get cloud file path for specific frame.
Definition kitti_odometry_dataset.hpp:109
std::optional< frame_type > at_impl(std::size_t index) const
Load frame at specific index.
Definition kitti_odometry_dataset_impl.hpp:102
std::size_t size_impl() const
Get number of frames in the sequence.
Definition kitti_odometry_dataset.hpp:93
void set_error_policy(error_recovery_policy_t policy)
Set error recovery policy.
Definition kitti_odometry_dataset.hpp:83
void clear_cache() const
Clear frame cache.
Definition kitti_odometry_dataset.hpp:164
const std::string & get_sequence_name() const
Get sequence name.
Definition kitti_odometry_dataset.hpp:149
bool has_calibration() const
Check if calibration data is available.
Definition kitti_odometry_dataset.hpp:129
kitti_odometry_frame_t< DataType > frame_type
Definition kitti_odometry_dataset.hpp:49
Eigen::Matrix< DataType, 4, 4 > get_pose(std::size_t index) const
Get pose for specific frame.
Definition kitti_odometry_dataset.hpp:121
Reader for KITTI pose files.
Definition kitti_pose_reader.hpp:19
< 用于列出目录下的文件/For listing files in a directory
Definition file_format.hpp:8
error_recovery_policy_t
Error recovery policy for dataset loading.
Definition kitti_types.hpp:223
@ lenient
Skip problematic frames and continue.
KITTI calibration data structure.
Definition kitti_extended.hpp:81
Single frame data from KITTI odometry dataset.
Definition kitti_types.hpp:25