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
9
10#include <memory>
11#include <string>
12#include <vector>
13#include <map>
14#include <optional>
15#include <filesystem>
16
17namespace toolbox::io {
18
42template<typename DataType = float>
44 public dataset_t<kitti_odometry_dataset_t<DataType>,
45 kitti_odometry_frame_t<DataType>> {
46public:
49
55 explicit kitti_odometry_dataset_t(const std::string& sequence_path);
56
61 void set_cache_size(std::size_t max_cached_frames) {
62 max_cache_size_ = max_cached_frames;
63 // If cache is larger than new size, evict oldest entries
64 while (cache_.size() > max_cache_size_) {
65 auto oldest = lru_list_.back();
66 cache_.erase(oldest);
67 lru_list_.pop_back();
68 }
69 }
70
75 void enable_intensity(bool enable) { load_intensity_ = enable; }
76
82 error_policy_ = policy;
83 }
84
85 // ==================== Dataset Interface ====================
86
91 [[nodiscard]] std::size_t size_impl() const { return cloud_files_.size(); }
92
98 [[nodiscard]] std::optional<frame_type> at_impl(std::size_t index) const;
99
100 // ==================== Additional Functionality ====================
101
107 [[nodiscard]] std::string get_cloud_file(std::size_t index) const {
108 if (index >= cloud_files_.size()) {
109 throw kitti_index_out_of_range(index, cloud_files_.size());
110 }
111 return cloud_files_[index];
112 }
113
119 [[nodiscard]] Eigen::Matrix<DataType, 4, 4> get_pose(std::size_t index) const {
120 return pose_reader_.get_pose(index);
121 }
122
127 [[nodiscard]] bool has_calibration() const {
128 return calibration_.has_value();
129 }
130
136 [[nodiscard]] const kitti_calibration_t<DataType>& get_calibration() const {
137 if (!calibration_) {
138 throw std::runtime_error("No calibration data available");
139 }
140 return *calibration_;
141 }
142
147 [[nodiscard]] const std::string& get_sequence_name() const {
148 return sequence_name_;
149 }
150
155 [[nodiscard]] const std::string& get_sequence_path() const {
156 return sequence_path_;
157 }
158
162 void clear_cache() const {
163 cache_.clear();
164 lru_list_.clear();
165 }
166
167private:
168 // ==================== Private Methods ====================
169
173 void scan_cloud_files();
174
179 void load_poses(const std::string& poses_path);
180
184 void load_calibration();
185
191 std::unique_ptr<point_cloud_t<DataType>> load_cloud(
192 const std::string& file_path) const;
193
199 void update_cache(std::size_t index, frame_type&& frame) const;
200
206 std::optional<frame_type> get_from_cache(std::size_t index) const;
207
208 // ==================== Member Variables ====================
209
211 std::string sequence_path_;
212
214 std::string velodyne_path_;
215
217 std::string sequence_name_;
218
221
223 std::optional<kitti_calibration_t<DataType>> calibration_;
224
226 std::vector<std::string> cloud_files_;
227
229 mutable std::map<std::size_t, frame_type> cache_;
230
232 mutable std::list<std::size_t> lru_list_;
233
235 std::size_t max_cache_size_ = 100;
236
238 bool load_intensity_ = true;
240};
241
242} // namespace toolbox::io
243
244// 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:45
const std::string & get_sequence_path() const
Get sequence path.
Definition kitti_odometry_dataset.hpp:155
const kitti_calibration_t< DataType > & get_calibration() const
Get calibration data.
Definition kitti_odometry_dataset.hpp:136
void set_cache_size(std::size_t max_cached_frames)
Set cache size for loaded frames.
Definition kitti_odometry_dataset.hpp:61
void enable_intensity(bool enable)
Enable/disable intensity loading.
Definition kitti_odometry_dataset.hpp:75
std::string get_cloud_file(std::size_t index) const
Get cloud file path for specific frame.
Definition kitti_odometry_dataset.hpp:107
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:91
void set_error_policy(error_recovery_policy_t policy)
Set error recovery policy.
Definition kitti_odometry_dataset.hpp:81
void clear_cache() const
Clear frame cache.
Definition kitti_odometry_dataset.hpp:162
const std::string & get_sequence_name() const
Get sequence name.
Definition kitti_odometry_dataset.hpp:147
bool has_calibration() const
Check if calibration data is available.
Definition kitti_odometry_dataset.hpp:127
kitti_odometry_frame_t< DataType > frame_type
Definition kitti_odometry_dataset.hpp:47
Eigen::Matrix< DataType, 4, 4 > get_pose(std::size_t index) const
Get pose for specific frame.
Definition kitti_odometry_dataset.hpp:119
Reader for KITTI pose files.
Definition kitti_pose_reader.hpp:19
< 用于列出目录下的文件/For listing files in a directory
Definition dataloader.hpp:15
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