ifm3d
struct_calibration.hpp
1 // -*- c++ -*-
2 /*
3  * Copyright 2022-present ifm electronic, gmbh
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef IFM3D_DESERIALIZE_STRUCT_CALIBRATION_HPP
8 #define IFM3D_DESERIALIZE_STRUCT_CALIBRATION_HPP
9 
10 #include <array>
11 #include <chrono>
12 #include <type_traits>
13 #include <ifm3d/deserialize/deserialize_utils.hpp>
14 
15 namespace ifm3d
16 {
17  namespace calibration
18  {
26  {
27  using Ptr = std::shared_ptr<struct ExtrinsicOpticToUser>;
28  float trans_x; // value in meter
29  float trans_y; // value in meter
30  float trans_z; // value in meter
31  float rot_x; // value in radians
32  float rot_y; // value in radians
33  float rot_z; // value in radians
34 
35  void
36  Read(const uint8_t* data)
37  {
38  trans_x = mkval<float>(data + sizeof(float) * 0);
39  trans_y = mkval<float>(data + sizeof(float) * 1);
40  trans_z = mkval<float>(data + sizeof(float) * 2);
41  rot_x = mkval<float>(data + sizeof(float) * 3);
42  rot_y = mkval<float>(data + sizeof(float) * 4);
43  rot_z = mkval<float>(data + sizeof(float) * 5);
44  }
45  };
47 
62  struct Calibration
63  {
64  using Ptr = std::shared_ptr<struct Calibration>;
65  uint32_t model_id;
66  std::array<float, 32> model_parameters;
67  void
68  Read(const uint8_t* data)
69  {
70  model_id = mkval<uint32_t>(data);
71  mkarray<float, 32>(data + sizeof(uint32_t), model_parameters);
72  }
73  };
74  /*@brief Intrisnsic parameter model for the device/head*/
75  using IntrinsicCalibration = struct Calibration;
76  /*@brief Inverse intrisnsic parameter model for the device/head*/
78 
85  struct IMUSample
86  {
87  using Ptr = std::shared_ptr<struct IMUSample>;
88  uint16_t hw_timestamp;
89  uint64_t timestamp;
90  float temperature;
91  float acc_x;
92  float acc_y;
93  float acc_z;
94  float gyro_x;
95  float gyro_y;
96  float gyro_z;
97 
98  void
99  Read(const uint8_t* data)
100  {
101  size_t offset = 0;
102 
103  auto read = [&](auto& val) {
104  using T = std::remove_reference_t<decltype(val)>;
105  val = mkval<T>(data + offset);
106  offset += sizeof(T);
107  };
108 
109  read(hw_timestamp);
110  read(timestamp);
111  read(temperature);
112  read(acc_x);
113  read(acc_y);
114  read(acc_z);
115  read(gyro_x);
116  read(gyro_y);
117  read(gyro_z);
118  }
119  };
120 
121  /*@brief Extrinsic calibration for converting between IMU and User
122  * coordinates*/
124  } // end namespace calibration
125 
126 } // end namespace ifm3d
127 
128 #endif // IFM3D_DESERIALIZE_STRUCT_CALIBRATION_HPP
ifm3d::calibration::IMUSample
All items are given in SI units, i.e. acc_xyz are in [m/s^2] and gyro_xyz are in [rad/s].
Definition: struct_calibration.hpp:85
ifm3d::calibration::ExtrinsicOpticToUser
All items are given in SI units, i.e. transXYZ are in [m] and rotXYZ are in [rad].
Definition: struct_calibration.hpp:25
ifm3d::calibration::Calibration
Definition: struct_calibration.hpp:62