supereight
data.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2021 Smart Robotics Lab, Imperial College London, Technical University of Munich
3  * SPDX-FileCopyrightText: 2021 Nils Funk
4  * SPDX-FileCopyrightText: 2021 Sotiris Papatheodorou
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef SE_DATA_HPP
9 #define SE_DATA_HPP
10 
11 
12 
13 #include "utils/setup_util.hpp"
14 #include "utils/type_util.hpp"
15 
16 
17 
18 namespace se {
19 
20 
21 
22 // Defaults
23 static const se::field_t dflt_tsdf = 1.f;
24 
25 static const se::field_t dflt_occupancy = 0.f;
26 
27 static const se::weight_t dflt_weight = 0;
28 
29 static const se::time_stamp_t dflt_time_stamp = -1.f;
30 
31 static const se::rgba_t dflt_rgba = 0xFFFFFFFF; // White
32 
34 
35 template<se::Field FieldT>
36 struct FieldData {
37 };
38 
39 template<>
42  occupancy(dflt_occupancy),
43  weight(dflt_weight),
44  observed(false),
45  time_stamp(dflt_time_stamp)
46  {
47  }
50  bool observed;
52  static constexpr bool invert_normals = false;
53 };
54 
55 template<>
57  FieldData() : tsdf(dflt_tsdf), weight(dflt_weight)
58  {
59  }
62  static constexpr bool invert_normals = true;
63 };
64 
65 // Colour data
66 template<se::Colour ColB>
67 struct ColourData {
68 };
69 
70 template<>
72  ColourData() : rgba(dflt_rgba)
73  {
74  }
76 };
77 
78 // Semantic data
79 template<se::Semantics SemB>
80 struct SemanticData {
81 };
82 
83 // Semantic data
84 template<>
86  SemanticData() : sem(dflt_semantics)
87  {
88  }
90 };
91 
92 template<se::Field FldT = se::Field::TSDF,
95 struct Data : public FieldData<FldT>, ColourData<ColB>, SemanticData<SemB> {
96  static constexpr se::Field fld_ = FldT;
97  static constexpr se::Colour col_ = ColB;
98  static constexpr se::Semantics sem_ = SemB;
99 };
100 
101 
102 
106 
107 template<se::Field FieldT>
109 };
110 
111 template<>
113  FieldDeltaData() : delta_occupancy(0)
114  {
115  }
117 };
118 
119 template<>
121  FieldDeltaData() : delta_tsdf(0), delta_weight(0)
122  {
123  }
126 };
127 
128 // Colour data
129 template<se::Colour ColB>
131 };
132 
133 template<>
135  ColourDeltaData() : delta_rgba(0)
136  {
137  }
139 };
140 
141 
142 
143 template<se::Field FldT = se::Field::TSDF,
146 struct DeltaData : public FieldDeltaData<FldT>, ColourDeltaData<ColB> {
147  static constexpr se::Field fld_ = FldT;
148  static constexpr se::Colour col_ = ColB;
149  static constexpr se::Semantics sem_ = SemB;
150 };
151 
152 
153 
157 
159 
160 template<se::Field FieldT>
162 };
163 
164 template<>
166  float k_sigma;
169 
170  float k_tau;
173 
179 
182 
184 
186 
188 
191  FieldDataConfig();
192 
196  FieldDataConfig(const std::string& yaml_file);
197 
198  static constexpr se::Field FldT = se::Field::Occupancy;
199 };
200 
201 std::ostream& operator<<(std::ostream& os, const FieldDataConfig<se::Field::Occupancy>& c);
202 
203 template<>
207 
210  FieldDataConfig();
211 
215  FieldDataConfig(const std::string& yaml_file);
216 
217  static constexpr se::Field FldT = se::Field::TSDF;
218 };
219 
220 std::ostream& operator<<(std::ostream& os, const FieldDataConfig<se::Field::TSDF>& c);
221 
222 
223 
224 // Colour data
225 template<se::Colour ColB>
228  {
229  }
230  ColourDataConfig(const std::string& /* yaml_file */)
231  {
232  }
233 };
234 
235 template<se::Colour ColB>
236 std::ostream& operator<<(std::ostream& os, const ColourDataConfig<ColB>& /* c */)
237 {
238  return os;
239 }
240 
241 template<>
246 
250  ColourDataConfig(const std::string& yaml_file);
251 };
252 
253 std::ostream& operator<<(std::ostream& os, const ColourDataConfig<se::Colour::On>& c);
254 
255 
256 
257 // Semantic data
258 template<se::Semantics SemB>
261  {
262  }
263  SemanticDataConfig(const std::string& /* yaml_file */)
264  {
265  }
266 };
267 
268 template<se::Semantics SemB>
269 std::ostream& operator<<(std::ostream& os, const SemanticDataConfig<SemB>& /* c */)
270 {
271  return os;
272 }
273 
274 // Semantic data
275 template<>
280 
284  SemanticDataConfig(const std::string& yaml_file);
285 };
286 
287 std::ostream& operator<<(std::ostream& os, const SemanticDataConfig<se::Semantics::On>& c);
288 
289 
290 
291 template<se::Field FldT = se::Field::TSDF,
294 struct DataConfig : public FieldDataConfig<FldT>, ColourDataConfig<ColB>, SemanticDataConfig<SemB> {
295  static constexpr se::Field fld_ = FldT;
296  static constexpr se::Colour col_ = ColB;
297  static constexpr se::Semantics sem_ = SemB;
298 
302  {
303  }
304 
308  DataConfig(const std::string& yaml_file) :
309  FieldDataConfig<FldT>(yaml_file),
310  ColourDataConfig<ColB>(yaml_file),
311  SemanticDataConfig<SemB>(yaml_file)
312  {
313  }
314 };
315 
316 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
317 std::ostream& operator<<(std::ostream& os, const DataConfig<FldT, ColB, SemB>& c)
318 {
319  // Call the operator<< of the base classes.
320  os << *static_cast<const FieldDataConfig<FldT>*>(&c);
321  os << *static_cast<const ColourDataConfig<ColB>*>(&c);
322  os << *static_cast<const SemanticDataConfig<SemB>*>(&c);
323  return os;
324 }
325 
326 
327 
328 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
329 inline void set_invalid(Data<FldT, ColB, SemB>& data);
330 
331 template<se::Colour ColB, se::Semantics SemB>
333 {
335 }
336 
337 template<se::Colour ColB, se::Semantics SemB>
339 {
341 }
342 
343 
344 
345 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
346 inline bool is_valid(const Data<FldT, ColB, SemB>& data);
347 
348 template<se::Colour ColB, se::Semantics SemB>
350 {
351  return data.weight != dflt_weight;
352 }
353 
354 template<se::Colour ColB, se::Semantics SemB>
356 {
357  return data.weight != dflt_weight;
358 }
359 
360 
361 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
362 inline bool is_invalid(const Data<FldT, ColB, SemB>& data);
363 
364 template<se::Colour ColB, se::Semantics SemB>
366 {
367  return data.weight == dflt_weight;
368 }
369 
370 template<se::Colour ColB, se::Semantics SemB>
372 {
373  return data.weight == dflt_weight;
374 }
375 
376 
377 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
378 inline float get_field(const Data<FldT, ColB, SemB> data);
379 
380 template<se::Colour ColB, se::Semantics SemB>
382 {
383  return data.tsdf;
384 }
385 
386 template<se::Colour ColB, se::Semantics SemB>
388 {
389  return data.occupancy;
390 }
391 
392 
393 
394 template<se::Field FldT, se::Colour ColB, se::Semantics SemB>
395 inline float is_inside(const Data<FldT, ColB, SemB>& data);
396 
397 template<se::Colour ColB, se::Semantics SemB>
399 {
400  return data.tsdf < 0.f;
401 }
402 
403 template<se::Colour ColB, se::Semantics SemB>
405 {
406  return data.occupancy > 0.f;
407 }
408 
409 
410 
411 // Occupancy data setups
416 
417 // Occupancy data setups
423 
424 // TSDF data setups
429 
434 
435 
436 
437 } // namespace se
438 
439 
440 
441 #endif // SE_DATA_HPP
bool is_valid(const Data< FldT, ColB, SemB > &data)
se::rgba_t rgba
Definition: data.hpp:75
static const se::field_t dflt_occupancy
Definition: data.hpp:25
void set_invalid(Data< FldT, ColB, SemB > &data)
static const se::field_t dflt_tsdf
Definition: data.hpp:23
se::field_t log_odd_max
Definition: data.hpp:181
FieldDeltaData()
Definition: data.hpp:121
Data< se::Field::Occupancy, se::Colour::Off, se::Semantics::On > OccupancySemData
Definition: data.hpp:414
se::field_t surface_boundary
Definition: data.hpp:178
se::field_t delta_tsdf
Definition: data.hpp:124
float sigma_min_factor
Definition: data.hpp:167
Definition: data.hpp:161
UncertaintyModel uncertainty_model
Definition: data.hpp:185
Data< se::Field::TSDF, se::Colour::Off, se::Semantics::Off > TSDFData
Definition: data.hpp:425
se::weight_t max_weight
Definition: data.hpp:176
DataConfig< se::Field::TSDF, se::Colour::Off, se::Semantics::On > TSDFSemDataConfig
Definition: data.hpp:432
static const se::rgba_t dflt_rgba
Definition: data.hpp:31
FieldData()
Definition: data.hpp:41
DataConfig< se::Field::TSDF, se::Colour::On, se::Semantics::Off > TSDFColDataConfig
Definition: data.hpp:431
Colour
Definition: setup_util.hpp:19
SemanticDataConfig()
Definition: data.hpp:260
Definition: data.hpp:130
UncertaintyModel
DATA CONFIG ///.
Definition: data.hpp:158
int fs_integr_scale
Definition: data.hpp:183
static const se::semantics_t dflt_semantics
Definition: data.hpp:33
se::field_t max_occupancy
Definition: data.hpp:175
float field_t
The type of the stored field (e.g. TSDF, ESDF or occupancy)
Definition: type_util.hpp:50
uint32_t rgba_t
The type of the colour.
Definition: type_util.hpp:58
SemanticData()
Definition: data.hpp:86
DataConfig()
Initializes all sub-configs to their sensible defaults.
Definition: data.hpp:301
Definition: data.hpp:95
DataConfig(const std::string &yaml_file)
Initializes the config from a YAML file.
Definition: data.hpp:308
float k_sigma
Definition: data.hpp:166
Definition: data.hpp:80
Definition: data.hpp:146
float time_stamp_t
The type of the time stamp.
Definition: type_util.hpp:56
Data< se::Field::TSDF, se::Colour::On, se::Semantics::Off > TSDFColData
Definition: data.hpp:426
FieldDeltaData()
Definition: data.hpp:113
se::weight_t delta_weight
Definition: data.hpp:125
Definition: data.hpp:259
DataConfig< se::Field::Occupancy, se::Colour::On, se::Semantics::On > OccupancyColSemDataConfig
Definition: data.hpp:422
Definition: data.hpp:36
DELTA DATA ///.
Definition: data.hpp:108
se::field_t min_occupancy
Definition: data.hpp:174
DataConfig< se::Field::Occupancy, se::Colour::Off, se::Semantics::On > OccupancySemDataConfig
Definition: data.hpp:420
se::semantics_t sem
Definition: data.hpp:89
Data< se::Field::Occupancy, se::Colour::Off, se::Semantics::Off > OccupancyData
Definition: data.hpp:412
se::weight_t max_weight
Definition: data.hpp:206
se::field_t delta_occupancy
Definition: data.hpp:116
se::field_t occupancy
Definition: data.hpp:48
Field
Definition: setup_util.hpp:18
se::field_t log_odd_min
Definition: data.hpp:180
Data< se::Field::TSDF, se::Colour::Off, se::Semantics::On > TSDFSemData
Definition: data.hpp:427
bool observed
Definition: data.hpp:50
Definition: data.hpp:67
ColourDeltaData()
Definition: data.hpp:135
static const se::weight_t dflt_weight
Definition: data.hpp:27
se::field_t truncation_boundary_factor
Definition: data.hpp:205
Data< se::Field::Occupancy, se::Colour::On, se::Semantics::On > OccupancyColSemData
Definition: data.hpp:415
se::weight_t weight
Definition: data.hpp:49
float tau_min_factor
Definition: data.hpp:171
bool is_invalid(const Data< FldT, ColB, SemB > &data)
se::rgba_t delta_rgba
Definition: data.hpp:138
ColourData()
Definition: data.hpp:72
ColourDataConfig(const std::string &)
Definition: data.hpp:230
DataConfig< se::Field::Occupancy, se::Colour::On, se::Semantics::Off > OccupancyColDataConfig
Definition: data.hpp:419
se::weight_t weight
Definition: data.hpp:61
static const se::time_stamp_t dflt_time_stamp
Definition: data.hpp:29
se::field_t weight_t
The type of the field type weight.
Definition: type_util.hpp:54
float sigma_max_factor
Definition: data.hpp:168
se::field_t tsdf
Definition: data.hpp:60
short semantics_t
The type of the semantic class.
Definition: type_util.hpp:60
Semantics
Definition: setup_util.hpp:20
Definition: data.hpp:294
se::time_stamp_t time_stamp
Definition: data.hpp:51
Data< se::Field::Occupancy, se::Colour::On, se::Semantics::Off > OccupancyColData
Definition: data.hpp:413
DataConfig< se::Field::Occupancy, se::Colour::Off, se::Semantics::Off > OccupancyDataConfig
Definition: data.hpp:418
float get_field(const Data< FldT, ColB, SemB > data)
float tau_max_factor
Definition: data.hpp:172
bool const_surface_thickness
Definition: data.hpp:187
float is_inside(const Data< FldT, ColB, SemB > &data)
Definition: data.hpp:226
SemanticDataConfig(const std::string &)
Definition: data.hpp:263
float k_tau
Definition: data.hpp:170
ColourDataConfig()
Definition: data.hpp:227
FieldData()
Definition: data.hpp:57
se::weight_t factor
Definition: data.hpp:177
DataConfig< se::Field::TSDF, se::Colour::On, se::Semantics::On > TSDFColSemDataConfig
Definition: data.hpp:433
Helper wrapper to allocate and de-allocate octants in the octree.
Definition: colour_utils.hpp:17
Data< se::Field::TSDF, se::Colour::On, se::Semantics::On > TSDFColSemData
Definition: data.hpp:428
DataConfig< se::Field::TSDF, se::Colour::Off, se::Semantics::Off > TSDFDataConfig
Definition: data.hpp:430